- Démarrage
- Gestion de projet
- Travailler avec l’analyse de l’impact des modifications
- Créer des scénarios de test
- Affectation de cas de test aux exigences.
- Clonage des cas de test
- Exporter des cas de test
- Lier des cas de test à Test Manager dans Studio
- Delete test cases
- Activation de la gouvernance au niveau du projet
- Désactivation de la gouvernance au niveau du projet
- Activation de la gouvernance au niveau des cas de test
- Désactivation de la gouvernance au niveau du cas de test
- Activer ou désactiver la gouvernance en masse pour les cas de test
- Appliquer l’ordre de signature pour les cas de test régis
- Gérer les approbateurs pour les cas de test régis
- Gérer les cas de test régis à l’état En cours
- Gérer les cas de test régis dans l'état En révision
- Gérer les objets régis à l'état Signé
- Gérer les commentaires pour les cas de test régis
- Afficher les informations de gouvernance pour les journaux de cas de test
- Gérer les approbateurs pour les journaux de cas de test régis
- Gérer les journaux de cas de test régis dans l’état En cours
- Gérer les journaux de cas de test régis dans l’état En révision
- Gérer les journaux de cas de test régis dans l’état Signé
- Gérer les commentaires pour les journaux de cas de test régis
- Activer la gouvernance au niveau du journal de cas de test
- Désactivation de la gouvernance au niveau du journal de cas de test
- Afficher et rechercher des cas de test
- Exécuter des cas de test sans ensemble de tests
- Exécuter des tests mixtes
- Créer des exécutions en attente
- Réexécution des exécutions de test
- Résoudre les problèmes des exécutions automatisées
- FAQ - Parité des fonctionnalités - Test Manager vs Orchestrator
- Analyser les résultats de test
- États des résultats de test Playwright
- Supprimer les résultats de cas de test
- Synchronisation des défauts
- Créer des défauts à partir des résultats
- Résultats de test automatisés
- Remplacer les résultats de test
- Naviguer et rechercher des résultats de test
- Examen des résultats du cas de test
- Affichage de la couverture des activités
- Opérations et utilitaires de projet
- Paramètres de Test Manager
- Paramètres au niveau du locataire
- Paramètres généraux du projet
- Events
- S'abonner aux événements
- S'abonner à tous les événements
- Se désabonner des événements
- Se désabonner de tous les événements
- Se désabonner de la page des paramètres des notifications
- Affichage des notifications
- Filtrage des notifications
- Afficher les notifications par e-mail
- Activation des notifications par e-mail pour les serveurs SMTP
- Affichage uniquement des notifications non lues
- Marquer toutes les notifications comme lues
- Effacer toutes les notifications
- Suppression de notifications
- Chiffrement des clés gérées par le client
- Journaux d’audit
- Intégration de l'outil de gestion du cycle de vie des applications (ALM)
- Intégration de l'outil de gestion du cycle de vie des applications (ALM)
- Connecté à Test Manager
- Test Manager - Connecteur Integration Service
- Plages d'adresses IP sortantes pour les connecteurs
- Utilisation de SAP Cloud ALM et de Test Manager
- Étape 1: intégration de SAP Cloud ALM à Test Manager
- Étape 2: Créer des cas de test automatisés dans SAP Cloud ALM
- Étape 3: Créer des cas de test automatisés dans Test Manager
- Étape 4: synchronisation des cas de test de Test Manager vers SAP Cloud ALM
- Étape 5: attribution d'automatisations de test à des cas de test
- Étape 6: exécuter des cas de test
- Meilleures pratiques d'automatisation de test SAP
- Résolution des problèmes de l'intégration Jira
- Intégration de l'API
- Agents de codage pour les tests
- Résolution des problèmes
Spécification du format de fichier TMH
Spécification du format de fichier TMH pour la sauvegarde et la migration du projet Test Manager, couvrant la structure du manifeste, les types d'objets et les exigences d'encodage.
Le fichier .tmh est le format de sauvegarde/migration du projet utilisé par UiPath Test Manager. Ce document décrit en détail sa structure, son contenu et ses exigences d'encodage.
Archiver la structure
<package-name>.tmh ← ZIP archive
├── manifest.json ← Package metadata and object counts
└── objects/
├── requirements/
│ └── requirements-{n}.json
├── testcases/
│ └── testcases-{n}.json
├── teststeps/
│ └── teststeps-{n}.json
├── testsets/
│ └── testsets-{n}.json
├── testsettestcaseassignments/
│ └── testsettestcaseassignments-{n}.json
├── requirementtestcaseassignments/
│ └── requirementtestcaseassignments-{n}.json
├── objectlabels/
│ ├── objectlabels-testcase-{n}.json
│ ├── objectlabels-testset-{n}.json
│ ├── objectlabels-requirement-{n}.json
│ ├── objectlabels-testexecution-{n}.json
│ └── objectlabels-testcaselog-{n}.json
├── customfieldvalues/
│ ├── customfieldvalues-testcase-{n}.json
│ └── customfieldvalues-requirement-{n}.json
├── customfieldlabels/
│ └── customfieldlabels-{n}.json
├── customfielddefinitions/
│ └── customfielddefinitions-{n}.json
├── attachments/
│ ├── attachments-testexecution-{n}.json
│ ├── attachments-requirement-{n}.json
│ ├── attachments-testcaselog-{n}.json
│ ├── attachments-teststeplog-{n}.json
│ └── attachments-project-{n}.json
├── testexecutions/
│ ├── testexecutions-Manual-Finished-{n}.json
│ ├── testexecutions-Automated-Finished-{n}.json
│ └── testexecutions-Mixed-Finished-{n}.json
├── testcaselogs/
│ └── testcaselogs-{n}.json
├── teststeplogs/
│ └── teststeplogs-{n}.json
├── testcaselog-assertions/
│ └── testcaselogassertions-{n}.json
├── testcaselogresultoverrides/
│ └── testcaselogresultoverrides-{n}.json
├── assertion-attachments/
│ └── assertion-attachments-{n}.json
├── defects/
│ └── defects-{n}.json
├── parameters/
│ └── parameters-{n}.json
├── testsetpackages/
│ └── testsetpackages-{n}.json
├── testsettestcaseparameters/
│ └── testsettestcaseparameters-{n}.json
├── testsetschedules/
│ └── testsetschedules-testset-{n}.json
├── objectfilters/
│ └── objectfilters-testset-{n}.json
├── projectauthorization/
│ └── projectauthorization-{n}.json
├── projectsettings/
│ └── projectsettings.json ← singular, no number suffix
└── prompts/
└── prompts-{n}.json
<package-name>.tmh ← ZIP archive
├── manifest.json ← Package metadata and object counts
└── objects/
├── requirements/
│ └── requirements-{n}.json
├── testcases/
│ └── testcases-{n}.json
├── teststeps/
│ └── teststeps-{n}.json
├── testsets/
│ └── testsets-{n}.json
├── testsettestcaseassignments/
│ └── testsettestcaseassignments-{n}.json
├── requirementtestcaseassignments/
│ └── requirementtestcaseassignments-{n}.json
├── objectlabels/
│ ├── objectlabels-testcase-{n}.json
│ ├── objectlabels-testset-{n}.json
│ ├── objectlabels-requirement-{n}.json
│ ├── objectlabels-testexecution-{n}.json
│ └── objectlabels-testcaselog-{n}.json
├── customfieldvalues/
│ ├── customfieldvalues-testcase-{n}.json
│ └── customfieldvalues-requirement-{n}.json
├── customfieldlabels/
│ └── customfieldlabels-{n}.json
├── customfielddefinitions/
│ └── customfielddefinitions-{n}.json
├── attachments/
│ ├── attachments-testexecution-{n}.json
│ ├── attachments-requirement-{n}.json
│ ├── attachments-testcaselog-{n}.json
│ ├── attachments-teststeplog-{n}.json
│ └── attachments-project-{n}.json
├── testexecutions/
│ ├── testexecutions-Manual-Finished-{n}.json
│ ├── testexecutions-Automated-Finished-{n}.json
│ └── testexecutions-Mixed-Finished-{n}.json
├── testcaselogs/
│ └── testcaselogs-{n}.json
├── teststeplogs/
│ └── teststeplogs-{n}.json
├── testcaselog-assertions/
│ └── testcaselogassertions-{n}.json
├── testcaselogresultoverrides/
│ └── testcaselogresultoverrides-{n}.json
├── assertion-attachments/
│ └── assertion-attachments-{n}.json
├── defects/
│ └── defects-{n}.json
├── parameters/
│ └── parameters-{n}.json
├── testsetpackages/
│ └── testsetpackages-{n}.json
├── testsettestcaseparameters/
│ └── testsettestcaseparameters-{n}.json
├── testsetschedules/
│ └── testsetschedules-testset-{n}.json
├── objectfilters/
│ └── objectfilters-testset-{n}.json
├── projectauthorization/
│ └── projectauthorization-{n}.json
├── projectsettings/
│ └── projectsettings.json ← singular, no number suffix
└── prompts/
└── prompts-{n}.json
Seuls les types d’objet qui ont été réellement exportés sont présents. Les dossiers/fichiers manquants sont ignorés en mode silencieux lors de l’importation.
Conventions d'affectation de noms de fichiers
La plupart des types d’objets — blocs numérotés
Les fichiers sont nommés <type>-{n}.json où {n} commence à 0 pour les exportations réelles produites par le système. Par exemple:
requirementtestcaseassignments-0.json
testcases-0.json
teststeps-0.json
requirementtestcaseassignments-0.json
testcases-0.json
teststeps-0.json
L'importation analyse tous les fichiers de chaque dossier, de sorte que la numérotation basée sur 0et basée sur 1fonctionne lors de la création personnalisée de fichiers.
Les exportations volumineuses peuvent être divisées en plusieurs fichiers (testcases-0.json, testcases-1.json, etc.) — l'importation lit tous les fichiers dans le dossier.
Pour des performances optimales, limitez chaque fichier à 500 objets maximum.
Noms de fichiers à l'échelle du type
Plusieurs types d'objet étendent leurs fichiers par le type d'objet auquel ils appartiennent. L’importation lit tous les fichiers du dossier, quel que soit le qualificatif, mais les exportations réelles utilisent toujours ces noms:
| Type d'objet | Modèle de nom de fichier |
|---|---|
| ÉtiquetteObjets (ObjectLabels) | objectlabels-testcase-{n}.json, objectlabels-testset-{n}.json, objectlabels-requirement-{n}.json,... |
| ValeursChampPersonnalisé (CustomFieldValues) | customfieldvalues-testcase-{n}.json, customfieldvalues-requirement-{n}.json |
| Pièces jointes (Attachments) | attachments-testexecution-{n}.json, attachments-requirement-{n}.json,… |
| Exécutions de test | testexecutions-Manual-Finished-{n}.json, testexecutions-Automated-Finished-{n}.json,… |
| Filtres d’objets | objectfilters-testset-{n}.json |
| Planifications de l'ensemble de tests | testsetschedules-testset-{n}.json |
Paramètres du projet — aucun suffixe numérique
projectsettings/projectsettings.json
projectsettings/projectsettings.json
Ce fichier est toujours unique (aucun numéro de segment).
Exigences d’encodage
Tous les fichiers JSON doivent être encodés en UTF-8 sans BOM.
Le Set-Content -Encoding utf8 de PowerShell 5.1 écrit un BOM UTF-8 (EF BB BF). Cela amène JSON.parse dans le navigateur à lancer SyntaxError: Unexpected token à la position 0. Utilisez toujours [System.IO.File]::WriteAllText($path, $content, (New-Object System.Text.UTF8Encoding($false))) lors de la création de fichiers .tmh à partir de PowerShell.
Contrôle de version du schéma
Le manifest.json comporte un champ schemaVersion (par exemple, "1.0.16"). L'importation utilise cette version avec les attributs [IntroducedIn] sur chaque propriété DTO pour déterminer les champs à lire. Les champs introduits dans une version plus récente que la version du schéma du package sont ignorés lors de la désérialisation.
Dernière version actuelle: 1.0.16
Résumé de l’historique des versions:
| Version | Ajouts notables |
|---|---|
1.0.0 | Initial: exigences, cas de test, étapes de test, ensembles de test, affectations, libellés, pièces jointes, défauts, valeurs de champ personnalisés |
1.0.1 | preCondition sur les cas de test |
1.0.2 | Exécutions de test, remplacements des résultats du journal de cas de test, assertions |
1.0.4 | Exportation du sous-ensemble (isSubsetExport, exportSubsetDetails) |
1.0.5 | Libellés de champ personnalisé |
1.0.7 | Invites définies par l’utilisateur |
1.0.9 | postCondition sur les cas de test |
1.0.10 | Paramètres |
1.0.11 | Packages d’ensembles de tests, folderKey/folderName sur les ensembles de tests, packageEntryPointUniqueId , etc. sur les cas de test |
1.0.13 | id champ sur les pièces jointes |
1.0.14 | studioWebFileId/studioWebProjectId sur les cas de test; id sur les affectations d’ensembles de tests/de cas de test |
1.0.15 | assigneeEmail sur les affectations d’ensembles de tests/de cas de test |
1.0.16 | Configuration du projet (paramètres, gouvernance, signataires), définitions de champs personnalisés, autorisations de projet |
manifeste.json
Situé à la racine de l'archive (pas à l'intérieur de objects/).
{
"objectCountDetails": {
"testCases": 5,
"testSets": 2,
"requirements": 3,
"objectLabels": 0,
"attachments": 0,
"testExecutions": 0,
"testCaseLogs": 0,
"testCaseResultOverrides": 0,
"testSteps": 12,
"testStepLogs": 0,
"testSetTestCaseAssignments": 6,
"requirementTestCaseAssignments": 4,
"defects": 0,
"customFieldValues": 0,
"customFieldLabels": 0,
"assertions": 0,
"assertionScreenshots": 0,
"testSetLabelFilters": 0,
"userDefinedPrompts": 0,
"parameters": 0,
"testSetPackages": 0,
"testSetTestCaseParameters": 0,
"customFieldDefinitions": 0,
"projectAuthorizations": 0
},
"project": {
"name": "My Project",
"description": "Project description",
"projectPrefix": "MP"
},
"tmPackageId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"schemaVersion": "1.0.16"
}
{
"objectCountDetails": {
"testCases": 5,
"testSets": 2,
"requirements": 3,
"objectLabels": 0,
"attachments": 0,
"testExecutions": 0,
"testCaseLogs": 0,
"testCaseResultOverrides": 0,
"testSteps": 12,
"testStepLogs": 0,
"testSetTestCaseAssignments": 6,
"requirementTestCaseAssignments": 4,
"defects": 0,
"customFieldValues": 0,
"customFieldLabels": 0,
"assertions": 0,
"assertionScreenshots": 0,
"testSetLabelFilters": 0,
"userDefinedPrompts": 0,
"parameters": 0,
"testSetPackages": 0,
"testSetTestCaseParameters": 0,
"customFieldDefinitions": 0,
"projectAuthorizations": 0
},
"project": {
"name": "My Project",
"description": "Project description",
"projectPrefix": "MP"
},
"tmPackageId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"schemaVersion": "1.0.16"
}
Les exportations réelles incluent également un champ packageName (le nom de fichier de téléchargement suggéré). L'importation l'ignore - omettez-la dans les fichiers créés à la main.
objets/ — Schémas de fichiers JSON
Chaque fichier d'objet utilise un objet wrapper dont la propriété unique est un tableau JSON. Le tableau contient les enregistrements d'objets individuels.
exigences/{n} fichier(s).json
{
"requirements": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "User can log in",
"description": "The login form must accept valid credentials.",
"foreignRef": "",
"connectorRequirementId": "00000000-0000-0000-0000-000000000000"
}
]
}
{
"requirements": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "User can log in",
"description": "The login form must accept valid credentials.",
"foreignRef": "",
"connectorRequirementId": "00000000-0000-0000-0000-000000000000"
}
]
}
| Champ | Saisie de texte | Remarques |
|---|---|---|
id | Chaîne GUID | Identifiant unique par exigence |
name | string | Requis; 255 caractères maximum |
description | string | Peut être une chaîne de caractères vide |
foreignRef | string | Référence système externe; peut être vide |
connectorRequirementId | Chaîne GUID | Utilisez "00000000-0000-0000-0000-000000000000" lorsqu'il n'est pas lié à un connecteur |
cas de test/{n} fichier JSON
{
"testCases": [
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"version": null,
"name": "Verify login with valid credentials",
"inputParams": null,
"description": "",
"automationId": null,
"automationTestCaseName": null,
"automationProjectName": null,
"foreignRef": "",
"connectorTestCaseId": null,
"preCondition": null,
"postCondition": null,
"packageEntryPointUniqueId": null,
"packageIdentifier": null,
"packageEntryPointName": null,
"feedId": null,
"packageSourceName": null,
"studioWebFileId": null,
"studioWebProjectId": null
}
]
}
{
"testCases": [
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"version": null,
"name": "Verify login with valid credentials",
"inputParams": null,
"description": "",
"automationId": null,
"automationTestCaseName": null,
"automationProjectName": null,
"foreignRef": "",
"connectorTestCaseId": null,
"preCondition": null,
"postCondition": null,
"packageEntryPointUniqueId": null,
"packageIdentifier": null,
"packageEntryPointName": null,
"feedId": null,
"packageSourceName": null,
"studioWebFileId": null,
"studioWebProjectId": null
}
]
}
| Champ | Saisie de texte | Remarques |
|---|---|---|
id | Chaîne GUID | Unique par cas de test |
version | chaîne | Null | null pour les cas de test manuels; "1.0.0" pour les cas de test automatisés liés à une version de package; "" pour les cas de test automatisés sans version fixe |
name | string | Requis; 255 caractères maximum |
inputParams | chaîne | Null | Paramètres d'entrée encodés en JSON; null pour le manuel |
description | string | Description en texte enrichi; "" en cas d'absence |
automationId | chaîne | Null | Identifiant d'automatisation UiPath; null pour le manuel |
automationTestCaseName | chaîne | Null | Nom complet de l’automatisation; null pour le manuel |
automationProjectName | chaîne | Null | Projet d'automatisation; null pour le manuel |
foreignRef | string | Référence système externe; "" en cas d'absence |
connectorTestCaseId | chaîne | Null | ID système du connecteur; null en cas d'absence |
preCondition | chaîne | nul (v1.0.1+) | Texte de précondition; null si absent; 8 000 caractères maximum |
postCondition | chaîne | nul (v1.0.9+) | Texte post-condition; null si absent; 8 000 caractères maximum |
packageEntryPointUniqueId | chaîne | nul (v1.0.11+) | GUID du point d'entrée du package; null pour le manuel |
packageIdentifier | chaîne | nul (v1.0.11+) | ID de package; null pour le manuel |
packageEntryPointName | chaîne | nul (v1.0.11+) | Nom du point d'entrée; null pour le manuel |
feedId | chaîne | nul (v1.0.11+) | ID de flux de package; null pour le manuel |
packageSourceName | chaîne | nul (v1.0.11+) | Nom de la source du package; null pour le manuel |
studioWebFileId | chaîne | nul (v1.0.14+) | ID de fichier Studio Web; null pour le manuel |
studioWebProjectId | chaîne | nul (v1.0.14+) | ID de projet Studio Web; null pour le manuel |
teststeps/{n} fichier(s).json
{
"testSteps": [
{
"id": "550e8400-e29b-41d4-a716-446655440010",
"testCaseId": "550e8400-e29b-41d4-a716-446655440001",
"orderNo": 0,
"actionType": null,
"description": "Navigate to the login page",
"expectedResult": "Login page is displayed",
"clipboardData": ""
}
]
}
{
"testSteps": [
{
"id": "550e8400-e29b-41d4-a716-446655440010",
"testCaseId": "550e8400-e29b-41d4-a716-446655440001",
"orderNo": 0,
"actionType": null,
"description": "Navigate to the login page",
"expectedResult": "Login page is displayed",
"clipboardData": ""
}
]
}
| Champ | Saisie de texte | Remarques |
|---|---|---|
id | Chaîne GUID | Unique par étape |
testCaseId | Chaîne GUID | Doit référencer un cas de test existant id |
orderNo | Integer | Ordre d'affichage basé sur 0 (première étape = 0) |
actionType | chaîne | Null | null pour les étapes manuelles |
description | string | Texte d'action de l'étape |
expectedResult | string | Résultat attendu; "" en cas d'absence |
clipboardData | string | Données du presse-papiers/capture d’écran; 8 000 caractères maximum; Généralement "" |
ensembles de tests/{n} fichier(s).json
{
"testSets": [
{
"id": "550e8400-e29b-41d4-a716-446655440020",
"version": null,
"name": "Regression Suite",
"description": "",
"source": "TestManager",
"externalTestSetId": null,
"sourceDetails": null,
"folderKey": null,
"folderName": ""
}
]
}
{
"testSets": [
{
"id": "550e8400-e29b-41d4-a716-446655440020",
"version": null,
"name": "Regression Suite",
"description": "",
"source": "TestManager",
"externalTestSetId": null,
"sourceDetails": null,
"folderKey": null,
"folderName": ""
}
]
}
| Champ | Saisie de texte | Remarques |
|---|---|---|
id | Chaîne GUID | Unique par ensemble de tests |
version | chaîne | Null | null pour les ensembles de tests gérés par Test Manager |
name | string | Requis; 255 caractères maximum |
description | string | "" en cas d'absence |
source | string | "TestManager" (par défaut) ou "Orchestrator" — il s'agit d'une chaîne, pas un entier |
externalTestSetId | chaîne | Null | ID externe lorsque source est "Orchestrator"; null sinon |
sourceDetails | chaîne | Null | Métadonnées source supplémentaires; null en cas d'absence |
folderKey | chaîne | nul (v1.0.11+) | Clé de dossier UiPath Orchestrator; null si non lié |
folderName | chaîne (v1.0.11+) | Nom complet du dossier; "" si non lié; non stocké dans la base de données, à titre informatif uniquement |
affectations de cas de test.json
{
"testSetTestCaseAssignments": [
{
"id": "550e8400-e29b-41d4-a716-446655440030",
"testSetId": "550e8400-e29b-41d4-a716-446655440020",
"testCaseId": "550e8400-e29b-41d4-a716-446655440001",
"assigneeEmail": null
}
]
}
{
"testSetTestCaseAssignments": [
{
"id": "550e8400-e29b-41d4-a716-446655440030",
"testSetId": "550e8400-e29b-41d4-a716-446655440020",
"testCaseId": "550e8400-e29b-41d4-a716-446655440001",
"assigneeEmail": null
}
]
}
| Champ | Saisie de texte | Remarques |
|---|---|---|
id | Chaîne GUID (v1.0.14+) | Identifiant de l'affectation |
testSetId | Chaîne GUID | Fait référence à un ensemble de tests id |
testCaseId | Chaîne GUID | Fait référence à un cas de test id |
assigneeEmail | chaîne | nul (v1.0.15+) | Adresse e-mail du bénéficiaire; null si désaffecté |
affectations de cas de test/{n}.json
{
"requirementTestCaseAssignments": [
{
"requirementId": "550e8400-e29b-41d4-a716-446655440000",
"testCaseId": "550e8400-e29b-41d4-a716-446655440001"
}
]
}
{
"requirementTestCaseAssignments": [
{
"requirementId": "550e8400-e29b-41d4-a716-446655440000",
"testCaseId": "550e8400-e29b-41d4-a716-446655440001"
}
]
}
Aucun champ id . Contrairement à la plupart des autres types d’objet, les affectations de cas de test d’exigence n’ont que requirementId et testCaseId.
objectLabels/ObjectLabels-{objecttype}-{n}.json
Nom du fichier: les exportations réelles utilisent un nom qualifié pour le type tel que objectlabels-testcase-1.json, objectlabels-testset-1.json, objectlabels-requirement-1.json, etc. L'importation lit tous les fichiers dans le dossier objectlabels/ , de sorte que le qualificatif n'est pas strictement requis lors de la création personnalisée de fichiers, mais il est recommandé de suivre la convention.
{
"objectLabels": [
{
"objectId": "550e8400-e29b-41d4-a716-446655440001",
"name": "regression",
"description": "",
"labelType": 0,
"objectType": "TestCase"
}
]
}
{
"objectLabels": [
{
"objectId": "550e8400-e29b-41d4-a716-446655440001",
"name": "regression",
"description": "",
"labelType": 0,
"objectType": "TestCase"
}
]
}
| Champ | Saisie de texte | Remarques |
|---|---|---|
objectId | Chaîne GUID | ID de l’objet labellisé |
name | string | Texte du libellé |
description | string | Description du libellé; "" en cas d'absence |
labelType | Integer | 1 = libellé système (par ex. "manual", "automated"); 0 = libellé défini par l'utilisateur |
objectType | string | "TestCase", "TestSet", "Requirement", "TestExecution", "TestCaseLog" |
valeurs de champ personnalisé/{n} fichier.json
{
"customFieldValues": [
{
"objectId": "550e8400-e29b-41d4-a716-446655440001",
"objectType": "TestCase",
"fieldName": "Priority",
"fieldValue": "High"
}
]
}
{
"customFieldValues": [
{
"objectId": "550e8400-e29b-41d4-a716-446655440001",
"objectType": "TestCase",
"fieldName": "Priority",
"fieldValue": "High"
}
]
}
Paramètres du projet/paramètres du projet JSON
Introduit dans la version de schéma 1.0.16. Présent uniquement lorsque l’option « Exporter la configuration du projet » est activée.
{
"projectTimeZone": "Europe/Vienna",
"folderKey": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"governanceEnabled": true,
"governedByDefault": false,
"signatories": [
{
"signatoryId": "550e8400-e29b-41d4-a716-446655440099",
"signatoryType": 0,
"signatoryLastKnownDetails": "john.doe@company.com"
}
]
}
{
"projectTimeZone": "Europe/Vienna",
"folderKey": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"governanceEnabled": true,
"governedByDefault": false,
"signatories": [
{
"signatoryId": "550e8400-e29b-41d4-a716-446655440099",
"signatoryType": 0,
"signatoryLastKnownDetails": "john.doe@company.com"
}
]
}
Contrairement à tous les autres fichiers d'objet, projectsettings.json est un objet direct (et non un tableau de wrapper). Le fichier contient un objet JSON plate unique.
| Champ | Saisie de texte | Remarques |
|---|---|---|
projectTimeZone | chaîne | Null | Chaîne de fuseau horaire IANA (par exemple, "Europe/Vienna") |
folderKey | GUID | Null | Dossier Orchestrator lié |
governanceEnabled | booléen | Null | Indique si la gouvernance est activée pour le projet |
governedByDefault | booléen | Null | Indique si les nouveaux cas de test sont régis par défaut |
signatories | tableau | Null | Liste des approbateurs/signataires |
signatories[].signatoryId | GUID | ID d’utilisateur ou de groupe |
signatories[].signatoryType | Integer | 0 = Utilisateur, 1 = GroupeUtilisateurs |
signatories[].signatoryLastKnownDetails | string | Nom ou e-mail affiché au moment de l’exportation |
lastDisabledAt (l'horodatage de désactivation de la gouvernance) est intentionnellement exclu de l'exportation — il s'agit d'un horodatage interne qui n'est pas significatif pour un projet réimporté.
Règles et contraintes
-
Tous les ID doivent être des GUID uniques et valides. Ne réutilisez pas les ID entre des objets de type même ou différent.
-
Les références croisées doivent se résoudre. Un
testCaseIddans une étape ou une affectation de test doit faire référence à un cas de testidprésent dans le même package. -
Les objets wrapper sont requis. Même lorsque la collection contient un élément, elle doit toujours être encapsulée:
{ "testCases": [ {...} ] }et jamais un tableau ou un objet à barres. -
Conventions
nullvs"": utiliseznullpour les champs facultatifs qui sont réellement absents (par ex.automationId,inputParams,preCondition,connectorTestCaseId, tous lespackage*champs des cas de test manuels). Utilisez""uniquement pour les champs qui sont toujours présents sous forme de chaînes mais qui sont vides (par ex.foreignRef,description,clipboardData). Leur combinaison, en particulier l'utilisation""oùnullest attendu, peut entraîner des échecs d'importation silencieux. -
objectCountDetailsdans le manifeste doit correspondre au nombre réel d'objets présents, mais l'importation ne valide pas strictement les comptes - les incompatibilités n'affectent que l'affichage du résumé avant l'importation. -
Le format UTF-8 sans BOM est obligatoire pour tous les fichiers.
Fichier TMH valide minimum (créé à la main)
Le plus petit fichier .tmh valide que Test Manager acceptera contient simplement un manifest.json:
{
"objectCountDetails": { ... },
"project": { "name": "Test Project", "description": "", "projectPrefix": "TP" },
"tmPackageId": "<new-guid>",
"schemaVersion": "1.0.16"
}
{
"objectCountDetails": { ... },
"project": { "name": "Test Project", "description": "", "projectPrefix": "TP" },
"tmPackageId": "<new-guid>",
"schemaVersion": "1.0.16"
}
Tous les sous-répertoires objects/ sont facultatifs. L'importation ignore silencieusement tout type d'objet absent de l'archive.
- Archiver la structure
- Conventions d'affectation de noms de fichiers
- La plupart des types d’objets — blocs numérotés
- Noms de fichiers à l'échelle du type
- Paramètres du projet — aucun suffixe numérique
- Exigences d’encodage
- Contrôle de version du schéma
- manifeste.json
- objets/ — Schémas de fichiers JSON
- exigences/{n} fichier(s).json
- cas de test/{n} fichier JSON
- teststeps/{n} fichier(s).json
- ensembles de tests/{n} fichier(s).json
- affectations de cas de test.json
- affectations de cas de test/{n}.json
- objectLabels/ObjectLabels-{objecttype}-{n}.json
- valeurs de champ personnalisé/{n} fichier.json
- Paramètres du projet/paramètres du projet JSON
- Règles et contraintes
- Fichier TMH valide minimum (créé à la main)