- Erste Schritte
- Projektmanagement
- Arbeiten mit der Analyse der Änderungsauswirkungen
- Erstellen von Testfällen
- Zuweisen von Testfällen zu Anforderungen
- Klonen von Testfällen
- Exportieren von Testfällen
- Verknüpfen von Testfällen in Studio mit dem Test Manager
- Delete test cases
- Aktivieren der Governance auf Projektebene
- Deaktivieren der Governance auf Projektebene
- Aktivieren der Governance auf Testfallebene
- Deaktivieren der Governance auf Testfallebene
- Aktivieren oder Deaktivieren von Governance in einem Massenauftrag für Testfälle
- Durchsetzung der Signaturreihenfolge für gesteuerte Testfälle
- Verwalten von Genehmigern für strukturierte Testfälle
- Verwalten von gesteuerten Testfällen im Status In Arbeit
- Verwalten von gesteuerten Testfällen im Status „Wird überprüft“.
- Verwalten von gesteuerten Objekten im Status „Signiert“.
- Verwalten von Kommentaren für gesteuerte Testfälle
- Anzeigen von Governance-Informationen für Testfallprotokolle
- Verwalten von Genehmigern für gesteuerte Testfallprotokolle
- Verwalten von gesteuerten Testfallprotokollen im Status In Work
- Verwalten von gesteuerten Testfallprotokollen im Status „Wird überprüft“.
- Verwalten von gesteuerten Testfallprotokollen im Signiert
- Verwalten von Kommentaren für gesteuerte Testfallprotokolle
- Aktivieren der Governance auf Testfallprotokollebene
- Deaktivieren der Governance auf Testfallprotokollebene
- Anzeigen und Suchen von Testfällen
- Ausführen von Testfällen ohne Testsatz
- Ausführen gemischter Tests
- Erstellen von ausstehenden Ausführungen
- Erneutes Ausführen von Testausführungen
- Fehlerbehebung bei automatisierten Ausführungen
- FAQ – Funktion – Test Manager vs Orchestrator
- Testergebnisse analysieren
- Statuswerte von Playwright-Testergebnissen
- Löschen von Testfallergebnissen
- Synchronisierung von Defekten
- Fehler aus Testergebnissen erstellen
- Ergebnisse von automatisierten Tests
- Überschreiben von Testergebnissen
- Navigieren und Suchen von Testergebnissen
- Untersuchung der Ergebnisse von Testfällen
- Aktivitätsabdeckung anzeigen
- Projektvorgänge und Dienstprogramme
- Projekt importieren
- Spezifikation des TMH-Dateiformats
- Migrieren von Test Manager-Artefakten zu anderen Bereitstellungsoptionen
- Testen der Datenaufbewahrungsrichtlinie
- Test Manager-Einstellungen
- Einstellungen auf Mandantenebene
- Allgemeine Projekteinstellungen
- Events
- Abonnieren von Ereignissen
- Abonnieren aller Ereignisse:
- Abbestellen von Ereignissen
- Abbestellen aller Ereignisse
- Abbestellen der Seite mit den Benachrichtigungseinstellungen
- Anzeigen von Benachrichtigungen
- Filtern von Benachrichtigungen
- Anzeigen von E-Mail-Benachrichtigungen
- Aktivieren von E-Mail-Benachrichtigungen für SMTP-Server
- Anzeigen von nur ungelesenen Benachrichtigungen
- Alle Benachrichtigungen als gelesen markieren
- Alle Benachrichtigungen löschen
- Löschen von Benachrichtigungen
- Verschlüsselung der kundenseitig verwalteten Schlüssel
- Protokolle
- ALM Tool-Integration
- ALM Tool-Integration
- Test Manager verbinden
- Test Manager – Integration Service-Connector
- Ausgehende IP-Bereiche für Connectors
- Arbeiten mit SAP Cloud ALM und Test Manager
- Schritt 1: Integrieren von SAP Cloud ALM mit dem Test Manager
- Schritt 2: Erstellen automatisierter Testfälle im SAP Cloud ALM
- Schritt 3: Erstellen automatisierter Testfälle im Test Manager
- Schritt 4: Synchronisieren von Testfällen vom Test Manager zu SAP Cloud ALM
- Schritt 5: Zuweisen von Testautomatisierungen zu Testfällen
- Schritt 6: Ausführen von Testfällen
- Best Practices für die SAP-Testautomatisierung
- Fehlerbehebung bei der Jira-Integration
- API-Integration
- Codierungs-Agenten für das Testen
- Fehlersuche und ‑behebung
Spezifikation des TMH-Dateiformats
TMH-Dateiformatspezifikation für die Sicherung und Migration von Test Manager-Projekten einschließlich Manifeststruktur, Object-Typen und Codierungsanforderungen.
Eine .tmh -Datei ist das von UiPath Test Manager verwendete Projektsicherungs-/Migrationsformat. In diesem Dokument werden die Struktur, der Inhalt und die Codierungsanforderungen im Detail beschrieben.
Archivstruktur
<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
Nur Objekttypen, die tatsächlich exportiert wurden, sind vorhanden. Fehlende Ordner/Dateien werden während des Imports im Hintergrund übersprungen.
Dateibenennungskonventionen
Die meisten Objekttypen – nummerierte Teile
Dateien haben den Namen <type>-{n}.json wobei {n} für echte Exporte, die vom System erstellt wurden, mit 0 beginnen. Zum Beispiel:
requirementtestcaseassignments-0.json
testcases-0.json
teststeps-0.json
requirementtestcaseassignments-0.json
testcases-0.json
teststeps-0.json
Der Importer scannt alle Dateien in jedem Ordner, sodass sowohl 0-basierte als auch 1-basierte Nummerierung beim manuellen Erstellen von Dateien funktioniert.
Große Exporte können auf mehrere Dateien aufgeteilt werden (testcases-0.json, testcases-1.json usw.) – der Importer liest alle Dateien im Ordner.
Für eine optimale Leistung begrenzen Sie jede Datei auf maximal 500 Objekte.
Dateinamen mit Typ-Scope
Mehrere Objekttypen schränken ihre Dateien auf den Objekttyp ein, zu dem sie gehören. Der Importer liest alle Dateien im Ordner unabhängig vom Kennzeichner, aber echte Exporte verwenden immer diese Namen:
| Objekttyp | Muster des Dateinamens |
|---|---|
| ObjectLabels | objectlabels-testcase-{n}.json, objectlabels-testset-{n}.json, objectlabels-requirement-{n}.json, … |
| CustomFieldValues | customfieldvalues-testcase-{n}.json, customfieldvalues-requirement-{n}.json |
| Anhänge (Attachments) | attachments-testexecution-{n}.json, attachments-requirement-{n}.json, … |
| Testausführungen | testexecutions-Manual-Finished-{n}.json, testexecutions-Automated-Finished-{n}.json, … |
| Objektfilter | objectfilters-testset-{n}.json |
| Zeitpläne der Testsätze | testsetschedules-testset-{n}.json |
Projekteinstellungen – kein Zahlensuffix
projectsettings/projectsettings.json
projectsettings/projectsettings.json
Diese Datei ist immer einzeln (keine Blocknummer).
Codierungsanforderungen
Alle JSON-Dateien müssen als UTF-8 ohne BOM codiert sein.
Das Set-Content -Encoding utf8 von PowerShell 5.1 schreibt ein UTF-8-BOM (EF BB BF). Dies bewirkt, dass JSON.parse im Browser SyntaxError: Unexpected token an Position 0 auslöst. Verwenden Sie immer [System.IO.File]::WriteAllText($path, $content, (New-Object System.Text.UTF8Encoding($false))) beim Erstellen von .tmh -Dateien aus PowerShell.
Schemaversionierung
manifest.json hat ein schemaVersion -Feld (z. B. "1.0.16"). Der Importer verwendet diese Version zusammen mit [IntroducedIn] -Attributen für jede DTO-Eigenschaft, um zu bestimmen, welche Felder gelesen werden sollen. Felder, die in einer neueren Version als der Schemaversion des Pakets eingeführt wurden, werden während der Deserialisierung ignoriert.
Aktuelle Version: 1.0.16
Zusammenfassung des Versionsverlaufs:
| Version | Bemerkenswerte Ergänzungen |
|---|---|
1.0.0 | Anfang: Anforderungen, Testfälle, Testschritte, Testsätze, Zuweisungen, Beschriftungen, Anhänge, Fehler, benutzerdefinierte Feldwerte |
1.0.1 | preCondition für Testfälle |
1.0.2 | Testausführungen, Überschreibungen von Testfallprotokollergebnissen, Assertionen |
1.0.4 | Teilmengenexport (isSubsetExport, exportSubsetDetails) |
1.0.5 | Benutzerdefinierte Feldbeschriftungen |
1.0.7 | Benutzerdefinierte Prompts |
1.0.9 | postCondition für Testfälle |
1.0.10 | Parameter |
1.0.11 | Testsatzpakete, folderKey/folderName für Testsätze, packageEntryPointUniqueId usw. für Testfälle |
1.0.13 | id an Anhängen |
1.0.14 | studioWebFileId/studioWebProjectId für Testfälle; id für Testsatz-/Testfallzuweisungen |
1.0.15 | assigneeEmail bei Testsatz-/Testfallzuweisungen |
1.0.16 | Projektkonfiguration (Einstellungen, Governance, Unterzeichner), benutzerdefinierte Felddefinitionen, Projektautorisierungen |
Manifest.json
Befindet sich am Stammverzeichnis des Archivs (nicht in 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"
}
Echte Exporte enthalten auch ein packageName -Feld (den vorgeschlagenen Download-Dateinamen). Der Importer ignoriert es – lassen Sie es in manuell erstellten Dateien weg.
objects/ – JSON-Dateischemas
Jede Objektdatei verwendet ein Wrapper-Objekt , dessen einzige Eigenschaft ein JSON-Array ist. Das Array enthält die einzelnen Objektdatensätze.
requirements/{n}.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"
}
]
}
| Feld | Typ | Hinweise |
|---|---|---|
id | GUID-Zeichenfolge | Eindeutiger Bezeichner pro Anforderung |
name | string | Erforderlich; Max. 255 Zeichen |
description | string | Kann eine leere Zeichenfolge sein |
foreignRef | string | Externes System-Referenz; kann leer sein |
connectorRequirementId | GUID-Zeichenfolge | Verwenden Sie "00000000-0000-0000-0000-000000000000" wenn keine Verknüpfung mit einem Connector besteht |
testcases/{n}.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
}
]
}
| Feld | Typ | Hinweise |
|---|---|---|
id | GUID-Zeichenfolge | Eindeutig pro Testfall |
version | Zeichenfolge | null | null Für manuelle Testfälle; "1.0.0" für automatisierte Testfälle, die mit einer Paketversion verknüpft sind; "" für automatisierte Testfälle ohne feste Version |
name | string | Erforderlich; Max. 255 Zeichen |
inputParams | Zeichenfolge | null | JSON-codierte Eingabeparameter; null für manuell |
description | string | Rich-Text-Beschreibung; "" wenn fehlt |
automationId | Zeichenfolge | null | UiPath-Automatisierungsbezeichner; null für manuell |
automationTestCaseName | Zeichenfolge | null | Anzeigename der Automatisierung; null für manuell |
automationProjectName | Zeichenfolge | null | Automatisierungsprojekt; null für manuell |
foreignRef | string | Externes System-Referenz; "" wenn fehlt |
connectorTestCaseId | Zeichenfolge | null | Connector-System-ID; null wenn fehlt |
preCondition | Zeichenfolge | null (v1.0.1+) | Vorbedingungstext; null wenn fehlend; Max. 8.000 Zeichen |
postCondition | Zeichenfolge | null (v1.0.9+) | Text nach Bedingung; null wenn fehlend; Max. 8.000 Zeichen |
packageEntryPointUniqueId | Zeichenfolge | null (v1.0.11+) | GUID des Paketeinstiegspunkts; null für manuell |
packageIdentifier | Zeichenfolge | null (v1.0.11+) | Paket-ID; null für manuell |
packageEntryPointName | Zeichenfolge | null (v1.0.11+) | Name des Einstiegspunkts; null für manuell |
feedId | Zeichenfolge | null (v1.0.11+) | Paketfeed-ID; null für manuell |
packageSourceName | Zeichenfolge | null (v1.0.11+) | Name der Paketquelle; null für manuell |
studioWebFileId | Zeichenfolge | null (v1.0.14+) | Studio Web-Datei-ID; null für manuell |
studioWebProjectId | Zeichenfolge | null (v1.0.14+) | Studio Web-Projekt-ID; null für manuell |
teststeps/{n}.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": ""
}
]
}
| Feld | Typ | Hinweise |
|---|---|---|
id | GUID-Zeichenfolge | Eindeutig pro Schritt |
testCaseId | GUID-Zeichenfolge | Muss auf einen vorhandenen Testfall verweisen id |
orderNo | Integer | 0-basierte Anzeigereihenfolge (erster Schritt = 0) |
actionType | Zeichenfolge | null | null für manuelle Schritte |
description | string | Schritt-Aktionstext |
expectedResult | string | Erwartetes Ergebnis; "" wenn fehlt |
clipboardData | string | Zwischenablage-/Screenshotdaten; max. 8.000 Zeichen; in der Regel "" |
testsets/{n}.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": ""
}
]
}
| Feld | Typ | Hinweise |
|---|---|---|
id | GUID-Zeichenfolge | Eindeutig pro Testsatz |
version | Zeichenfolge | null | null für vom Test Manager verwaltete Testsätze |
name | string | Erforderlich; Max. 255 Zeichen |
description | string | "" wenn sie fehlt |
source | string | "TestManager" (Standard) oder "Orchestrator" – das ist ein String, kein Integer |
externalTestSetId | Zeichenfolge | null | Externe ID, wenn source "Orchestrator" ist; null andernfalls |
sourceDetails | Zeichenfolge | null | Zusätzliche Quellmetadaten; null wenn fehlt |
folderKey | Zeichenfolge | null (v1.0.11+) | UiPath Orchestrator-Ordnerschlüssel; null wenn nicht verknüpft |
folderName | string (v1.0.11+) | Anzeigename des Ordners; "" wenn nicht verknüpft; nicht in DB gespeichert, nur informativ |
testsetcaseassignments/{n}.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
}
]
}
| Feld | Typ | Hinweise |
|---|---|---|
id | GUID-Zeichenfolge (v1.0.14+) | Zuweisungsbezeichner |
testSetId | GUID-Zeichenfolge | Verweist auf einen Testsatz id |
testCaseId | GUID-Zeichenfolge | Verweist auf einen Testfall id |
assigneeEmail | Zeichenfolge | null (v1.0.15+) | E-Mail-Adresse des Beauftragten; null wenn nicht zugewiesen |
requirementstestcaseassignments/{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"
}
]
}
Kein id Feld. Im Gegensatz zu den meisten anderen Objekttypen haben Anforderungstestfallzuweisungen nur requirementId und testCaseId.
objectlabels/objectlabels-{objecttype}-{n}.json
Dateibenennung: Echte Exporte verwenden einen typqualifizierten Namen wie objectlabels-testcase-1.json, objectlabels-testset-1.json, objectlabels-requirement-1.json usw. Der Importer liest alle Dateien im Ordner objectlabels/ , sodass der Kennzeichner beim manuellen Erstellen von Dateien nicht unbedingt erforderlich ist, aber es wird empfohlen, die Konvention zu befolgen.
{
"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"
}
]
}
| Feld | Typ | Hinweise |
|---|---|---|
objectId | GUID-Zeichenfolge | ID des beschrifteten Objekts |
name | string | Beschriftungstext |
description | string | Beschriftungsbeschreibung; "" wenn fehlt |
labelType | Integer | 1 = Systembezeichnung (z. B "manual", "automated"); 0 = Benutzerdefinierte Beschriftung |
objectType | string | "TestCase", "TestSet", "Requirement", "TestExecution", "TestCaseLog" |
benutzerdefiniertefeldwerte/{n}.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"
}
]
}
projectsettings/projectsettings.json
Eingeführt in Schemaversion 1.0.16. Nur vorhanden, wenn „Projektkonfiguration exportieren“ aktiviert ist.
{
"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"
}
]
}
Im Gegensatz zu allen anderen Objektdateien ist projectsettings.json ein direktes Objekt (kein Wrapper-Array). Die Datei enthält ein einzelnes flaches JSON-Objekt.
| Feld | Typ | Hinweise |
|---|---|---|
projectTimeZone | Zeichenfolge | null | IANA-Zeitzonenzeichenfolge (z. B. "Europe/Vienna") |
folderKey | GUID | null | Verknüpfter Orchestrator-Ordner |
governanceEnabled | Boolescher Wert | null | Ob Governance für das Projekt aktiviert ist |
governedByDefault | Boolescher Wert | null | Ob neue Testfälle standardmäßig geregelt werden |
signatories | -Array | null | Liste der Genehmiger/Unterzeichner |
signatories[].signatoryId | GUID | Benutzer- oder Gruppen-ID |
signatories[].signatoryType | Integer | 0 = Benutzer, 1 = Benutzergruppe |
signatories[].signatoryLastKnownDetails | string | Anzeigename oder E-Mail-Adresse zum Zeitpunkt des Exports |
lastDisabledAt (der Zeitstempel für die Governance-Deaktivierung) wird absichtlich vom Export ausgeschlossen – es handelt sich um einen internen Zeitstempel, der für ein erneut importiertes Projekt nicht aussagekräftig ist.
Regeln und Beschränkungen
-
Alle IDs müssen eindeutige, gültige GUIDs sein. Verwenden Sie IDs nicht für Objekte desselben oder eines unterschiedlichen Typs wieder.
-
Querverweise müssen aufgelöst werden. Ein
testCaseIdin einem Testschritt oder einer Zuweisung muss auf einen Testfallidverweisen, der im selben Paket vorhanden ist. -
Wrapper-Objekte sind erforderlich. Auch wenn die Sammlung ein Element hat, muss es dennoch umbrochen werden:
{ "testCases": [ {...} ] }, niemals ein leeres Array oder Objekt. -
nullvs""Konventionen: Verwenden Sienullfür optionale Felder, die wirklich fehlen (z. BautomationId-,inputParams-,preCondition-,connectorTestCaseId, allepackage*-Felder in manuellen Testfällen). Verwenden Sie""nur für Felder, die immer als Zeichenfolgen vorhanden sind, aber zufällig leer sind (z. BforeignRef,description,clipboardData). Eine Verwechslung – insbesondere die Verwendung von"", wonullerwartet wird – kann zu Importfehlern im Hintergrund führen. -
objectCountDetailsim Manifest muss mit der tatsächlichen Anzahl der vorhandenen Objekte übereinstimmen , aber der Importer validiert die Anzahl nicht streng – Abweichungen wirken sich nur auf die Anzeige der Zusammenfassung vor dem Import aus. -
UTF-8 ohne BOM ist für alle Dateien obligatorisch.
Minimale gültige TMH-Datei (handschriftlich)
Die kleinste gültige .tmh -Datei, die der Test Manager akzeptiert, enthält nur 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"
}
Alle Unterverzeichnisse objects/ sind optional. Der Importer überspringt geräuschlos jeden Objekttyp, der nicht im Archiv vorhanden ist.
- Archivstruktur
- Dateibenennungskonventionen
- Die meisten Objekttypen – nummerierte Teile
- Dateinamen mit Typ-Scope
- Projekteinstellungen – kein Zahlensuffix
- Codierungsanforderungen
- Schemaversionierung
- Manifest.json
- objects/ – JSON-Dateischemas
- requirements/{n}.json
- testcases/{n}.json
- teststeps/{n}.json
- testsets/{n}.json
- testsetcaseassignments/{n}.json
- requirementstestcaseassignments/{n}.json
- objectlabels/objectlabels-{objecttype}-{n}.json
- benutzerdefiniertefeldwerte/{n}.json
- projectsettings/projectsettings.json
- Regeln und Beschränkungen
- Minimale gültige TMH-Datei (handschriftlich)