UiPath Documentation
test-manager
latest
false
Importante :
La localización de contenidos recién publicados puede tardar entre una y dos semanas en estar disponible.

Guía de usuario de Test Manager

Especificación del formato de archivo TMH

Un archivo .tmh es el formato de copia de seguridad/migración del proyecto utilizado por UiPath Test Manager. Este documento describe su estructura, contenido y requisitos de codificación en detalle.

Estructura del archivo

<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
Nota:

Solo están presentes los tipos de objetos que se exportaron realmente. Las carpetas/archivos que faltan se omiten de forma silenciosa durante la importación.

Convenciones de nomenclatura de archivos

La mayoría de los tipos de objetos: fragmentos numerados

Los archivos se nombran <type>-{n}.json donde {n} comienza en 0 para exportaciones reales producidas por el sistema. Por ejemplo:

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

El importador escanea todos los archivos en cada carpeta, por lo que tanto la numeración basada en 0como la basada en 1funcionan al crear archivos manualmente.

Las exportaciones grandes pueden dividirse en varios archivos (testcases-0.json, testcases-1.json, etc.): el importador lee todos los archivos de la carpeta.

Consejo:

Para un rendimiento óptimo, limita cada archivo a un máximo de 500 objetos.

Nombres de archivo de ámbito de tipo

Varios tipos de objetos delimitan sus archivos por el tipo de objeto al que pertenecen. El importador lee todos los archivos de la carpeta independientemente del calificador, pero las exportaciones reales siempre utilizan estos nombres:

Tipo de objetoPatrón de nombre de archivo
ObjectLabelsobjectlabels-testcase-{n}.json, objectlabels-testset-{n}.json, objectlabels-requirement-{n}.json, …
CustomFieldValuescustomfieldvalues-testcase-{n}.json, customfieldvalues-requirement-{n}.json
Archivos adjuntosattachments-testexecution-{n}.json, attachments-requirement-{n}.json, …
Ejecución de pruebatestexecutions-Manual-Finished-{n}.json, testexecutions-Automated-Finished-{n}.json, …
Filtros de objetosobjectfilters-testset-{n}.json
Programaciones de conjuntos de pruebatestsetschedules-testset-{n}.json

Configuración del proyecto: sin sufijo numérico

projectsettings/projectsettings.json
projectsettings/projectsettings.json

Este archivo siempre es singular (sin número de fragmento).

Requisitos de codificación

Todos los archivos JSON deben codificarse como UTF-8 sin BOM.

ADVERTENCIA:

El Set-Content -Encoding utf8 de PowerShell 5.1 escribe un BOM UTF-8 (EF BB BF). Esto hace que JSON.parse en el navegador arroje SyntaxError: Unexpected token en la posición 0. Usa siempre [System.IO.File]::WriteAllText($path, $content, (New-Object System.Text.UTF8Encoding($false))) al crear archivos .tmh desde PowerShell.

Versiones del esquema

El manifest.json lleva un campo schemaVersion (por ejemplo, "1.0.16"). El importador utiliza esta versión junto con los atributos [IntroducedIn] en cada propiedad DTO para determinar qué campos leer. Los campos introducidos en una versión más reciente que la versión del esquema del paquete se ignoran durante la deserialización.

Última versión actual: 1.0.16

Resumen del historial de versiones:

VersiónAdiciones notables
1.0.0Inicial: requisitos, casos de prueba, pasos de prueba, conjuntos de pruebas, asignaciones, etiquetas, archivos adjuntos, defectos, valores de campo personalizados
1.0.1preCondition en casos de prueba
1.0.2Ejecuciones de prueba, anulaciones de resultados de registro de casos de prueba, aserciones
1.0.4Exportación de subconjunto (isSubsetExport, exportSubsetDetails)
1.0.5Etiquetas de campo personalizadas
1.0.7Solicitudes definidas por el usuario
1.0.9postCondition en casos de prueba
1.0.10Parámetros
1.0.11Paquetes de conjuntos de pruebas, folderKey/folderName en conjuntos de pruebas, packageEntryPointUniqueId etc. en casos de prueba
1.0.13id campo en archivos adjuntos
1.0.14studioWebFileId/studioWebProjectId en casos de prueba; id en asignaciones de conjuntos de pruebas/casos de prueba
1.0.15assigneeEmail en asignaciones de conjuntos de pruebas/casos de prueba
1.0.16Configuración del proyecto (configuración, gobernanza, firmantes), definiciones de campo personalizadas, autorizaciones de proyecto

manifest.json

Ubicado en la raíz del archivo (no 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"
}
Nota:

Las exportaciones reales también incluyen un campo packageName (el nombre de archivo de descarga sugerido). El importador lo ignora: omítelo en archivos hechos a mano.

object/ — Esquemas de archivo JSON

Cada archivo de objeto utiliza un objeto contenedor cuya única propiedad es una matriz JSON. La matriz contiene los registros de objetos individuales.

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"
    }
  ]
}
CampoTipoNotas
idCadena GUIDIdentificador único por requisito
nameStringObligatorio; 255 caracteres como máximo
descriptionStringPuede ser una cadena vacía
foreignRefStringReferencia del sistema externo; puede estar vacío
connectorRequirementIdCadena GUIDUsar "00000000-0000-0000-0000-000000000000" cuando no esté vinculado a un conector

casos de prueba/{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
    }
  ]
}
CampoTipoNotas
idCadena GUIDÚnico por caso de prueba
versioncadena | nulonull para casos de prueba manuales; "1.0.0" para casos de prueba automatizados vinculados a una versión de paquete; "" para casos de prueba automatizados sin una versión fija
nameStringObligatorio; 255 caracteres como máximo
inputParamscadena | nuloParámetros de entrada codificados en JSON; null para manual
descriptionStringDescripción de texto enriquecido; "" cuando está ausente
automationIdcadena | nuloidentificador de automatización de UiPath; null para manual
automationTestCaseNamecadena | nuloNombre para mostrar de la automatización; null para manual
automationProjectNamecadena | nuloProyecto de automatización; null para manual
foreignRefStringReferencia del sistema externo; "" cuando está ausente
connectorTestCaseIdcadena | nuloID del sistema del conector; null cuando está ausente
preConditioncadena | nulo (v1.0.1+)Texto de condición previa; null cuando está ausente; 8000 caracteres como máximo
postConditioncadena | nulo (v1.0.9+)Texto de condición posterior; null cuando está ausente; 8000 caracteres como máximo
packageEntryPointUniqueIdcadena | null (v1.0.11+)GUID del punto de entrada del paquete; null para manual
packageIdentifiercadena | null (v1.0.11+)ID del paquete; null para manual
packageEntryPointNamecadena | null (v1.0.11+)Nombre del punto de entrada; null para manual
feedIdcadena | null (v1.0.11+)ID de la fuente del paquete; null para manual
packageSourceNamecadena | null (v1.0.11+)Nombre de origen del paquete; null para manual
studioWebFileIdcadena | null (v1.0.14+)ID de archivo de Studio Web; null para manual
studioWebProjectIdcadena | null (v1.0.14+)ID del proyecto de Studio Web; null para manual

pasos de prueba/{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": ""
    }
  ]
}
CampoTipoNotas
idCadena GUIDÚnico por paso
testCaseIdCadena GUIDDebe hacer referencia a un caso de prueba existente id
orderNoEnteroOrden de visualización basado en 0 (primer paso = 0)
actionTypecadena | nulonull para pasos manuales
descriptionStringTexto de la acción del paso
expectedResultStringResultado esperado; "" cuando está ausente
clipboardDataStringDatos del portapapeles/capturas de pantalla; 8000 caracteres como máximo; por lo general ""

conjuntos de pruebas/{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": ""
    }
  ]
}
CampoTipoNotas
idCadena GUIDÚnico por conjunto de pruebas
versioncadena | nulonull para conjuntos de pruebas gestionados por Test Manager
nameStringObligatorio; 255 caracteres como máximo
descriptionString"" cuando está ausente
sourceString"TestManager" (predeterminado) o "Orchestrator" : se trata de una cadena, no de un número entero
externalTestSetIdcadena | nuloID externo cuando source es "Orchestrator"; null de lo contrario
sourceDetailscadena | nuloMetadatos de origen adicionales; null cuando está ausente
folderKeycadena | null (v1.0.11+)Clave de carpeta de UiPath Orchestrator; null si no está vinculado
folderNamestring (v1.0.11+)Nombre para mostrar de la carpeta; "" si no está vinculado; no almacenado en la base de datos, solo informativo

asignaciones de casos de prueba/{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
    }
  ]
}
CampoTipoNotas
idCadena GUID (v1.0.14+)Identificador de asignación
testSetIdCadena GUIDHace referencia a un conjunto de pruebas id
testCaseIdCadena GUIDHace referencia a un caso de prueba id
assigneeEmailcadena | null (v1.0.15+)Correo electrónico del asignado; null si no está asignado

requisitotestcaseassignments/{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"
    }
  ]
}
ADVERTENCIA:

No hay campo id . A diferencia de la mayoría de los otros tipos de objetos, las asignaciones de requisito-caso de prueba solo tienen requirementId y testCaseId.

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

Nota:

Nomenclatura de archivos: las exportaciones reales utilizan un nombre calificado por tipo como objectlabels-testcase-1.json, objectlabels-testset-1.json, objectlabels-requirement-1.json, etc. El importador lee todos los archivos de la carpeta objectlabels/ , por lo que el calificador no es estrictamente necesario al crear archivos manualmente, pero se recomienda seguir la convención.

{
  "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"
    }
  ]
}
CampoTipoNotas
objectIdCadena GUIDID del objeto etiquetado
nameStringTexto de la etiqueta
descriptionStringDescripción de la etiqueta; "" cuando está ausente
labelTypeEntero1 = etiqueta del sistema (por ejemplo "manual", "automated"); 0 = etiqueta definida por el usuario
objectTypeString"TestCase", "TestSet", "Requirement", "TestExecution", "TestCaseLog"

valoresDeCampoPersonalizados/{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

Introducido en la versión del esquema 1.0.16. Solo presente cuando está habilitada la opción "Exportar configuración del proyecto".

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

A diferencia de todos los demás archivos de objetos, projectsettings.json es un objeto directo (no una matriz de envoltorio). El archivo contiene un único objeto JSON plano.

CampoTipoNotas
projectTimeZonecadena | nuloCadena de zona horaria IANA (por ejemplo, "Europe/Vienna")
folderKeyGUID | nuloCarpeta de Orchestrator vinculada
governanceEnabledbooleano | nuloSi el control está habilitado para el proyecto
governedByDefaultbooleano | nuloSi los nuevos casos de prueba se rigen por defecto
signatoriesmatriz | nuloLista de aprobadores/firmantes
signatories[].signatoryIdGUIDID de usuario o grupo
signatories[].signatoryTypeEntero0 = Usuario, 1 = GrupoDeUsuarios
signatories[].signatoryLastKnownDetailsStringNombre para mostrar o correo electrónico en el momento de la exportación
Nota:

lastDisabledAt (la marca de tiempo de deshabilitación del control) se excluye intencionadamente de la exportación: es una marca de tiempo interna que no es significativa para un proyecto reimportado.

Reglas y restricciones

  1. Todos los ID deben ser GUID únicos y válidos. No reutilices ID en objetos del mismo o diferente tipo.

  2. Las referencias cruzadas deben resolverse. Un testCaseId en un paso de prueba o asignación debe hacer referencia a un caso de prueba id presente en el mismo paquete.

  3. Los objetos de envoltorio son obligatorios. Incluso cuando la colección tiene un elemento, debe estar envuelto: { "testCases": [ {...} ] }, nunca una matriz u objeto vacío.

  4. Convencionesnull frente a "" : utiliza null para los campos opcionales que están realmente ausentes (p. ej. automationId, inputParams, preCondition, connectorTestCaseId, todos los campos package* en casos de prueba manuales). Utilice "" solo para los campos que siempre están presentes como cadenas pero que están vacíos (por ejemplo foreignRef, description, clipboardData). Mezclarlos, particularmente utilizando "" donde se espera null , puede causar fallos de importación silenciosos.

  5. objectCountDetails en el manifiesto debe coincidir con los recuentos reales de objetos presentes, pero el importador no valida estrictamente los recuentos: las discrepancias solo afectan a la visualización del resumen previo a la importación.

  6. UTF-8 sin BOM es obligatorio para todos los archivos.

Archivo TMH mínimo válido (hecho a mano)

El archivo .tmh válido más pequeño que aceptará Test Manager contiene solo un manifest.json:

{
  "objectCountDetails": { ... },
  "project": { "name": "Test Project", "description": "", "projectPrefix": "TP" },
  "tmPackageId": "<new-guid>",
  "schemaVersion": "1.0.16"
}
{
  "objectCountDetails": { ... },
  "project": { "name": "Test Project", "description": "", "projectPrefix": "TP" },
  "tmPackageId": "<new-guid>",
  "schemaVersion": "1.0.16"
}

Todos los subdirectorios objects/ son opcionales. El importador omite silenciosamente cualquier tipo de objeto que no esté presente en el archivo.

¿Te ha resultado útil esta página?

Conectar

¿Necesita ayuda? Soporte

¿Quiere aprender? UiPath Academy

¿Tiene alguna pregunta? Foro de UiPath

Manténgase actualizado