Aller au contenu

Exécution headless et intégration continue

Un scénario construit dans l’interface s’exécute sans fenêtre depuis la ligne de commande. C’est le chemin qui transforme vos tests d’API en étape de pipeline.

Le scénario « Find pets by status » dans l'éditeur : une action Input/Param nommée status, la requête « Finds Pets by status » et un Log

Terminal window
restorm \
--open ./projet.restorm \
--run "Find pets by status" \
--headless \
--param status=available
ArgumentRôle
--open <chemin>, -oLe projet à ouvrir. Obligatoire avec --run
--run <cible>Le scénario à exécuter. Sa présence active le mode ligne de commande
--by <name|id>Comment --run désigne le scénario : par nom (défaut) ou par identifiant
--headlessAucune fenêtre. Sans lui, la fenêtre s’affiche pendant que le journal défile sur la console
--param nom=valeurUne valeur pour un paramètre d’entrée du scénario (une boîte Input / Param). Répétable
--all-logsInclut les entrées du moteur ; par défaut seules celles de l’action Log sont émises
--out <fichier>Écrit aussi le journal dans un fichier, au fil de l’eau
--clear-settings, -clsRéinitialise les préférences avant le lancement

Un --param mal formé (sans =) est signalé sur la sortie d’erreur et ignoré. nom= (valeur vide) est accepté.

Les valeurs sont converties selon le type déclaré du paramètre — voir Variables et données.

CodeSignification
0Le scénario s’est terminé correctement
1Échec, annulation, ou erreur du moteur
2Cible introuvable, fichier --out inaccessible, ou --run sans --open
3Droit refusé : RESTORM_TOKEN absent, invalide ou révoqué, plan insuffisant, ou point de vérification injoignable

C’est cette convention qui rend le résultat directement exploitable par un runner de CI.

Le journal est écrit sur la sortie standard, une entrée à la fois, dès qu’elle est produite, sous forme de séquence YAML :

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

Les niveaux sont préfixés d’une pastille : ⚪ debug, 🔵 info, 🟠 warn, 🔴 error. Les lignes ne sont jamais coupées — la sortie reste grep-able. Les erreurs partent sur la sortie d’erreur standard.

C’est exactement le texte que produit le bouton « copier le journal » de l’interface : le même format des deux côtés.

Utilisez la source de secret variable d’environnement : le secret est injecté par le coffre de votre CI, Restorm ne fait que le lire, et rien n’est écrit dans le projet. Voir Secrets.

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' # la version que vous voulez épingler
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' # la version que vous voulez épingler
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]
  • Les actions Toast ne font rien ; l’exécution se poursuit normalement.
  • Les paramètres ne peuvent pas être demandés interactivement : fournissez-les tous avec --param, ou laissez-les prendre leur valeur par défaut.
  • Le serveur MCP ne démarre jamais sur une machine sans affichage, quel que soit le réglage.

Le jeton RESTORM_TOKEN (préfixé rstk_) se génère depuis le tableau de bord de votre compte. Il est rattaché à l’organisation, pas à une personne : c’est le jeton qu’on met dans le coffre de la CI. Voir Comptes et connexion.