- 基本情報
- プロジェクト管理
- ドキュメント
- 変更影響分析を使用する
- Test Cloud のアクセシビリティ テスト
- Autopilot で検索する
- プロジェクトの運用とユーティリティ
- Test Manager の設定
- ALM ツールとの連携
- API 連携
- トラブルシューティング
Test Manager ガイド
.tmh ファイルは、UiPath Test Manager で使用されるプロジェクトのバックアップ/移行の形式です。このドキュメントでは、その構造、内容、およびエンコード要件について詳しく説明します。
アーカイブの構造
<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
実際にエクスポートされたオブジェクトの種類のみが存在します。見つからないフォルダー/ファイルは、インポート中に警告なしにスキップされます。
ファイル命名規則
ほとんどのオブジェクトタイプ — 番号付きチャンク
ファイルには <type>-{n}.json という名前が付けられ {n} システムによって生成される実際のエクスポートの場合は 0 から始まります。例えば:
requirementtestcaseassignments-0.json
testcases-0.json
teststeps-0.json
requirementtestcaseassignments-0.json
testcases-0.json
teststeps-0.json
インポーターは各フォルダー内のすべてのファイルをスキャンするため、ファイルを手作業で作成するときに 0ベースと 1ベースの番号付けの両方が機能します。
大きなエクスポートは複数のファイル(testcases-0.json、 testcases-1.jsonなど)に分割される場合があります—インポーターはフォルダー内のすべてのファイルを読み取ります。
最適なパフォーマンスを得るには、各ファイルのオブジェクトを最大 500 個に制限します。
型スコープのファイル名
いくつかのオブジェクトタイプは、属するオブジェクトタイプによってファイルのスコープを設定します。インポーターは修飾子に関係なくフォルダー 内のすべてのファイルを読み込み ますが、実際のエクスポートでは常に次の名前が使用されます。
| オブジェクトの種類 | ファイル名のパターン |
|---|---|
| ObjectLabels | objectlabels-testcase-{n}.json、 objectlabels-testset-{n}.json、 objectlabels-requirement-{n}.json、... |
| CustomFieldValues | customfieldvalues-testcase-{n}.json, customfieldvalues-requirement-{n}.json |
| 添付ファイル | attachments-testexecution-{n}.json、 attachments-requirement-{n}.json、... |
| テスト実行 | testexecutions-Manual-Finished-{n}.json、 testexecutions-Automated-Finished-{n}.json、... |
| オブジェクト フィルター | objectfilters-testset-{n}.json |
| テスト セットのスケジュール | testsetschedules-testset-{n}.json |
プロジェクト設定 — 番号サフィックスなし
projectsettings/projectsettings.json
projectsettings/projectsettings.json
このファイルは常に単数形です (チャンク番号なし)。
エンコードの要件
すべての JSON ファイルは、BOM なしの UTF-8 としてエンコードする必要があります。
PowerShell 5.1 の Set-Content -Encoding utf8 では、UTF-8 BOM (EF BB BF) が書き込まれます。これにより、ブラウザーのJSON.parse位置 0 にSyntaxError: Unexpected tokenスローされます。PowerShell から .tmh ファイルを作成するときは、常に [System.IO.File]::WriteAllText($path, $content, (New-Object System.Text.UTF8Encoding($false))) を使用してください。
スキーマのバージョン管理
manifest.jsonにはschemaVersionフィールド (例: "1.0.16") があります。インポーターは、このバージョンを各 DTO プロパティの [IntroducedIn] 属性と共に使用して、読み取るフィールドを決定します。パッケージのスキーマ バージョンよりも新しいバージョンで導入されたフィールドは、逆シリアル化時に無視されます。
現在の最新バージョン: 1.0.16
バージョン履歴の概要:
| バージョン | 注目すべき追加機能 |
|---|---|
1.0.0 | 初期状態: 要件、テスト ケース、テスト ステップ、テスト セット、割り当て、ラベル、添付ファイル、不具合、カスタム フィールドの値 |
1.0.1 | preCondition テスト ケース |
1.0.2 | テスト実行、テスト ケース ログの結果の上書き、アサーション |
1.0.4 | サブセットのエクスポート (isSubsetExport、 exportSubsetDetails) |
1.0.5 | カスタム フィールドのラベル |
1.0.7 | ユーザー定義のプロンプト |
1.0.9 | postCondition テスト ケース |
1.0.10 | パラメーター |
1.0.11 | テスト セット パッケージ、テスト セットの folderKey/folderName 、テスト ケースの packageEntryPointUniqueId など |
1.0.13 | id 添付ファイルのフィールド |
1.0.14 | studioWebFileId/studioWebProjectId - テスト ケーステスト セット/テスト ケースの割り当てに関するid |
1.0.15 | assigneeEmail テスト セット/テスト ケースの割り当て |
1.0.16 | プロジェクト構成 (設定、ガバナンス、署名者)、カスタム フィールドの定義、プロジェクトの承認 |
manifest.json
アーカイブの ルート ( 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"
}
実際のエクスポートには、 packageName フィールド(推奨されるダウンロードファイル名)も含まれます。インポーターはそれを無視し、手作りのファイルでは省略します。
objects/ — JSON ファイルスキーマ
すべてのオブジェクトファイルは、単一のプロパティがJSON配列である ラッパーオブジェクト を使用します。配列には、個々のオブジェクト レコードが含まれます。
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"
}
]
}
| フィールド | 入力 | 備考 |
|---|---|---|
id | GUID 文字列 | 要件ごとの一意の識別子 |
name | string | 必須;最大 255 文字 |
description | string | 空の文字列を指定できます |
foreignRef | string | 外部システム参照空でも構いません |
connectorRequirementId | GUID 文字列 | コネクタにリンクされていない場合は "00000000-0000-0000-0000-000000000000" を使用します。 |
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
}
]
}
| フィールド | 入力 | 備考 |
|---|---|---|
id | GUID 文字列 | テスト ケースごとに一意 |
version | 文字列 |Null | null 手動テスト用のテスト ケースの場合 "1.0.0" パッケージ バージョンにリンクされている自動化されたテスト ケースに使用します。 "" 固定バージョンのない自動化されたテスト ケースの場合に使用します。 |
name | string | 必須;最大 255 文字 |
inputParams | 文字列 |Null | JSON でエンコードされた入力パラメーター手動のnull |
description | string | リッチ テキストの説明不在時の"" |
automationId | 文字列 |Null | UiPath Automation の識別子手動のnull |
automationTestCaseName | 文字列 |Null | オートメーションの表示名手動のnull |
automationProjectName | 文字列 |Null | オートメーション プロジェクト手動のnull |
foreignRef | string | 外部システム参照不在時の"" |
connectorTestCaseId | 文字列 |Null | コネクタ システム ID不在時のnull |
preCondition | 文字列 |null (v1.0.1+) | 前提条件テキスト不在のときは null 。最大 8,000 文字 |
postCondition | 文字列 |null (v1.0.9+) | 事後条件テキスト不在のときは null 。最大 8,000 文字 |
packageEntryPointUniqueId | 文字列 |null (v1.0.11+) | パッケージ エントリ ポイント GUID。手動のnull |
packageIdentifier | 文字列 |null (v1.0.11+) | パッケージ ID手動のnull |
packageEntryPointName | 文字列 |null (v1.0.11+) | エントリ ポイント名手動のnull |
feedId | 文字列 |null (v1.0.11+) | パッケージ フィード ID手動のnull |
packageSourceName | 文字列 |null (v1.0.11+) | パッケージ ソース名手動のnull |
studioWebFileId | 文字列 |null (v1.0.14+) | Studio Web のファイル ID手動のnull |
studioWebProjectId | 文字列 |null (v1.0.14+) | Studio Web プロジェクト ID手動のnull |
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": ""
}
]
}
| フィールド | 入力 | 備考 |
|---|---|---|
id | GUID 文字列 | ステップごとに一意 |
testCaseId | GUID 文字列 | 既存のテスト ケースを参照する必要があります id |
orderNo | integer | 0 ベースの 表示順序 (最初の手順 = 0) |
actionType | 文字列 |Null | null 手動ステップの場合 |
description | string | ステップのアクション テキスト |
expectedResult | string | 期待される結果不在時の"" |
clipboardData | string | クリップボード/スクリーンショット データ最大 8,000 文字通常は "" |
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": ""
}
]
}
| フィールド | 入力 | 備考 |
|---|---|---|
id | GUID 文字列 | テスト セットごとに一意 |
version | 文字列 |Null | null Test Manager で管理されるテスト セットの場合 |
name | string | 必須;最大 255 文字 |
description | string | "" 不在の場合 |
source | string | "TestManager" (デフォルト) または "Orchestrator" — これは整数ではなく文字列です。 |
externalTestSetId | 文字列 |Null | source が"Orchestrator"場合の外部 ID。それ以外の場合null |
sourceDetails | 文字列 |Null | 追加のソース メタデータ不在時のnull |
folderKey | 文字列 |null (v1.0.11+) | UiPath Orchestrator のフォルダー キーリンクされていない場合はnull |
folderName | 文字列 (v1.0.11+) | フォルダーの表示名リンクされていない場合は "" 。DBには保存されず、情報のみ |
testsetTestCaseAssignments/{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
}
]
}
| フィールド | 入力 | 備考 |
|---|---|---|
id | GUID 文字列 (v1.0.14+) | 割り当て識別子 |
testSetId | GUID 文字列 | テスト セットを参照します id |
testCaseId | GUID 文字列 | テスト ケースを参照します id |
assigneeEmail | 文字列 |null (v1.0.15+) | 担当者のメール アドレス未割り当ての場合はnull |
requirementtestcaseassignments/{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"
}
]
}
idフィールドはありません。他のほとんどのオブジェクトの種類とは異なり、要件テスト ケースの割り当てには requirementId と testCaseIdのみがあります。
objectlabels/objectlabels-{objecttype}-{n}.json
ファイル名: 実際のエクスポートでは、 objectlabels-testcase-1.json、 objectlabels-testset-1.json、 、 objectlabels-requirement-1.jsonなどの型修飾名が使用されます。インポーターは objectlabels/ フォルダー内のすべてのファイルを読み込むため、ファイルを手動で作成する際に修飾子は厳密には必要ありませんが、規則に従うことをお勧めします。
{
"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"
}
]
}
| フィールド | 入力 | 備考 |
|---|---|---|
objectId | GUID 文字列 | ラベル付けされたオブジェクトの ID |
name | string | ラベル テキスト |
description | string | ラベルの説明不在時の"" |
labelType | integer | 1 = システム ラベル (例:"manual", "automated"); 0 = ユーザー定義のラベル |
objectType | string | "TestCase"、"TestSet"、"Requirement"、"TestExecution"、"TestCaseLog" |
CustomFieldValues/{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
スキーマ バージョン (1.0.16) で導入されました。[プロジェクト構成のエクスポート] が有効な場合にのみ表示されます。
{
"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"
}
]
}
他のすべてのオブジェクトファイルとは異なり、 projectsettings.json は 直接オブジェクト です (ラッパー配列ではありません)。このファイルには、1 つのフラットな JSON オブジェクトが含まれています。
| フィールド | 入力 | 備考 |
|---|---|---|
projectTimeZone | 文字列 |Null | IANA タイムゾーン文字列 (例: "Europe/Vienna") |
folderKey | GUID |Null | リンクされた Orchestrator フォルダー |
governanceEnabled | ブール値 |Null | プロジェクトに対してガバナンスが有効かどうか |
governedByDefault | ブール値 |Null | 新しいテスト ケースを既定で管理するかどうか |
signatories | 配列 |Null | 承認者/署名者のリスト |
signatories[].signatoryId | GUID | ユーザーまたはグループ ID |
signatories[].signatoryType | integer | 0 = ユーザー、 1 = ユーザー グループ |
signatories[].signatoryLastKnownDetails | string | エクスポート時の表示名またはメール アドレス |
lastDisabledAt (ガバナンスの無効化のタイムスタンプ) は、エクスポートから意図的に除外されています。これは、再インポートされたプロジェクトには意味のない内部タイムスタンプです。
ルールと制約
-
すべての ID は、一意で有効な GUID である必要があります。同じ型または異なる型のオブジェクト間で ID を再利用しないでください。
-
相互参照は解決する必要があります。テスト ステップまたは割り当て内の
testCaseIdは、同じパッケージに存在するテスト ケースidを参照する必要があります。 -
ラッパーオブジェクトが必要です。コレクションに1つのアイテムがある場合でも、
{ "testCases": [ {...} ] }、裸の配列やオブジェクトではなく、折り返す必要があります。 -
nullと""の規則:本当に存在しない任意のフィールドにはnullを使用します (例:automationId、inputParams、preCondition、connectorTestCaseId、手動テスト用のテスト ケースのすべてのpackage*フィールド)。""は常に文字列として存在するものの、たまたま空であるフィールド (例:foreignRef、description、clipboardData)。これらを混在させると、特にnullが予期される場所で""を使用すると、インポートがサイレントに失敗する可能性があります。 -
マニフェスト内の
objectCountDetailsは、存在するオブジェクトの実際の数と一致する必要がありますが、インポータはカウントを厳密に検証しません — 不一致はインポート前の概要表示にのみ影響します。 -
BOM なしの UTF-8 は、すべてのファイルに必須です。
最小限の有効なTMHファイル(手作り)
Test Manager が受け入れる最小の有効な .tmh ファイルには、以下の 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"
}
objects/サブディレクトリはすべて省略可能です。インポータは、アーカイブに存在しないオブジェクトタイプをサイレントにスキップします。
- アーカイブの構造
- ファイル命名規則
- ほとんどのオブジェクトタイプ — 番号付きチャンク
- 型スコープのファイル名
- プロジェクト設定 — 番号サフィックスなし
- エンコードの要件
- スキーマのバージョン管理
- manifest.json
- objects/ — JSON ファイルスキーマ
- requirements/{n}.json
- testcases/{n}.json
- teststeps/{n}.json
- testsets/{n}.json
- testsetTestCaseAssignments/{n}.json
- requirementtestcaseassignments/{n}.json
- objectlabels/objectlabels-{objecttype}-{n}.json
- CustomFieldValues/{n}.json
- projectsettings/projectsettings.json
- ルールと制約
- 最小限の有効なTMHファイル(手作り)