Aller au contenu

Rejeu des tests en échec à la fin d'une exécution

Info

Ce plugin est disponible uniquement dans la version Ultimate de Squash.

A partir de la version 5.1.0, l'image Docker de Squash Orchestrator inclut le plugin retryer permettant de rejouer les cas de test en échec à la fin d'une exécution. Cela peut être pratique quand une suite de tests automatisée contient des tests instables.

Pour utiliser la fonctionnalité, il suffit de mettre en place un hook :

hooks:
- name: Retry Hook
  events:
  - channel: teardown
  before:
  - uses: tm.squashtest.org/retry@v1
    with:
      max-retry: 2
      scope: test.technology == 'postman'
      failure-status: ['FAIL']

Warning

L'action retry peut être utilisée uniquement au niveau d'un teardown channel hook qui est exécuté à la fin de chaque job.

Ce hook d'exemple rejoue deux fois, à la fin de chaque job du workflow, tous les tests Postman dont le statut est FAIL. Si à la fin du premier rejeu, l'ensemble des tests en échec passe en succès, le deuxième rejeu n'est pas lancé.

Ce hook fait appel à l'action tm.squashtest.org/retry@v1 du plugin retryer. Cette action a trois paramètres optionnels :

  • max-retry: le nombre de relances des tests en Ă©chec (1 par dĂ©faut)
  • scope: le filtre appliquĂ© aux tests relancĂ©s ('true' par dĂ©faut, c'est-Ă -dire que l'ensemble des tests exĂ©cutĂ©s sont pris en compte pour le rejeu)
  • failure-status: les statuts des tests considĂ©rĂ©s comme les tests en Ă©chec (['FAIL', 'ERROR'] par dĂ©faut)

Les valeurs possibles de failure-status sont FAIL, ERROR, SKIPPED et PASS.

Le filtre (scope) utilise les fonctions et les expressions qui sont décrites dans la documentation d'OpenTestFactory. Il utilise le contexte test de l'orchestrateur, dont les properties sont détaillées dans la documentation de la Quality Gate.

Les actions de rejeu peuvent être enchaînées. Dans ce cas, chaque action retry prend en compte les résultats des actions précédentes. Supposons que la chaîne des actions définie ci-dessous est appliquée à un workflow d'un seul job contenant des tests Postman et Cypress :

hooks:
- name: Chain Retry Hooks
  events:
  - channel: teardown
  before:
  - uses: tm.squashtest.org/retry@v1
    with:
      failure-status: ['FAIL']
  - uses: tm.squashtest.org/retry@v1
    with:
      scope: test.technology == 'postman'
      failure-status: ['FAIL', 'ERROR']
  - uses: tm.squashtest.org/retry@v1
    with:
      max-retry: 2
      scope: test.technology == 'postman' && test.importance == 'HIGH'
      failure-status: ['FAIL', 'ERROR']

A la fin du workflow, la première action retry rejoue l'ensemble des tests ayant le statut FAIL. La seconde relance les tests Postman dont le statut est resté en FAIL après le premier rejeu, mais aussi tous les tests Postman en ERROR qui ne rentraient pas dans le périmètre de la première action. Enfin, la troisième action tentera de relancer deux fois tous les tests Postman d'importance haute dont le statut n'a pas changé après le deuxième rejeu.