Przejdź do głównej zawartości

Uruchamianie headless i ciągła integracja

Scenariusz zbudowany w interfejsie wykonuje się bez okna z wiersza poleceń. To droga, która zamienia testy API w krok potoku.

Scenariusz „Find pets by status” w edytorze: akcja Input/Param o nazwie status, żądanie „Finds Pets by status” oraz Log

Terminal window
restorm \
--open ./projet.restorm \
--run "Find pets by status" \
--headless \
--param status=available
ArgumentRola
--open <path>, -oProjekt do otwarcia. Obowiązkowy przy --run
--run <target>Scenariusz do uruchomienia. Jego obecność włącza tryb wiersza poleceń
--by <name|id>Sposób, w jaki --run wskazuje scenariusz: przez nazwę (domyślnie) albo przez identyfikator
--headlessŻadnego okna. Bez tej opcji okno jest wyświetlane, a dziennik przewija się na konsoli
--param name=valueWartość parametru wejściowego scenariusza (bloku Input / Param). Powtarzalny
--all-logsWłącza także wpisy silnika; domyślnie emitowane są tylko wpisy akcji Log
--out <file>Zapisuje dziennik również do pliku, na bieżąco
--clear-settings, -clsResetuje preferencje przed uruchomieniem

Błędnie zapisany --param (bez =) jest zgłaszany na wyjściu błędów i pomijany. name= (pusta wartość) jest przyjmowane.

Wartości są konwertowane zgodnie z zadeklarowanym typem parametru — zob. Zmienne i dane.

KodZnaczenie
0Scenariusz zakończył się poprawnie
1Niepowodzenie, anulowanie albo błąd silnika
2Nie znaleziono celu, plik --out niedostępny albo --run bez --open
3Odmowa uprawnienia: RESTORM_TOKEN brakujący, nieprawidłowy lub unieważniony, niewystarczający plan albo nieosiągalny punkt weryfikacji

To właśnie ta konwencja sprawia, że wynik jest bezpośrednio użyteczny dla runnera CI.

Dziennik jest zapisywany na wyjściu standardowym, po jednym wpisie, gdy tylko zostanie wytworzony, w postaci sekwencji YAML:

- message: "🔵 [2026-07-29 10:30:00.123] Commande créée"
data: { id: 4271 }

Poziomy są poprzedzone pastylką: ⚪ debug, 🔵 info, 🟠 warn, 🔴 error. Wiersze nigdy nie są łamane — wyjście pozostaje podatne na grep. Błędy trafiają na standardowe wyjście błędów.

Jest to dokładnie ten tekst, który wytwarza przycisk „kopiuj dziennik” w interfejsie: ten sam format po obu stronach.

Należy korzystać ze źródła sekretów zmienna środowiskowa: sekret jest wstrzykiwany przez skarbiec CI, Restorm jedynie go odczytuje i nic nie zostaje zapisane w projekcie. Zob. Sekrety.

name: Tests d'API
on: [push]
jobs:
api:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Installer Restorm
env:
RESTORM_VERSION: '1.4.2' # wersja, którą chcemy przypiąć
run: |
curl -sSL -o restorm.deb \
"https://dl.restorm.app/restorm_${RESTORM_VERSION}_amd64.deb"
sudo apt-get install -y ./restorm.deb
- name: Exécuter les tests de fumée
env:
RESTORM_TOKEN: ${{ secrets.RESTORM_TOKEN }}
API_TOKEN: ${{ secrets.API_TOKEN }}
run: |
xvfb-run -a restorm \
--open ./api.restorm \
--run "Find pets by status" \
--headless \
--all-logs \
--out run.log \
--param status=available
- name: Publier le journal
if: always()
uses: actions/upload-artifact@v4
with:
name: journal-restorm
path: run.log
tests-api:
image: ubuntu:24.04
variables:
RESTORM_TOKEN: $RESTORM_TOKEN
RESTORM_VERSION: '1.4.2' # wersja, którą chcemy przypiąć
before_script:
- apt-get update && apt-get install -y curl xvfb
- curl -sSL -o restorm.deb "https://dl.restorm.app/restorm_${RESTORM_VERSION}_amd64.deb"
- apt-get install -y ./restorm.deb
script:
- >
xvfb-run -a restorm
--open ./api.restorm
--run "Find pets by status"
--headless --all-logs --out run.log
--param status=$PET_STATUS
artifacts:
when: always
paths: [run.log]
  • Akcje Toast nie robią nic; wykonanie przebiega dalej normalnie.
  • Parametrów nie da się wprowadzić interaktywnie: trzeba dostarczyć je wszystkie przez --param albo pozwolić im przyjąć wartość domyślną.
  • Serwer MCP nigdy nie startuje na maszynie bez ekranu, niezależnie od ustawienia.

Token RESTORM_TOKEN (z prefiksem rstk_) generuje się z panelu własnego konta. Jest przypisany do organizacji, nie do osoby: to token, który umieszcza się w skarbcu CI. Zob. Konta i logowanie.