Aller au contenu

Import des résultats de tests issus de pipelines

Attention

Sur les instances SquashTM Cloud, cette fonctionnalité est disponible avec une licence SquashTM Ultimate.

SquashTM vous donne la possibilité d'importer les résultats des tests automatisés exécutés dans un pipeline CI/CD.

Ceci se fait via un appel API (voir le détail), qui créera une nouvelle suite automatisée liée à l'itération visée.

Prérequis

Afin de pouvoir importer les résultats de tests, il est nécessaire qu'une itération existe dans SquashTM et que son plan d'exécution soit complété avec les tests dont les résultats vont être importés.

Il est également nécessaire que ces tests possèdent une référence de test automatisé unique (parmi celles du plan d'exécution de l'itération).

Toutes ces étapes sont faisables via les API si besoin :

  • Création de cas de test : requête sur le POST /test-cases en renseignant le champ automated_test_reference ;
  • Création d'une campagne : requête sur le POST /campaigns ;
  • Création d'une itération : requête sur le POST /campaigns/{campaign_id}/iterations ;
  • Ajout de tests à une itération : requête sur le POST /iterations/{iteration_id}/test-plan.

Pour plus d'informations sur ces requêtes, voir la documentation de l'API, accessible dans SquashTM.

Accès doc API

Mapping entre les informations

Les résultats seront réintégrés dans SquashTM en faisant correspondre la référence de test automatisé renseignée dans la requête API avec celle du test présent dans le plan d'exécution de l'itération choisie.
Si certains cas de tests possèdent des jeux de données, le mapping se fera sur la combinaison des champs référence de test automatisé et nom du jeu de données associé à l'ITPI.

référence test automatisé

nom jeu de données

Les informations pouvant actuellement être remontées sont :

  • le statut du test ;
  • la durée d'exécution du test ;
  • les messages des assertions en erreur ;
  • les pièces jointes des exécutions ;
  • les champs personnalisés des exécutions.

Il est également possible de rajouter des pièces jointes au niveau de la suite de tests.
Le statut de la suite de tests sera auto-calculé à partir des résultats des tests, mais il est tout de même possible de surcharger la valeur si besoin.

Documentation du point d'API

POST /import/results/{iteration_id}

🔸 Path parameter

Nom Type Obligatoire Description
iteration_id integer ✅ Oui ID de l'itération. Doit être supérieur ou égal à 1.

🔸 Request body

Remarque : Il existe deux types de champs obligatoires :
- 🔴 : Champs dont l'absence entraîne le rejet complet de l'import.
- 🟡 : Champs dont l'absence ou une valeur invalide entraîne le rejet de leur objet courant, mais pas de l'import complet.

Content-Type : application/json
Authentication : Bearer token

Champ Type Obligatoire Description
┌─ automated_test_suite objet Non Informations sur l'exécution de la suite de tests.
│    ├─ status string Non Statut de la suite : BLOCKED, CANCELLED, SUCCESS, RUNNING, SKIPPED ou FAILURE. Si non renseigné, il sera calculé automatiquement.
│    └─ attachments tableau d'objets Non Fichiers joints à la suite.
│          ├─ name string 🟡 Oui Nom du fichier avec son extension, parmi txt, html, xml ou doc (ex. report.html).
│          └─ content string 🟡 Oui Contenu encodé en base64, taille maximale définie par l'instance SquashTM.
└─ tests tableau d'objets 🔴 Oui Résultats individuels des tests.
      ├─ reference string 🔴 Oui Identifiant unique du test (utilisé pour le mapping avec SquashTM). Exemple : testSuite.testClass.testRef1
      ├─ dataset_name string Non Nom du jeu de données utilisé dans SquashTM.
      ├─ status string 🔴 Oui Statut du test : BLOCKED, CANCELLED, SUCCESS, RUNNING, SKIPPED, FAILURE, ou READY.
      ├─ duration integer Non Durée du test en millisecondes.
      ├─ failure_details tableau de strings Non Liste des messages d'échec.
      ├─ attachments tableau d'objets Non Fichiers liés au test.
      │    ├─ name string 🟡 Oui Nom du fichier avec son extension, parmi celles acceptées par l'instance SquashTM (ex. screenshot.png, si png a été ajouté au niveau système).
      │    └─ content string 🟡 Oui Contenu encodé en base64, taille maximale définie par l'instance SquashTM.
      ├─ test_steps tableau d'objets Non Détails des pas de test individuels. Le nombre de ces pas doit être égal au nombre de pas de test du cas de test correspondant.
      │    ├─ status string 🟡 Oui Statut du pas de test : BLOCKED, CANCELLED, SUCCESS, RUNNING, SKIPPED, FAILURE, ou READY.
      │    └─ attachments tableau d'objets Non Fichiers liés au pas de test.
      │          ├─ name string 🟡 Oui Nom du fichier avec son extension, parmi celles acceptées par l'instance SquashTM (ex. screenshot.png, si png a été ajouté au niveau système).
      │          └─ content string 🟡 Oui Contenu encodé en base64, taille maximale définie par l'instance SquashTM.
      └─ custom_fields tableau d'objets Non Champs personnalisés associés au test.
            ├─ code string 🟡 Oui Code du champ personnalisé tel que défini dans SquashTM.
            └─ value string / integer / booléen / tableau de strings 🟡 Oui Valeur du champ personnalisé. Le type dépend de la configuration du champ dans SquashTM.

Exemple :

{
  "automated_test_suite": {
    "attachments": [
      {
        "name": "report.html",
        "content": "Contenu encodé en base64 ici..."
      }
    ]
  },
  "tests": [
    {
      "reference": "testSuite.testClass.testRef1",
      "dataset_name": "admin_dataset",
      "status": "FAILURE",
      "duration": 35000,
      "failure_details": ["1 n'est pas égal à 2"],
      "attachments": [
        {
          "name": "screenshot.png",
          "content": "Contenu encodé en base64 ici..."
        }
      ],
      "test_steps": [
        {
          "status": "SUCCESS"
        },
        {
          "status": "FAILURE",
          "attachments": [
            {
              "name": "step_screenshot.png",
              "content": "Base64-encoded content here..."
            }
          ]
        }
      ],
      "custom_fields" : [ {
        "code" : "NUMERIC",
        "value" : 200
      }, {
        "code" : "TEXT",
        "value" : "description"
      }, {
        "code" : "CHECKBOX",
        "value" : "true"
      }, {
        "code" : "TAGS_RELATED",
        "value" : ["tag1", "tag2"]
      } ]
    }
  ]
}

🔸 Réponses

Code Signification Remarques
204 ✅ Tous les résultats ont été importés avec succès dans SquashTM.
207 ⚠️ Succès partiel – certains résultats n'ont pas pu être importés. Le corps de réponse fournit le détail des erreurs, par exemple :
{
"iteration_id": 1234,
"tests": [
{
"test_case_id": null,
"reference": "testSuite.testClass.testRef1",
"error": "No test found with this reference."
}
]
}
400 🛑 Requête invalide Entrée incorrecte.
401 🔒 Non autorisé Authentification requise.
403 🚫 Interdit Accès refusé.
404 ❓ Introuvable Itération non trouvée.
412 🛑 Échec de la condition préalable Le corps de requête ne contient pas un ou plusieurs champs obligatoires et l'import a été interrompu. Le corps de réponse fournit le détail des erreurs, par exemple :
{
"fieldValidationErrors": [
{
"objectName": "post-execution-result-import",
"fieldName": "tests[0].reference",
"fieldValue": null,
"errorMessage": "The reference attribute is required"
}
]
}
500 ❌ Erreur interne Erreur inattendue du serveur.