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.