UiPath Documentation
test-manager
latest
false
Importante :
A localização de um conteúdo recém-publicado pode levar de 1 a 2 semanas para ficar disponível.

Guia do usuário do Test Manager

Especificação do formato de arquivo TMH

.tmh arquivo é o formato de backup/migração do projeto usado pelo UiPath Test Manager. Esse documento descreve sua estrutura, conteúdo e requisitos de codificação em detalhes.

Estrutura do arquivo

<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
Observação:

Apenas os tipos de objetos que foram realmente exportados estão presentes. As pastas/arquivos ausentes são ignorados silenciosamente durante a importação.

Convenções de nomenclatura de arquivo

A maioria dos tipos de objetos — partes numeradas

Os arquivos são nomeados <type>-{n}.json onde {n} começa em 0 para exportações reais produzidas pelo sistema. Por exemplo:

requirementtestcaseassignments-0.json
testcases-0.json
teststeps-0.json
requirementtestcaseassignments-0.json
testcases-0.json
teststeps-0.json

O importador verifica todos os arquivos em cada pasta, portanto, tanto a numeração baseada em 0quanto a baseada em 1funcionam ao criar arquivos manualmente.

Grandes exportações podem ser divididas entre vários arquivos (testcases-0.json, testcases-1.json etc.) — o importador lê todos os arquivos na pasta.

Dica:

Para obter um desempenho ideal, limite cada arquivo a um máximo de 500 objetos.

Nomes de arquivos com escopo de tipo

Vários tipos de objeto delimitam seus arquivos pelo tipo de objeto ao qual eles pertencem. O importador lê todos os arquivos na pasta independentemente do qualificador, mas as exportações reais sempre usam esses nomes:

Tipo de ObjetoPadrão do nome do arquivo
ObjectLabelsobjectlabels-testcase-{n}.json, objectlabels-testset-{n}.json, objectlabels-requirement-{n}.json,…
CustomFieldValuescustomfieldvalues-testcase-{n}.json, customfieldvalues-requirement-{n}.json
Anexosattachments-testexecution-{n}.json, attachments-requirement-{n}.json,…
Execuções de Testetestexecutions-Manual-Finished-{n}.json, testexecutions-Automated-Finished-{n}.json,…
Filtros de objetoobjectfilters-testset-{n}.json
Agendamentos de Conjuntos de Testestestsetschedules-testset-{n}.json

Configurações do projeto — sem sufixo de número

projectsettings/projectsettings.json
projectsettings/projectsettings.json

Esse arquivo é sempre único (sem número de bloco).

Codificação de requisitos

Todos os arquivos JSON devem ser codificados como UTF-8 sem BOM.

AVISO:

O Set-Content -Encoding utf8 do PowerShell 5.1 grava um BOM UTF-8 (EF BB BF). Isso faz com que JSON.parse no navegador gere SyntaxError: Unexpected token na posição 0. Sempre use [System.IO.File]::WriteAllText($path, $content, (New-Object System.Text.UTF8Encoding($false))) ao criar arquivos .tmh a partir do PowerShell.

Controle de versão de esquema

O manifest.json carrega um campo schemaVersion (por exemplo, "1.0.16"). O importador usa essa versão junto com os atributos [IntroducedIn] em cada propriedade DTO para determinar quais campos ler. Os campos introduzidos em uma versão mais recente que a versão do esquema do pacote são ignorados durante a desserialização.

Versão mais recente atual: 1.0.16

Resumo do histórico da versão:

VersãoAdições notáveis
1.0.0Inicial: requisitos, casos de teste, etapas de teste, conjuntos de teste, atribuições, rótulos, anexos, defeitos, valores de campo personalizado
1.0.1preCondition em casos de teste
1.0.2Execuções de teste, substituições de resultados de log de casos de teste, asserções
1.0.4Exportação de subconjunto (isSubsetExport, exportSubsetDetails)
1.0.5Rótulos de campos personalizados
1.0.7Prompts definidos pelo usuário
1.0.9postCondition em casos de teste
1.0.10Parâmetros
1.0.11Pacotes de conjuntos de testes, folderKey/folderName em conjuntos de testes, packageEntryPointUniqueId etc. em casos de teste
1.0.13id campo em anexos
1.0.14studioWebFileId/studioWebProjectId em casos de teste; id em atribuições de conjunto de teste/caso de teste
1.0.15assigneeEmail em atribuições de conjunto de teste/caso de teste
1.0.16Configuração do projeto (configurações, governança, signatários), definições de campos personalizados, autorizações do projeto

manifest.json

Localizado na raiz do arquivo (não dentro 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"
}
Observação:

As exportações reais também incluem um campo packageName (o nome de arquivo de download sugerido). O importador o ignora — omita-o em arquivos criados manualmente.

objetos/ — esquemas de arquivo JSON

Cada arquivo de objeto usa um objeto wrapper cuja única propriedade é uma matriz JSON. A matriz contém os registros de objetos individuais.

requisitos/{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"
    }
  ]
}
CampoTipoObservações
idString do GUIDIdentificador exclusivo por requisito
nameStringObrigatório; Máx. de 255 caracteres
descriptionStringPode ser uma string vazia
foreignRefStringReferência do sistema externo; pode estar vazio
connectorRequirementIdString do GUIDUse "00000000-0000-0000-0000-000000000000" quando não estiver vinculado a um conector

casos de teste/{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
    }
  ]
}
CampoTipoObservações
idString do GUIDExclusivo por caso de teste
versionstring | Nulonull para casos de teste manuais; "1.0.0" casos de teste automatizados vinculados a uma versão do pacote; "" para casos de teste automatizados sem uma versão fixa
nameStringObrigatório; Máx. de 255 caracteres
inputParamsstring | NuloParâmetros de entrada codificados em JSON; null manual
descriptionStringDescrição em rich text; "" ausente
automationIdstring | NuloIdentificador de automação da UiPath; null manual
automationTestCaseNamestring | NuloNome de exibição da automação; null manual
automationProjectNamestring | NuloProjeto de automação; null manual
foreignRefStringReferência do sistema externo; "" ausente
connectorTestCaseIdstring | NuloID do sistema de conector; null ausente
preConditionstring | nulo (v1.0.1+)Texto de pré-condição; null ausente; Máx. de 8.000 caracteres
postConditionstring | nulo (v1.0.9+)Texto de pós-condição; null ausente; Máx. de 8.000 caracteres
packageEntryPointUniqueIdstring | nulo (v1.0.11+)GUID do ponto de entrada do pacote; null manual
packageIdentifierstring | nulo (v1.0.11+)ID do pacote; null manual
packageEntryPointNamestring | nulo (v1.0.11+)Nome do ponto de entrada; null manual
feedIdstring | nulo (v1.0.11+)ID do feed do pacote; null manual
packageSourceNamestring | nulo (v1.0.11+)Nome da origem do pacote; null manual
studioWebFileIdstring | nulo (v1.0.14+)ID do arquivo do Studio Web; null manual
studioWebProjectIdstring | nulo (v1.0.14+)ID do projeto do Studio Web; null manual

etapas de teste/{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": ""
    }
  ]
}
CampoTipoObservações
idString do GUIDExclusivo por etapa
testCaseIdString do GUIDDeve fazer referência a um caso de teste existente id
orderNoNúmero inteiroOrdem de exibição baseada em 0 (primeira etapa = 0)
actionTypestring | Nulonull para etapas manuais
descriptionStringTexto da ação da etapa
expectedResultStringResultado esperado; "" ausente
clipboardDataStringDados de área de transferência/captura de tela; máximo de 8000 caracteres; Geralmente ""

testessets/{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": ""
    }
  ]
}
CampoTipoObservações
idString do GUIDExclusivo por conjunto de teste
versionstring | Nulonull para conjuntos de testes gerenciados pelo Test Manager
nameStringObrigatório; Máx. de 255 caracteres
descriptionString"" quando ausente
sourceString"TestManager" (padrão) ou "Orchestrator" é uma string, não um número inteiro
externalTestSetIdstring | NuloID externo quando source é "Orchestrator"; null caso contrário
sourceDetailsstring | NuloMetadados de origem adicionais; null ausente
folderKeystring | nulo (v1.0.11+)Chave da pasta do UiPath Orchestrator; se null estiver vinculado
folderNamestring (v1.0.11+)Nome de exibição da pasta; se "" estiver vinculado; não armazenado no banco de dados, apenas informativo

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
    }
  ]
}
CampoTipoObservações
idString GUID (v1.0.14+)Identificador de atribuição
testSetIdString do GUIDReferencia um conjunto de teste id
testCaseIdString do GUIDReferencia um caso de teste id
assigneeEmailstring | nulo (v1.0.15+)E-mail do destinatário; se null atribuído

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"
    }
  ]
}
AVISO:

Nenhum campo id . Ao contrário da maioria dos outros tipos de objetos, as atribuições de caso de requisito de teste têm apenas requirementId e testCaseId.

objectlabels/objectlabels-{objecttype}-{n}.json

Observação:

Nomenclatura de arquivo: as exportações reais usam um nome qualificado por tipo, como objectlabels-testcase-1.json, objectlabels-testset-1.json, objectlabels-requirement-1.json, etc. O importador lê todos os arquivos na pasta objectlabels/ , portanto, o qualificador não é estritamente necessário ao criar arquivos manualmente, mas é recomendável seguir a convenção.

{
  "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"
    }
  ]
}
CampoTipoObservações
objectIdString do GUIDID do objeto rotulado
nameStringTexto do rótulo
descriptionStringDescrição do rótulo; "" ausente
labelTypeNúmero inteiro1 = rótulo do sistema (por exemplo "manual", "automated"); 0 = rótulo definido pelo usuário
objectTypeString"TestCase", "TestSet", "Requirement", "TestExecution", "TestCaseLog"

valoresdecampo personalizado/{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

Introduzido na versão do esquema 1.0.16. Presente apenas quando "Exportar configuração do projeto" está habilitado.

{
  "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"
    }
  ]
}
Observação:

projectsettings.json contrário de todos os outros arquivos de objeto, é um objeto direto (não uma matriz de wrapper). O arquivo contém um único objeto JSON plano.

CampoTipoObservações
projectTimeZonestring | NuloString de fuso horário IANA (por exemplo, "Europe/Vienna")
folderKeyGUID | NuloPasta do Orchestrator vinculada
governanceEnabledbooleano | NuloSe a governança está habilitada para o projeto
governedByDefaultbooleano | NuloSe os novos casos de teste são governados por padrão
signatoriesmatriz | NuloLista de aprovadores/signatários
signatories[].signatoryIdGUIDID do Usuário ou do Grupo
signatories[].signatoryTypeNúmero inteiro0 = Usuário, 1 = Grupo de Usuários
signatories[].signatoryLastKnownDetailsStringNome ou email de exibição no momento da exportação
Observação:

(o carimbo de data/hora de desabilitação da governança) é excluído lastDisabledAt da exportação — é um carimbo de data/hora interno que não é significativo para um projeto reimportado.

Regras e restrições

  1. Todos os IDs devem ser GUIDs exclusivos e válidos. Não reutilize IDs em objetos do mesmo tipo ou de diferentes tipos.

  2. As referências cruzadas devem ser resolvidas. Um testCaseId em uma etapa de teste ou atribuição deve se referir a um caso de teste id presente no mesmo pacote.

  3. Os objetos do wrapper são obrigatórios. Mesmo quando a coleção tem um item, ele ainda deve ser envolvido: { "testCases": [ {...} ] }, nunca um array ou objeto vazio.

  4. Convençõesnull vs. "" : use null para campos opcionais que estão instantaneamente ausentes (por exemplo automationId, inputParams, preCondition, connectorTestCaseId, todos os campos package* em casos de teste manuais). Use "" apenas para campos que estão sempre presentes como strings, mas estão vazios (por exemplo foreignRef, description, clipboardData). Combinar esses dados — particularmente usando "" onde null é esperado — pode causar falhas de importação silenciosas.

  5. noobjectCountDetails deve corresponder às contagens reais de objetos presentes, mas o importador não valida estritamente as contagens — as incompatibilidades afetam apenas a exibição do resumo pré-importação.

  6. O UTF-8 sem BOM é obrigatório para todos os arquivos.

Arquivo TMH mínimo válido (fabricado manualmente)

O menor arquivo .tmh válido que o Test Manager aceitará contém apenas um 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"
}

Todos os subdiretórios objects/ são opcionais. O importador ignora silenciosamente qualquer tipo de objeto não presente no arquivo.

Esta página foi útil?

Conectar

Precisa de ajuda? Suporte

Quer aprender? Academia UiPath

Tem perguntas? Fórum do UiPath

Fique por dentro das novidades