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-casesen 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.

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.


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 : |
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 : |
500 |
❌ Erreur interne | Erreur inattendue du serveur. |