UiPath Documentation
uipath-cli
latest
false
UiPath CLI user guide

uip tm testcases

Syntax and options for `uip tm testcases`, which manages test cases including create, list, update, delete, link automations, and test case log management.

uip tm testcases manages test cases within a Test Manager project: create, list, update, delete, link or unlink an Orchestrator automation, inspect historical results, and add or remove test cases from a test set. It also provides testcases run — a way to execute one or more test cases directly from an Orchestrator package. This page also documents uip tm testcaselogs list-assertions, which reads the assertion artifacts attached to a single test case log, and the testcaselog start / testcaselog finish verbs used by automations to record manual log entries.

A test case is the unit of authorship. It becomes runnable once it is linked to a package entry point with testcases link-automation. A test case can then be executed as part of a test set (see testsets), or directly via testcases run.

Warning:

Never run testcases link-automation on a test case created by uip tm pack for a Playwright project. Playwright test cases are linked automatically during pack-time ingestion; running link-automation on them manually follows the RPA linking pipeline instead and corrupts that association. If you packed with --no-create-test-cases, use the Select Automation flow in the Test Manager UI instead.

Synopsis

uip tm testcases create --project-key <key> --name <name> [--description <text>] [--version <version>]
uip tm testcases list --project-key <key> [--filter <text>]
uip tm testcases list-result-history --project-key <key> --test-case-id <uuid> [--filter <text>] [--only-failed] [--results <results...>] [--statuses <statuses...>] [--duration-period <period>] [--top <number>] [--skip <number>]
uip tm testcases update --project-key <key> --test-case-key <key> [--name <name>] [--description <text>]
uip tm testcases delete --project-key <key> --test-case-key <key> [-y]
uip tm testcases link-automation --project-key <key> --test-case-key <key> --folder-key <uuid> --package-name <name> --test-name <name>
uip tm testcases unlink-automation --project-key <key> --test-case-key <key>
uip tm testcases list-automations --project-key <key> --folder-key <uuid> [--package-name <name>]
uip tm testcases list-testsets --project-key <key> --test-case-key <key>
uip tm testcases run --project-key <key> --test-case-id <uuid...> --name <name> --execution-type <type> [--async] [--folder-key <uuid>] [--runtime-type <type>] [--robot-user-key <uuid>] [--machine-key <uuid>] [--host-machine-name <name>] [--service-user-name <name>] [--test-set-packages <json>]
uip tm testcases add --test-set-key <key> --test-case-keys <keys>
uip tm testcases remove --test-set-key <key> --test-case-keys <keys> [-y]
uip tm testcases list-steps --project-key <key> --test-case-id <uuid>

uip tm testcases steps list --project-key <key> --test-case-id <uuid>
uip tm testcases steps get --project-key <key> --step-id <uuid>
uip tm testcases steps add --project-key <key> --test-case-id <uuid> [--description <text>] [--expected-result <text>] [--action-type <type>] [--clipboard-data <text>] [--order-no <n>] [--step <json>...]
uip tm testcases steps update --project-key <key> --step-id <uuid> [--description <text>] [--expected-result <text>] [--action-type <type>] [--clipboard-data <text>]
uip tm testcases steps move --project-key <key> --step-id <uuid> --target-position <n>
uip tm testcases steps delete --project-key <key> --step-id <uuid> [-y]

uip tm testcaselogs list-assertions --project-key <key> --test-case-log-id <uuid>

uip tm testcaselog start --execution-id <uuid> --test-case-id <uuid> [--execution-type <type>]
uip tm testcaselog finish --test-case-log-id <uuid> [--info <text>]
uip tm testcases create --project-key <key> --name <name> [--description <text>] [--version <version>]
uip tm testcases list --project-key <key> [--filter <text>]
uip tm testcases list-result-history --project-key <key> --test-case-id <uuid> [--filter <text>] [--only-failed] [--results <results...>] [--statuses <statuses...>] [--duration-period <period>] [--top <number>] [--skip <number>]
uip tm testcases update --project-key <key> --test-case-key <key> [--name <name>] [--description <text>]
uip tm testcases delete --project-key <key> --test-case-key <key> [-y]
uip tm testcases link-automation --project-key <key> --test-case-key <key> --folder-key <uuid> --package-name <name> --test-name <name>
uip tm testcases unlink-automation --project-key <key> --test-case-key <key>
uip tm testcases list-automations --project-key <key> --folder-key <uuid> [--package-name <name>]
uip tm testcases list-testsets --project-key <key> --test-case-key <key>
uip tm testcases run --project-key <key> --test-case-id <uuid...> --name <name> --execution-type <type> [--async] [--folder-key <uuid>] [--runtime-type <type>] [--robot-user-key <uuid>] [--machine-key <uuid>] [--host-machine-name <name>] [--service-user-name <name>] [--test-set-packages <json>]
uip tm testcases add --test-set-key <key> --test-case-keys <keys>
uip tm testcases remove --test-set-key <key> --test-case-keys <keys> [-y]
uip tm testcases list-steps --project-key <key> --test-case-id <uuid>

uip tm testcases steps list --project-key <key> --test-case-id <uuid>
uip tm testcases steps get --project-key <key> --step-id <uuid>
uip tm testcases steps add --project-key <key> --test-case-id <uuid> [--description <text>] [--expected-result <text>] [--action-type <type>] [--clipboard-data <text>] [--order-no <n>] [--step <json>...]
uip tm testcases steps update --project-key <key> --step-id <uuid> [--description <text>] [--expected-result <text>] [--action-type <type>] [--clipboard-data <text>]
uip tm testcases steps move --project-key <key> --step-id <uuid> --target-position <n>
uip tm testcases steps delete --project-key <key> --step-id <uuid> [-y]

uip tm testcaselogs list-assertions --project-key <key> --test-case-log-id <uuid>

uip tm testcaselog start --execution-id <uuid> --test-case-id <uuid> [--execution-type <type>]
uip tm testcaselog finish --test-case-log-id <uuid> [--info <text>]

All verbs honor the global options and the standard exit codes. Every verb accepts --log-level <level> (default Information).

uip tm testcases create

Create a new test case inside a project.

Arguments

None.

Options

FlagDescription
--project-key <key>Required. Owning project.
--name <name>Required. Test case name.
--description <text>Free-form description. Defaults to empty.
--version <version>Test case version string. Defaults to 1.0.0.

Example

uip tm testcases create \
  --project-key DEMO \
  --name "Login smoke" \
  --description "Logs in and out"
uip tm testcases create \
  --project-key DEMO \
  --name "Login smoke" \
  --description "Logs in and out"

Data shape

{
  "Code": "TestCaseCreate",
  "Data": {
    "TestCaseKey": "DEMO:1",
    "Id": "a1b2c3d4-0000-0000-0000-000000000001",
    "Name": "Login smoke",
    "Description": "Logs in and out",
    "Version": "1.0.0"
  }
}
{
  "Code": "TestCaseCreate",
  "Data": {
    "TestCaseKey": "DEMO:1",
    "Id": "a1b2c3d4-0000-0000-0000-000000000001",
    "Name": "Login smoke",
    "Description": "Logs in and out",
    "Version": "1.0.0"
  }
}

TestCaseKey (the public PROJECT:N identifier) is what you pass to other verbs. The internal Id (UUID) is needed for list-result-history and list-testsets.

uip tm testcases list

List all test cases in a project. The CLI pages through results automatically.

Arguments

None.

Options

FlagDescription
--project-key <key>Required. Project to list.
--filter <text>Filter by name or key (server-side search).

Example

uip tm testcases list --project-key DEMO --filter login
uip tm testcases list --project-key DEMO --filter login

Data shape

{
  "Code": "TestCasesList",
  "Data": [
    {
      "TestCaseKey": "DEMO:1",
      "Name": "Login smoke",
      "Description": "Logs in and out"
    }
  ]
}
{
  "Code": "TestCasesList",
  "Data": [
    {
      "TestCaseKey": "DEMO:1",
      "Name": "Login smoke",
      "Description": "Logs in and out"
    }
  ]
}

uip tm testcases list-result-history

List the historical test case logs for a single test case. Takes the internal --test-case-id (UUID) — look up the UUID via testcases list or from a previous TestCaseCreate output.

Arguments

None.

Options

FlagDescription
--project-key <key>Required. Owning project.
--test-case-id <uuid>Required. Internal test case UUID.
--filter <text>Search test case logs by name.
--only-failedShortcut for "show only failed logs" (default false).
--results <results...>Space-separated results to include. Accepted values come from the SDK Result enum.
--statuses <statuses...>Space-separated execution statuses. Accepted values come from the SDK TestCaseLogExecutionStatus enum.
--duration-period <period>Filter by duration bucket. Accepted values come from the SDK DurationPeriod enum.
--top <number>Page size. Defaults to 50.
--skip <number>Results to skip. Defaults to 0.
Note:

The exact accepted values for --results, --statuses, and --duration-period are generated at runtime from the Test Manager SDK enums shipped with the installed tool version. Run uip tm testcases list-result-history --help to see the current set.

Example

uip tm testcases list-result-history \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 \
  --only-failed
uip tm testcases list-result-history \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 \
  --only-failed

Data shape

{
  "Code": "TestCaseResultHistory",
  "Data": [
    {
      "Id": "b2c3d4e5-0000-0000-0000-000000000001",
      "Result": "Failed",
      "Status": "Finished",
      "ExecutionEnd": "2025-04-15T12:00:00Z"
    }
  ]
}
{
  "Code": "TestCaseResultHistory",
  "Data": [
    {
      "Id": "b2c3d4e5-0000-0000-0000-000000000001",
      "Result": "Failed",
      "Status": "Finished",
      "ExecutionEnd": "2025-04-15T12:00:00Z"
    }
  ]
}

uip tm testcases update

Rename a test case or change its description. At least one of --name or --description is required.

Arguments

None.

Options

FlagDescription
--project-key <key>Required. Owning project.
--test-case-key <key>Required. Test case key (for example, DEMO:1).
--name <name>New name.
--description <text>New description.

Example

uip tm testcases update \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --name "Login smoke (2026)"
uip tm testcases update \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --name "Login smoke (2026)"

Data shape

{
  "Code": "TestCaseUpdate",
  "Data": {
    "TestCaseKey": "DEMO:1",
    "Name": "Login smoke (2026)",
    "Result": "Updated"
  }
}
{
  "Code": "TestCaseUpdate",
  "Data": {
    "TestCaseKey": "DEMO:1",
    "Name": "Login smoke (2026)",
    "Result": "Updated"
  }
}

uip tm testcases delete

Delete a test case by its key.

Arguments

None.

Options

FlagDescription
--project-key <key>Required. Owning project.
--test-case-key <key>Required. Test case key (for example, DEMO:1).
-y, --yesSkip the confirmation prompt. Required in non-interactive environments.

Example

uip tm testcases delete \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --yes
uip tm testcases delete \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --yes

Data shape

{
  "Code": "TestCaseDelete",
  "Data": {
    "TestCaseKey": "DEMO:1",
    "Id": "a1b2c3d4-0000-0000-0000-000000000001",
    "Result": "Deleted"
  }
}
{
  "Code": "TestCaseDelete",
  "Data": {
    "TestCaseKey": "DEMO:1",
    "Id": "a1b2c3d4-0000-0000-0000-000000000001",
    "Result": "Deleted"
  }
}

Bind an Orchestrator package entry point to a test case. This is what makes the test case executable inside a test set. Internally, the command resolves the folder display name from --folder-key, looks up the matching package entry point by name, then stores the binding on the test case. For Playwright test cases created by pack, see the warning above.

Arguments

None.

Options

FlagDescription
--project-key <key>Required. Owning project.
--test-case-key <key>Required. Test case to bind.
--folder-key <uuid>Required. Orchestrator folder UUID (from uip or folders list).
--package-name <name>Required. Orchestrator package identifier (for example, InvoiceTests).
--test-name <name>Required. The test case name inside the package (the entry point name).

Example

uip tm testcases link-automation \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name InvoiceTests \
  --test-name SmokeTest
uip tm testcases link-automation \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name InvoiceTests \
  --test-name SmokeTest

Data shape

{
  "Code": "TestCaseLinkAutomation",
  "Data": {
    "TestCaseKey": "DEMO:1",
    "PackageName": "InvoiceTests",
    "PackageSource": "Shared",
    "TestName": "SmokeTest",
    "Result": "Linked"
  }
}
{
  "Code": "TestCaseLinkAutomation",
  "Data": {
    "TestCaseKey": "DEMO:1",
    "PackageName": "InvoiceTests",
    "PackageSource": "Shared",
    "TestName": "SmokeTest",
    "Result": "Linked"
  }
}

Remove the automation binding from a test case. After unlinking, the test case is no longer executable until it is linked again.

Arguments

None.

Options

FlagDescription
--project-key <key>Required. Owning project.
--test-case-key <key>Required. Test case to unlink.

Example

uip tm testcases unlink-automation \
  --project-key DEMO \
  --test-case-key DEMO:1
uip tm testcases unlink-automation \
  --project-key DEMO \
  --test-case-key DEMO:1

Data shape

{
  "Code": "TestCaseUnlinkAutomation",
  "Data": {
    "TestCaseKey": "DEMO:1",
    "Result": "Unlinked"
  }
}
{
  "Code": "TestCaseUnlinkAutomation",
  "Data": {
    "TestCaseKey": "DEMO:1",
    "Result": "Unlinked"
  }
}

uip tm testcases list-automations

List the test entry points available in an Orchestrator folder. Use this to discover the --package-name / --test-name values to pass to link-automation.

Arguments

None.

Options

FlagDescription
--project-key <key>Required. Owning project (used to scope the lookup).
--folder-key <uuid>Required. Orchestrator folder UUID.
--package-name <name>Filter the list to one package (case-insensitive exact match).

Example

uip tm testcases list-automations \
  --project-key DEMO \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001
uip tm testcases list-automations \
  --project-key DEMO \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001

Data shape

{
  "Code": "TestAutomationsList",
  "Data": [
    {
      "PackageName": "InvoiceTests",
      "TestName": "SmokeTest",
      "PackageVersion": "1.0.2"
    }
  ]
}
{
  "Code": "TestAutomationsList",
  "Data": [
    {
      "PackageName": "InvoiceTests",
      "TestName": "SmokeTest",
      "PackageVersion": "1.0.2"
    }
  ]
}

uip tm testcases list-testsets

List every test set that contains a given test case.

Arguments

None.

Options

FlagDescription
--project-key <key>Required. Owning project.
--test-case-key <key>Required. Test case key (for example, DEMO:1).

Example

uip tm testcases list-testsets \
  --project-key DEMO \
  --test-case-key DEMO:1
uip tm testcases list-testsets \
  --project-key DEMO \
  --test-case-key DEMO:1

Data shape

{
  "Code": "TestCaseTestSetsList",
  "Data": [
    {
      "TestSetKey": "DEMO:10",
      "Name": "Smoke Suite",
      "FolderKey": "f0f0f0f0-0000-0000-0000-000000000001"
    }
  ]
}
{
  "Code": "TestCaseTestSetsList",
  "Data": [
    {
      "TestSetKey": "DEMO:10",
      "Name": "Smoke Suite",
      "FolderKey": "f0f0f0f0-0000-0000-0000-000000000001"
    }
  ]
}

uip tm testcases run

Run one or more test cases directly from an Orchestrator package, without creating a test set first. testcases run starts an execution and returns the execution record. For more information about this capability, see Executing test cases without a test set in the Test Manager documentation.

Note:

testcases run is synchronous by default — it blocks until the execution record is confirmed. To return immediately after queuing, pass --async. To block until the execution finishes, pipe the returned Id into uip tm wait.

When to use testcases run vs testsets run

  • Use testcases run to execute test cases on demand directly from a package.
  • Use testsets run to execute a named, curated group of test cases that is managed over time in Test Manager.

Arguments

None.

Options

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Optional if derivable from context.
--test-case-id <uuid...>Required. One or more test case UUIDs to run, space-separated. Get UUIDs from testcases list.
--execution-type <type>Required. Execution type: automated, manual, mixed, or none.
--name <name>Display name for the execution.
--asyncReturn immediately after queuing, without waiting for the server to confirm the execution has started. Omit to wait for the execution record to be fully created before returning.
--folder-key <uuid>Orchestrator folder to run in. Required when the test cases are linked to automations in a specific folder.
--runtime-type <type>Robot runtime type override. Accepted values: nonProduction, attended, unattended, rpaDeveloper, studioX, headless, rpaDeveloperPro, testAutomation, automationCloud, serverless, automationKit, serverlessTestAutomation, automationCloudTestAutomation, attendedStudioWeb, hosting, assistantWeb, processOrchestration, agentService, appTest, performanceTest, businessRule, caseManagement.
--robot-user-key <uuid>Robot user key for the execution target.
--machine-key <uuid>Machine key for the execution target.
--host-machine-name <name>Host machine name for the execution target.
--service-user-name <name>Service user name for the execution target.
--test-set-packages <json>JSON array of package overrides: [{"packageName":"Pkg","version":"1.0.0"}].

Examples

# Simplest — run a single test case (blocks until execution record is created)
uip tm testcases run \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 \
  --execution-type automated \
  --name "Login smoke run"
# Simplest — run a single test case (blocks until execution record is created)
uip tm testcases run \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 \
  --execution-type automated \
  --name "Login smoke run"
# Run multiple test cases asynchronously, then wait for completion
id=$(uip tm testcases run \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 a1b2c3d4-0000-0000-0000-000000000002 \
  --execution-type automated \
  --name "Smoke run" \
  --async \
  --output-filter Id)

uip tm wait --execution-id "$id" --project-key DEMO --timeout 900000
uip tm report get --execution-id "$id" --project-key DEMO
# Run multiple test cases asynchronously, then wait for completion
id=$(uip tm testcases run \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 a1b2c3d4-0000-0000-0000-000000000002 \
  --execution-type automated \
  --name "Smoke run" \
  --async \
  --output-filter Id)

uip tm wait --execution-id "$id" --project-key DEMO --timeout 900000
uip tm report get --execution-id "$id" --project-key DEMO
# Full override — specify folder, runtime, machine, and package version
uip tm testcases run \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 \
  --execution-type automated \
  --name "Smoke run" \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --runtime-type unattended \
  --machine-key 33333333-4444-5555-6666-777777777777 \
  --test-set-packages '[{"packageName":"InvoiceTests","version":"1.0.2"}]'
# Full override — specify folder, runtime, machine, and package version
uip tm testcases run \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 \
  --execution-type automated \
  --name "Smoke run" \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --runtime-type unattended \
  --machine-key 33333333-4444-5555-6666-777777777777 \
  --test-set-packages '[{"packageName":"InvoiceTests","version":"1.0.2"}]'

Data shape

{
  "Code": "TestCaseRun",
  "Data": {
    "Id": "b2c3d4e5-0000-0000-0000-000000000001",
    "Name": "Login smoke run",
    "ProjectId": "00000000-0000-0000-0000-000000000abc",
    "TestSetId": "a1b2c3d4-0000-0000-0000-000000000010",
    "TestSetObjKey": "DEMO:10",
    "Status": "Running",
    "ExecutionType": "automated",
    "Source": "Manual",
    "RunId": 1,
    "FolderKey": "f0f0f0f0-0000-0000-0000-000000000001",
    "ExecutionStart": "2025-04-15T10:30:00Z",
    "EnableCoverage": false,
    "EnforceExecutionOrder": false,
    "AutopilotForRobotsSettings": { "Enabled": false },
    "OrderedExecutionSettings": { "Enabled": false },
    "VideoRecordingSettings": { "Enabled": false }
  }
}
{
  "Code": "TestCaseRun",
  "Data": {
    "Id": "b2c3d4e5-0000-0000-0000-000000000001",
    "Name": "Login smoke run",
    "ProjectId": "00000000-0000-0000-0000-000000000abc",
    "TestSetId": "a1b2c3d4-0000-0000-0000-000000000010",
    "TestSetObjKey": "DEMO:10",
    "Status": "Running",
    "ExecutionType": "automated",
    "Source": "Manual",
    "RunId": 1,
    "FolderKey": "f0f0f0f0-0000-0000-0000-000000000001",
    "ExecutionStart": "2025-04-15T10:30:00Z",
    "EnableCoverage": false,
    "EnforceExecutionOrder": false,
    "AutopilotForRobotsSettings": { "Enabled": false },
    "OrderedExecutionSettings": { "Enabled": false },
    "VideoRecordingSettings": { "Enabled": false }
  }
}

Key fields:

  • Id — pass to uip tm wait, report get, result download, attachment download.
  • Status: "Running" — the execution may not have dispatched yet.
  • Source: "Manual" — all testcases run executions are tagged as manually triggered.

End-to-end workflow: package to results

# 1. Discover your project key
uip tm project list --output json

# 2. Find the test case UUIDs you want to run
uip tm testcases list --project-key DEMO --filter "login" --output json

# 3. Find the folder that holds your package
uip or folders list --output json

# 4. Link the test case to the automation entry point
uip tm testcases link-automation \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name InvoiceTests \
  --test-name SmokeTest

# 5. Run the test cases directly
id=$(uip tm testcases run \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 \
  --execution-type automated \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --name "PR #42 smoke" \
  --output-filter Id)

# 6. Block until done (timeout in ms — 15 minutes here)
uip tm wait \
  --execution-id "$id" \
  --project-key DEMO \
  --timeout 900000

# 7. Read the result
uip tm report get --execution-id "$id" --project-key DEMO

# 8. Download JUnit XML for CI
uip tm result download \
  --execution-id "$id" \
  --project-key DEMO \
  --result-path ./junit.xml

# 9. Download screenshots and logs
uip tm attachment download \
  --execution-id "$id" \
  --project-key DEMO \
  --only-failed \
  --result-path ./attachments
# 1. Discover your project key
uip tm project list --output json

# 2. Find the test case UUIDs you want to run
uip tm testcases list --project-key DEMO --filter "login" --output json

# 3. Find the folder that holds your package
uip or folders list --output json

# 4. Link the test case to the automation entry point
uip tm testcases link-automation \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name InvoiceTests \
  --test-name SmokeTest

# 5. Run the test cases directly
id=$(uip tm testcases run \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 \
  --execution-type automated \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --name "PR #42 smoke" \
  --output-filter Id)

# 6. Block until done (timeout in ms — 15 minutes here)
uip tm wait \
  --execution-id "$id" \
  --project-key DEMO \
  --timeout 900000

# 7. Read the result
uip tm report get --execution-id "$id" --project-key DEMO

# 8. Download JUnit XML for CI
uip tm result download \
  --execution-id "$id" \
  --project-key DEMO \
  --result-path ./junit.xml

# 9. Download screenshots and logs
uip tm attachment download \
  --execution-id "$id" \
  --project-key DEMO \
  --only-failed \
  --result-path ./attachments

uip tm testcases add

Add one or more test cases to an existing test set.

Arguments

None.

Options

FlagDescription
--test-set-key <key>Required. Test set object key (for example, DEMO:42).
--test-case-keys <keys>Required. Comma-separated test case keys to add (for example, DEMO:1,DEMO:2).

Example

uip tm testcases add \
  --test-set-key DEMO:42 \
  --test-case-keys DEMO:1,DEMO:2
uip tm testcases add \
  --test-set-key DEMO:42 \
  --test-case-keys DEMO:1,DEMO:2

Data shape

{
  "Code": "TestCaseAdd",
  "Data": {
    "TestSetKey": "DEMO:42",
    "Added": "DEMO:1, DEMO:2",
    "Result": "Added"
  }
}
{
  "Code": "TestCaseAdd",
  "Data": {
    "TestSetKey": "DEMO:42",
    "Added": "DEMO:1, DEMO:2",
    "Result": "Added"
  }
}

uip tm testcases remove

Remove one or more test cases from a test set.

Arguments

None.

Options

FlagDescription
--test-set-key <key>Required. Test set object key (for example, DEMO:42).
--test-case-keys <keys>Required. Comma-separated test case keys to remove (for example, DEMO:1,DEMO:2).
-y, --yesSkip the confirmation prompt. Required in non-interactive environments.

Example

uip tm testcases remove \
  --test-set-key DEMO:42 \
  --test-case-keys DEMO:1,DEMO:2 \
  --yes
uip tm testcases remove \
  --test-set-key DEMO:42 \
  --test-case-keys DEMO:1,DEMO:2 \
  --yes

Data shape

{
  "Code": "TestCaseRemove",
  "Data": {
    "TestSetKey": "DEMO:42",
    "Removed": "DEMO:1, DEMO:2",
    "Result": "Removed"
  }
}
{
  "Code": "TestCaseRemove",
  "Data": {
    "TestSetKey": "DEMO:42",
    "Removed": "DEMO:1, DEMO:2",
    "Result": "Removed"
  }
}

uip tm testcases list-steps

List the manual test steps of a test case. This is an alias for testcases steps list.

Arguments

None.

Options

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO).
--test-case-id <uuid>Required. Internal test case UUID.

Example

uip tm testcases list-steps \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001
uip tm testcases list-steps \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001

Data shape

{
  "Code": "TestCaseStepsList",
  "Data": [
    {
      "Id": "d4e5f6a7-0000-0000-0000-000000000001",
      "TestCaseId": "a1b2c3d4-0000-0000-0000-000000000001",
      "OrderNo": 0,
      "ActionType": "Manual",
      "Description": "Open login page",
      "ExpectedResult": "Login form is displayed"
    }
  ]
}
{
  "Code": "TestCaseStepsList",
  "Data": [
    {
      "Id": "d4e5f6a7-0000-0000-0000-000000000001",
      "TestCaseId": "a1b2c3d4-0000-0000-0000-000000000001",
      "OrderNo": 0,
      "ActionType": "Manual",
      "Description": "Open login page",
      "ExpectedResult": "Login form is displayed"
    }
  ]
}

uip tm testcases steps

testcases steps is a subgroup that manages the individual manual steps of a test case: list, get, add, update, move, and delete.

uip tm testcases steps list

List the steps of a test case in order.

Arguments

None.

Options
FlagDescription
--project-key <key>Test Manager project key.
--test-case-id <uuid>Required. Internal test case UUID.
Example
uip tm testcases steps list \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001
uip tm testcases steps list \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001
Data shape
{
  "Code": "TestCaseStepsList",
  "Data": [
    {
      "Id": "d4e5f6a7-0000-0000-0000-000000000001",
      "OrderNo": 0,
      "ActionType": "Manual",
      "Description": "Open login page",
      "ExpectedResult": "Login form is displayed"
    }
  ]
}
{
  "Code": "TestCaseStepsList",
  "Data": [
    {
      "Id": "d4e5f6a7-0000-0000-0000-000000000001",
      "OrderNo": 0,
      "ActionType": "Manual",
      "Description": "Open login page",
      "ExpectedResult": "Login form is displayed"
    }
  ]
}

uip tm testcases steps get

Get a single step by its UUID.

Arguments

None.

Options
FlagDescription
--project-key <key>Test Manager project key.
--step-id <uuid>Required. Test step UUID (from steps list).
Example
uip tm testcases steps get \
  --project-key DEMO \
  --step-id d4e5f6a7-0000-0000-0000-000000000001
uip tm testcases steps get \
  --project-key DEMO \
  --step-id d4e5f6a7-0000-0000-0000-000000000001
Data shape
{
  "Code": "TestStepGet",
  "Data": {
    "Id": "d4e5f6a7-0000-0000-0000-000000000001",
    "OrderNo": 0,
    "ActionType": "Manual",
    "Description": "Open login page",
    "ExpectedResult": "Login form is displayed"
  }
}
{
  "Code": "TestStepGet",
  "Data": {
    "Id": "d4e5f6a7-0000-0000-0000-000000000001",
    "OrderNo": 0,
    "ActionType": "Manual",
    "Description": "Open login page",
    "ExpectedResult": "Login form is displayed"
  }
}

uip tm testcases steps add

Add one or more steps to a test case. Use inline flags for a single step or --step <json> (repeatable) for several at once.

Arguments

None.

Options
FlagDescription
--project-key <key>Test Manager project key.
--test-case-id <uuid>Required. Test case to add steps to.
--description <text>Step description (single-step mode).
--expected-result <text>Expected outcome (single-step mode).
--action-type <type>Step action type (single-step mode).
--clipboard-data <text>Test data to copy for the step (single-step mode).
--order-no <n>0-based insert position; omit to append at the end (single-step mode).
--step <json>A step as a JSON object ({"description":"...","expectedResult":"..."}). Repeat to add several steps.
Examples
# single step
uip tm testcases steps add \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 \
  --description "Open login page" \
  --expected-result "Login form is displayed"

# multiple steps
uip tm testcases steps add \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 \
  --step '{"description":"Open login page","expectedResult":"Login form is shown"}' \
  --step '{"description":"Enter credentials","clipboardData":"[email protected]"}' \
  --step '{"description":"Click submit","expectedResult":"Dashboard loads"}'
# single step
uip tm testcases steps add \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 \
  --description "Open login page" \
  --expected-result "Login form is displayed"

# multiple steps
uip tm testcases steps add \
  --project-key DEMO \
  --test-case-id a1b2c3d4-0000-0000-0000-000000000001 \
  --step '{"description":"Open login page","expectedResult":"Login form is shown"}' \
  --step '{"description":"Enter credentials","clipboardData":"[email protected]"}' \
  --step '{"description":"Click submit","expectedResult":"Dashboard loads"}'
Data shape
{
  "Code": "TestStepAdd",
  "Data": [
    {
      "Id": "d4e5f6a7-0000-0000-0000-000000000001",
      "OrderNo": 0,
      "Description": "Open login page",
      "ExpectedResult": "Login form is displayed"
    }
  ]
}
{
  "Code": "TestStepAdd",
  "Data": [
    {
      "Id": "d4e5f6a7-0000-0000-0000-000000000001",
      "OrderNo": 0,
      "Description": "Open login page",
      "ExpectedResult": "Login form is displayed"
    }
  ]
}

uip tm testcases steps update

Update a step's description, expected result, action type, or clipboard data. At least one of these fields must be provided.

Arguments

None.

Options
FlagDescription
--project-key <key>Test Manager project key.
--step-id <uuid>Required. Test step UUID.
--description <text>New description.
--expected-result <text>New expected result.
--action-type <type>New action type.
--clipboard-data <text>New clipboard data.
Example
uip tm testcases steps update \
  --project-key DEMO \
  --step-id d4e5f6a7-0000-0000-0000-000000000001 \
  --expected-result "Dashboard is shown"
uip tm testcases steps update \
  --project-key DEMO \
  --step-id d4e5f6a7-0000-0000-0000-000000000001 \
  --expected-result "Dashboard is shown"
Data shape
{
  "Code": "TestStepUpdate",
  "Data": {
    "StepId": "d4e5f6a7-0000-0000-0000-000000000001",
    "Result": "Updated"
  }
}
{
  "Code": "TestStepUpdate",
  "Data": {
    "StepId": "d4e5f6a7-0000-0000-0000-000000000001",
    "Result": "Updated"
  }
}

uip tm testcases steps move

Move a step to a new position in the test case order.

Arguments

None.

Options
FlagDescription
--project-key <key>Test Manager project key.
--step-id <uuid>Required. Test step UUID.
--target-position <n>Required. New 0-based position (0 = first). Matches the OrderNo field from steps list.
Example
uip tm testcases steps move \
  --project-key DEMO \
  --step-id d4e5f6a7-0000-0000-0000-000000000001 \
  --target-position 2
uip tm testcases steps move \
  --project-key DEMO \
  --step-id d4e5f6a7-0000-0000-0000-000000000001 \
  --target-position 2
Data shape
{
  "Code": "TestStepMove",
  "Data": {
    "StepId": "d4e5f6a7-0000-0000-0000-000000000001",
    "TargetPosition": 2,
    "Result": "Moved"
  }
}
{
  "Code": "TestStepMove",
  "Data": {
    "StepId": "d4e5f6a7-0000-0000-0000-000000000001",
    "TargetPosition": 2,
    "Result": "Moved"
  }
}

uip tm testcases steps delete

Delete a step from a test case. This is permanent.

Arguments

None.

Options
FlagDescription
--project-key <key>Test Manager project key.
--step-id <uuid>Required. Test step UUID.
-y, --yesRequired. Confirm this irreversible operation.
Example
uip tm testcases steps delete \
  --project-key DEMO \
  --step-id d4e5f6a7-0000-0000-0000-000000000001 \
  --yes
uip tm testcases steps delete \
  --project-key DEMO \
  --step-id d4e5f6a7-0000-0000-0000-000000000001 \
  --yes
Data shape
{
  "Code": "TestStepDelete",
  "Data": {
    "StepId": "d4e5f6a7-0000-0000-0000-000000000001",
    "Result": "Deleted"
  }
}
{
  "Code": "TestStepDelete",
  "Data": {
    "StepId": "d4e5f6a7-0000-0000-0000-000000000001",
    "Result": "Deleted"
  }
}

uip tm testcaselogs list-assertions

List the assertions recorded for a single test case log. Every run of a test case produces exactly one test case log; its assertions are the individual checks the automation recorded. This verb surfaces why a test case log is marked Failed.

This verb is registered under testcaselogs, not testcases, but is documented here because it reads assertion artifacts for a test case's log.

Arguments

None.

Options

FlagDescription
--test-case-log-id <uuid>Required. Test case log UUID. Get it from uip tm executions testcaselogs list or uip tm testcases list-result-history.
--project-key <key>Required. Owning project.

Example

uip tm testcaselogs list-assertions \
  --test-case-log-id a1b2c3d4-0000-0000-0000-000000000001 \
  --project-key DEMO
uip tm testcaselogs list-assertions \
  --test-case-log-id a1b2c3d4-0000-0000-0000-000000000001 \
  --project-key DEMO

Data shape

{
  "Code": "TestCaseLogAssertions",
  "Data": [
    { "Message": "Title contains 'Welcome'", "Succeeded": true },
    { "Message": "Button 'Login' visible", "Succeeded": false }
  ]
}
{
  "Code": "TestCaseLogAssertions",
  "Data": [
    { "Message": "Title contains 'Welcome'", "Succeeded": true },
    { "Message": "Button 'Login' visible", "Succeeded": false }
  ]
}

uip tm testcaselog start

Signal the start of a manual test case log entry for a specific test case within an execution.

Arguments

None.

Options

FlagDescription
--execution-id <uuid>Required. The execution in which the test case is running.
--test-case-id <uuid>Required. Internal UUID of the test case being logged.
--execution-type <type>Execution type for the log entry (for example, automated, manual). Optional.

Example

uip tm testcaselog start \
  --execution-id a1b2c3d4-0000-0000-0000-000000000001 \
  --test-case-id b2c3d4e5-0000-0000-0000-000000000001
uip tm testcaselog start \
  --execution-id a1b2c3d4-0000-0000-0000-000000000001 \
  --test-case-id b2c3d4e5-0000-0000-0000-000000000001

Data shape

{
  "Code": "TestCaseLogStart",
  "Data": {
    "TestCaseLogId": "c3d4e5f6-0000-0000-0000-000000000001",
    "Status": "InProgress"
  }
}
{
  "Code": "TestCaseLogStart",
  "Data": {
    "TestCaseLogId": "c3d4e5f6-0000-0000-0000-000000000001",
    "Status": "InProgress"
  }
}

uip tm testcaselog finish

Signal the end of a manually started test case log entry.

Arguments

None.

Options

FlagDescription
--test-case-log-id <uuid>Required. The log ID returned by testcaselog start.
--info <text>Optional error or informational message to attach to the log entry.

Example

uip tm testcaselog finish \
  --test-case-log-id c3d4e5f6-0000-0000-0000-000000000001 \
  --info "Login button not found on page"
uip tm testcaselog finish \
  --test-case-log-id c3d4e5f6-0000-0000-0000-000000000001 \
  --info "Login button not found on page"

Data shape

{
  "Code": "TestCaseLogFinish",
  "Data": {
    "TestCaseLogId": "c3d4e5f6-0000-0000-0000-000000000001",
    "Result": "Finished"
  }
}
{
  "Code": "TestCaseLogFinish",
  "Data": {
    "TestCaseLogId": "c3d4e5f6-0000-0000-0000-000000000001",
    "Result": "Finished"
  }
}
  • pack — packages a Playwright project and auto-links its test cases at ingestion time; do not use link-automation on the test cases it creates.
  • project — scope that owns every test case.
  • testsets — group test cases into a runnable suite.
  • executions — execution-level views of test case logs.
  • report — summary of a run, with failed cases and assertion text.

See also

Was this page helpful?

Connect

Need help? Support

Want to learn? UiPath Academy

Have questions? UiPath Forum

Stay updated