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

NomTypeObligatoireDescription
iteration_idinteger✅ OuiID 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

ChampTypeObligatoireDescription
┌─ automated_test_suiteobjetNonInformations sur l'exécution de la suite de tests.
│    ├─ statusstringNonStatut de la suite : BLOCKED, CANCELLED, SUCCESS, RUNNING, SKIPPED ou FAILURE. Si non renseigné, il sera calculé automatiquement.
│    └─ attachmentstableau d'objetsNonFichiers joints à la suite.
│          ├─ namestring🟡 OuiNom du fichier avec son extension, parmi txt, html, xml ou doc (ex. report.html).
│          └─ contentstring🟡 OuiContenu encodé en base64, taille maximale définie par l'instance SquashTM.
└─ teststableau d'objets🔴 OuiRésultats individuels des tests.
      ├─ referencestring🔴 OuiIdentifiant unique du test (utilisé pour le mapping avec SquashTM). Exemple : testSuite.testClass.testRef1
      ├─ dataset_namestringNonNom du jeu de données utilisé dans SquashTM.
      ├─ statusstring🔴 OuiStatut du test : BLOCKED, CANCELLED, SUCCESS, RUNNING, SKIPPED, FAILURE, ou READY.
      ├─ durationintegerNonDurée du test en millisecondes.
      ├─ failure_detailstableau de stringsNonListe des messages d'échec.
      ├─ attachmentstableau d'objetsNonFichiers liés au test.
      │    ├─ namestring🟡 OuiNom 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).
      │    └─ contentstring🟡 OuiContenu encodé en base64, taille maximale définie par l'instance SquashTM.
      ├─ test_stepstableau d'objetsNonDé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.
      │    ├─ statusstring🟡 OuiStatut du pas de test : BLOCKED, CANCELLED, SUCCESS, RUNNING, SKIPPED, FAILURE, ou READY.
      │    └─ attachmentstableau d'objetsNonFichiers liés au pas de test.
      │          ├─ namestring🟡 OuiNom 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).
      │          └─ contentstring🟡 OuiContenu encodé en base64, taille maximale définie par l'instance SquashTM.
      └─ custom_fieldstableau d'objetsNonChamps personnalisés associés au test.
            ├─ codestring🟡 OuiCode du champ personnalisé tel que défini dans SquashTM.
            └─ valuestring / integer / booléen / tableau de strings🟡 OuiValeur 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

CodeSignificationRemarques
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 invalideEntrée incorrecte.
401🔒 Non autoriséAuthentification requise.
403🚫 InterditAccès refusé.
404❓ IntrouvableItération non trouvée.
412🛑 Échec de la condition préalableLe 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 interneErreur inattendue du serveur.