- Erste Schritte
- Projektmanagement
- Dokumente
- 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
- Manuelle Testfälle
- Importieren manueller Testfälle
- Dokumentieren von Testfällen mit Task Capture
- Parameter
- Aktivieren der Governance auf Projektebene
- Deaktivieren der Governance auf Projektebene
- Aktivieren der Governance auf Testfallebene
- Deaktivieren der Governance auf Testfallebene
- Verwalten von Genehmigern für strukturierte Testfälle
- Verwalten von gesteuerten Testfällen im Status In Arbeit
- Verwalten von geregelten Testfällen im Status „Wird überprüft“.
- Verwalten von gesteuerten Objekten im Status „Signiert“.
- Verwalten von Kommentaren für gesteuerte Testfälle
- Anwenden von Filtern und Ansichten
- Importieren von Orchestrator-Testsätzen
- Creating test sets
- Hinzufügen von Testfällen zu einem Testsatz
- Zuweisen von Standardbenutzern in der Testsatzausführung
- Aktivieren der Aktivitätsabdeckung
- Aktivieren von Healing Agent
- Konfigurieren von Testsätzen für bestimmte Ausführungsordner und Roboter
- Überschreiben von Parametern
- Klonen von Testsätzen
- Exportieren von Testsätzen
- Anwenden von Filtern und Ansichten
- FAQ – Funktion – Test Manager vs Orchestrator
- Ausführen von manuellen Tests
- Ausführen automatisierter Tests
- Ausführen von Testfällen ohne Testsatz
- Ausführen gemischter Tests
- Erstellen von ausstehenden Ausführungen
- Erzwingen einer Ausführungsreihenfolge
- Erneutes Ausführen von Testausführungen
- Planen von Ausführungen
- Fehlerbehebung bei automatisierten Ausführungen
- Zugänglichkeitstests für Test Cloud
- Suche mit Autopilot
- Projektvorgänge und Dienstprogramme
- Test Manager-Einstellungen
- ALM Tool-Integration
- API-Integration
- Fehlersuche und ‑behebung
Test Manager-Benutzerhandbuch
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 sollten Sie jede Datei auf maximal 500 Objekte beschränken.
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)