UiPath Documentation
uipath-cli
latest
false
UiPath CLI user guide

uip tm testcases

Syntax and options for `uip tm testcases`, which creates, bulk-creates, clones, lists, updates, deletes, and exports test cases, manages their steps and parameters, links automations, and assigns test cases to test sets.

uip tm testcases manages test cases within a Test Manager project: create them one at a time, in bulk from a file, or as a copy of another; get, list, update, delete, and export them; link or unlink an Orchestrator automation; inspect historical results and the test sets and requirements a test case is assigned to; and add test cases to or remove them from a test set, statically by key or dynamically by label. It also provides testcases run, which executes one or more test cases directly from an Orchestrator package, and the testcases steps and testcases parameters subgroups, which manage a test case's manual steps and parameters. The verbs that record and inspect test case logs, such as testcaselog start, testcaselog finish, and testcaselog list-assertions, are documented on the testcaselog page.

A test case is the unit of authorship. It becomes runnable once it is linked to a package entry point with testcases link-automation or testcases link-package. A test case can then be executed as part of a test set (refer to 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, no test cases exist yet: create them, then link each one with testcases link-automation, passing the displayed specPath > testTitle name as --test-name.

Synopsis​

uip tm testcases create <project> --name <name> [--description <text>] [--version <version>]
uip tm testcases bulk-create <project> --file <path> [--labels <labels...>] [--requirement-key <key>] [--skip-existing]
uip tm testcases clone <project> --test-case-key <key> --new-name <name> [--include <items...>]
uip tm testcases get <project> (--test-case-key <key> | --automation-id <uuid>)
uip tm testcases list <project> [--filter <text>] [--labels <labels...>] [--automated (--folder-path <path> | --folder-key <uuid>)]
uip tm testcases list-result-history <project> --test-case-id <uuid> [--filter <text>] [--only-failed] [--results <results...>] [--statuses <statuses...>] [--duration-period <period>] [--limit <number>] [--offset <number>]
uip tm testcases update <project> --test-case-key <key> [--name <name>] [--description <text>] [--pre-condition <text>] [--post-condition <text>]
uip tm testcases delete <project> --test-case-key <key> --yes
uip tm testcases export <project> [--test-case-ids <uuid...>] [--time-zone <iana-name>] [--wait --output-file <path> [--overwrite] [--timeout <seconds>] [--poll-interval <seconds>]]
uip tm testcases group-by <project> --field <name> [--sort-order <order>]
uip tm testcases link-automation <project> --test-case-key <key> --folder-key <uuid> --package-name <name> --test-name <name> [--entry-point-id <uuid>]
uip tm testcases link-package <project> --folder-key <uuid> [--package-name <name>] [--test-name <name...>] [--dry-run]
uip tm testcases unlink-automation <project> --test-case-key <key>
uip tm testcases list-automations <project> [--folder-key <uuid>] [--package-name <name>]
uip tm testcases list-packages <project> [--filter <prefix>] [--limit <number>] [--offset <number>]
uip tm testcases list-studio-projects <project> [--filter <prefix>] [--limit <number>] [--offset <number>]
uip tm testcases list-testsets <project> (--test-case-key <key> | --labels <labels...>) [--limit <number>] [--offset <number>]
uip tm testcases list-requirements <project> --test-case-key <key> [--limit <number>] [--offset <number>]
uip tm testcases run <project> --test-case-id <uuid...> --name <name> --execution-type <type> [--async] [--folder-key <key>] [--runtime-type <type>] [--robot-user-key <key>] [--machine-key <key>] [--host-machine-name <name>] [--service-user-name <name>] [--test-set-packages <json>]
uip tm testcases add --test-set-key <key> (--test-case-keys <keys...> | --labels <labels...> [--limit <count> | --dynamic])
uip tm testcases remove --test-set-key <key> (--test-case-keys <keys> | --dynamic [--labels <labels...>]) --yes

uip tm testcases steps list <project> --test-case-id <uuid>
uip tm testcases steps get <project> --step-id <uuid>
uip tm testcases steps add <project> --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> --step-id <uuid> [--description <text>] [--expected-result <text>] [--action-type <type>] [--clipboard-data <text>]
uip tm testcases steps move <project> --step-id <uuid> --target-position <n>
uip tm testcases steps delete <project> --step-id <uuid> --yes

uip tm testcases parameters list <project> (--test-case-id <uuid> | --test-case-key <key>) [--search <prefix>] [--sort-by <expression>] [--limit <number>] [--offset <number>]
uip tm testcases parameters get <project> (--test-case-id <uuid> | --test-case-key <key>) (--parameter-id <uuid> | --parameter-name <name>)
uip tm testcases parameters add <project> (--test-case-id <uuid> | --test-case-key <key>) --name <name> --default-value <value> [--hint <text>] [--type <type>]
uip tm testcases parameters update <project> (--test-case-id <uuid> | --test-case-key <key>) (--parameter-id <uuid> | --parameter-name <name>) [--new-name <name>] [--default-value <value>] [--hint <text>] [--type <type>]
uip tm testcases parameters delete <project> (--test-case-id <uuid> | --test-case-key <key>) --parameter-ids <uuid...> --yes
uip tm testcases create <project> --name <name> [--description <text>] [--version <version>]
uip tm testcases bulk-create <project> --file <path> [--labels <labels...>] [--requirement-key <key>] [--skip-existing]
uip tm testcases clone <project> --test-case-key <key> --new-name <name> [--include <items...>]
uip tm testcases get <project> (--test-case-key <key> | --automation-id <uuid>)
uip tm testcases list <project> [--filter <text>] [--labels <labels...>] [--automated (--folder-path <path> | --folder-key <uuid>)]
uip tm testcases list-result-history <project> --test-case-id <uuid> [--filter <text>] [--only-failed] [--results <results...>] [--statuses <statuses...>] [--duration-period <period>] [--limit <number>] [--offset <number>]
uip tm testcases update <project> --test-case-key <key> [--name <name>] [--description <text>] [--pre-condition <text>] [--post-condition <text>]
uip tm testcases delete <project> --test-case-key <key> --yes
uip tm testcases export <project> [--test-case-ids <uuid...>] [--time-zone <iana-name>] [--wait --output-file <path> [--overwrite] [--timeout <seconds>] [--poll-interval <seconds>]]
uip tm testcases group-by <project> --field <name> [--sort-order <order>]
uip tm testcases link-automation <project> --test-case-key <key> --folder-key <uuid> --package-name <name> --test-name <name> [--entry-point-id <uuid>]
uip tm testcases link-package <project> --folder-key <uuid> [--package-name <name>] [--test-name <name...>] [--dry-run]
uip tm testcases unlink-automation <project> --test-case-key <key>
uip tm testcases list-automations <project> [--folder-key <uuid>] [--package-name <name>]
uip tm testcases list-packages <project> [--filter <prefix>] [--limit <number>] [--offset <number>]
uip tm testcases list-studio-projects <project> [--filter <prefix>] [--limit <number>] [--offset <number>]
uip tm testcases list-testsets <project> (--test-case-key <key> | --labels <labels...>) [--limit <number>] [--offset <number>]
uip tm testcases list-requirements <project> --test-case-key <key> [--limit <number>] [--offset <number>]
uip tm testcases run <project> --test-case-id <uuid...> --name <name> --execution-type <type> [--async] [--folder-key <key>] [--runtime-type <type>] [--robot-user-key <key>] [--machine-key <key>] [--host-machine-name <name>] [--service-user-name <name>] [--test-set-packages <json>]
uip tm testcases add --test-set-key <key> (--test-case-keys <keys...> | --labels <labels...> [--limit <count> | --dynamic])
uip tm testcases remove --test-set-key <key> (--test-case-keys <keys> | --dynamic [--labels <labels...>]) --yes

uip tm testcases steps list <project> --test-case-id <uuid>
uip tm testcases steps get <project> --step-id <uuid>
uip tm testcases steps add <project> --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> --step-id <uuid> [--description <text>] [--expected-result <text>] [--action-type <type>] [--clipboard-data <text>]
uip tm testcases steps move <project> --step-id <uuid> --target-position <n>
uip tm testcases steps delete <project> --step-id <uuid> --yes

uip tm testcases parameters list <project> (--test-case-id <uuid> | --test-case-key <key>) [--search <prefix>] [--sort-by <expression>] [--limit <number>] [--offset <number>]
uip tm testcases parameters get <project> (--test-case-id <uuid> | --test-case-key <key>) (--parameter-id <uuid> | --parameter-name <name>)
uip tm testcases parameters add <project> (--test-case-id <uuid> | --test-case-key <key>) --name <name> --default-value <value> [--hint <text>] [--type <type>]
uip tm testcases parameters update <project> (--test-case-id <uuid> | --test-case-key <key>) (--parameter-id <uuid> | --parameter-name <name>) [--new-name <name>] [--default-value <value>] [--hint <text>] [--type <type>]
uip tm testcases parameters delete <project> (--test-case-id <uuid> | --test-case-key <key>) --parameter-ids <uuid...> --yes

In the synopsis, <project> stands for --project-key <key> or --project-id <id>. Pass one of them. When both are given, --project-id wins and --project-key is ignored. add and remove take no project option: they derive the project from the --test-set-key prefix (DEMO:42 → project DEMO).

All verbs honor the global options and the standard exit codes.

Note:

--log-level <level> (default Information) is available on every verb on this page except run, the steps subcommands, and the parameters subcommands.

uip tm testcases create​

Create a new test case inside a project.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--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 most other verbs. The internal Id (UUID) is what list-result-history, run, export, and the steps verbs take.

uip tm testcases bulk-create​

Create many test cases from a JSON file. The CLI validates the whole file before sending anything, then sends the test cases 100 per request. Each request is one transaction: it creates all of its test cases or none.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--file <path>Required. JSON file: an array of test cases, or an object with a testCases array. See the file format below.
--labels <labels...>Labels to put on every created test case, space-separated.
--requirement-key <key>Assign every created test case to this requirement (for example, DEMO:5).
--skip-existingSkip, per name, as many items as the project already has test cases with that exact name. Costs one search per name for up to 10 distinct names; above that, one read of every test case in the project.

File format​

Each item in the file is an object with these fields. Unknown fields are rejected.

FieldDescription
nameRequired. Test case name.
descriptionDescription text.
preConditionPrecondition text.
postConditionPostcondition text.
labelsArray of non-empty label names, up to 100.
stepsArray of manual steps. Each step has a required description and optional expectedResult and clipboardData (up to 8,000 characters).
propertiesObject mapping a custom field name to a string value. Each name must be an existing test case custom field in the project, and a label field's value must be one of its allowed values; otherwise the command fails before creating anything.
[
  {
    "name": "Login smoke",
    "description": "Logs in and out",
    "preCondition": "User account exists",
    "labels": ["Smoke"],
    "steps": [
      { "description": "Open login page", "expectedResult": "Login form is displayed" }
    ],
    "properties": { "Priority": "High" }
  },
  { "name": "Logout" }
]
[
  {
    "name": "Login smoke",
    "description": "Logs in and out",
    "preCondition": "User account exists",
    "labels": ["Smoke"],
    "steps": [
      { "description": "Open login page", "expectedResult": "Login form is displayed" }
    ],
    "properties": { "Priority": "High" }
  },
  { "name": "Logout" }
]

Example​

uip tm testcases bulk-create \
  --project-key DEMO \
  --file ./cases.json \
  --labels Imported \
  --skip-existing
uip tm testcases bulk-create \
  --project-key DEMO \
  --file ./cases.json \
  --labels Imported \
  --skip-existing

Data shape​

{
  "Code": "TestCaseBulkCreate",
  "Data": {
    "Requested": 3,
    "Created": 2,
    "KeysResolved": true,
    "Skipped": ["Login smoke"],
    "TestCases": [
      {
        "TestCaseKey": "DEMO:43",
        "Name": "Logout",
        "Id": "a1b2c3d4-0000-0000-0000-000000000043"
      },
      {
        "TestCaseKey": "DEMO:44",
        "Name": "Password reset",
        "Id": "a1b2c3d4-0000-0000-0000-000000000044"
      }
    ]
  }
}
{
  "Code": "TestCaseBulkCreate",
  "Data": {
    "Requested": 3,
    "Created": 2,
    "KeysResolved": true,
    "Skipped": ["Login smoke"],
    "TestCases": [
      {
        "TestCaseKey": "DEMO:43",
        "Name": "Logout",
        "Id": "a1b2c3d4-0000-0000-0000-000000000043"
      },
      {
        "TestCaseKey": "DEMO:44",
        "Name": "Password reset",
        "Id": "a1b2c3d4-0000-0000-0000-000000000044"
      }
    ]
  }
}

KeysResolved: false means every item was created but the keys could not be read back, so TestCases is empty while Created is not; the envelope's Instructions field says how to find them. If a request fails partway, the test cases from earlier requests remain, and the error message states how many were created. If the run used --skip-existing, re-run the same command. Otherwise follow the error's Instructions, which name the item to resume from; a plain re-run of the whole file creates duplicates.

uip tm testcases clone​

Queue a copy of a test case under a new name. The copy includes the description, version, pre- and post-conditions, custom field values, and manual steps. Labels, attachments, requirement assignments, parameters, and governance data are copied only when you name them in --include.

Test Manager makes the copy in the background and reports neither progress nor the new key, so the command returns Data.Result: "Accepted" as soon as the request is accepted. Find the copy with uip tm testcases list --project-key <key> --filter "<new name>". Each accepted request makes its own copy, so do not clone again to check.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-key <key>Required. Test case to copy (for example, DEMO:1).
--new-name <name>Required. Name for the copy.
--include <items...>Also copy these, space-separated: labels, documents (attachments), requirements (requirement assignments), parameters, governance (when the tenant has it enabled). None by default.

Example​

uip tm testcases clone \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --new-name "Login smoke (copy)" \
  --include labels requirements
uip tm testcases clone \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --new-name "Login smoke (copy)" \
  --include labels requirements

Data shape​

{
  "Code": "TestCaseClone",
  "Data": {
    "SourceTestCaseKey": "DEMO:1",
    "Name": "Login smoke (copy)",
    "Result": "Accepted"
  }
}
{
  "Code": "TestCaseClone",
  "Data": {
    "SourceTestCaseKey": "DEMO:1",
    "Name": "Login smoke (copy)",
    "Result": "Accepted"
  }
}

uip tm testcases get​

Get a single test case by its key, or by the automation linked to it. Pass exactly one of --test-case-key or --automation-id.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-key <key>Test case key (for example, DEMO:1).
--automation-id <uuid>ID of the linked automation: a PackageEntryPointId from list-automations, or a Studio automation ID. Returns one linked test case. If several test cases share the automation, which one comes back is not fixed. If no test case in the project is linked to it, the command fails with ErrorCode: "not_found".

Examples​

uip tm testcases get --project-key DEMO --test-case-key DEMO:1
uip tm testcases get --project-key DEMO --test-case-key DEMO:1
uip tm testcases get \
  --project-key DEMO \
  --automation-id 7a1b2c3d-0000-0000-0000-000000000abc
uip tm testcases get \
  --project-key DEMO \
  --automation-id 7a1b2c3d-0000-0000-0000-000000000abc

Data shape​

{
  "Code": "TestCaseGet",
  "Data": {
    "Id": "a1b2c3d4-0000-0000-0000-000000000001",
    "TestCaseKey": "DEMO:1",
    "Name": "Login smoke",
    "Version": "1.0.0",
    "Description": "Logs in and out",
    "FeedId": "f1e2d3c4-0000-0000-0000-000000000001",
    "IsAutomated": true,
    "PackageName": "InvoiceTests",
    "PackageEntryPoint": "SmokeTest",
    "PreCondition": "User account exists",
    "PostCondition": "User is logged out",
    "AutomationId": "",
    "AutomationProjectName": "",
    "PackageEntryPointId": "7a1b2c3d-0000-0000-0000-000000000abc",
    "PackageVersion": "1.0.2",
    "HasLinkedAutomation": true,
    "Created": "2026-09-28T10:12:44.000Z",
    "Updated": "2026-09-28T10:12:44.000Z"
  }
}
{
  "Code": "TestCaseGet",
  "Data": {
    "Id": "a1b2c3d4-0000-0000-0000-000000000001",
    "TestCaseKey": "DEMO:1",
    "Name": "Login smoke",
    "Version": "1.0.0",
    "Description": "Logs in and out",
    "FeedId": "f1e2d3c4-0000-0000-0000-000000000001",
    "IsAutomated": true,
    "PackageName": "InvoiceTests",
    "PackageEntryPoint": "SmokeTest",
    "PreCondition": "User account exists",
    "PostCondition": "User is logged out",
    "AutomationId": "",
    "AutomationProjectName": "",
    "PackageEntryPointId": "7a1b2c3d-0000-0000-0000-000000000abc",
    "PackageVersion": "1.0.2",
    "HasLinkedAutomation": true,
    "Created": "2026-09-28T10:12:44.000Z",
    "Updated": "2026-09-28T10:12:44.000Z"
  }
}

uip tm testcases list​

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

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--filter <text>Filter by name or key (server-side search). Combine with --labels to narrow the label matches by name or key.
--labels <labels...>Only test cases carrying at least one of these labels, space-separated, up to 100. Not combinable with --automated.
--automatedOnly automated test cases whose package lives in one Orchestrator folder. Requires exactly one of --folder-path or --folder-key. Test cases linked to a Playwright package are left out. Not combinable with --labels.
--folder-path <path>Orchestrator folder path, for example Shared or Finance/AP. Only with --automated; mutually exclusive with --folder-key.
--folder-key <uuid>Orchestrator folder key (from uip or folders list). Only with --automated; mutually exclusive with --folder-path.

Examples​

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

# Name the project by ID; the key lookup is skipped
uip tm testcases list --project-id 9dfdc3ca-fc75-0100-2aae-0b46e318b723
uip tm testcases list --project-key DEMO --filter login

# Name the project by ID; the key lookup is skipped
uip tm testcases list --project-id 9dfdc3ca-fc75-0100-2aae-0b46e318b723
# test cases carrying either label
uip tm testcases list --project-key DEMO --labels Smoke Regression

# automated test cases whose package lives in the Shared folder
uip tm testcases list --project-key DEMO --automated --folder-path Shared
# test cases carrying either label
uip tm testcases list --project-key DEMO --labels Smoke Regression

# automated test cases whose package lives in the Shared folder
uip tm testcases list --project-key DEMO --automated --folder-path Shared

Data shape​

{
  "Code": "TestCasesList",
  "Data": [
    {
      "Id": "a1b2c3d4-0000-0000-0000-000000000001",
      "TestCaseKey": "DEMO:1",
      "Name": "Login smoke",
      "Version": "1.0.0",
      "Description": "Logs in and out",
      "FeedId": "f1e2d3c4-0000-0000-0000-000000000001",
      "IsAutomated": false,
      "PackageName": "",
      "PackageEntryPoint": ""
    }
  ]
}
{
  "Code": "TestCasesList",
  "Data": [
    {
      "Id": "a1b2c3d4-0000-0000-0000-000000000001",
      "TestCaseKey": "DEMO:1",
      "Name": "Login smoke",
      "Version": "1.0.0",
      "Description": "Logs in and out",
      "FeedId": "f1e2d3c4-0000-0000-0000-000000000001",
      "IsAutomated": false,
      "PackageName": "",
      "PackageEntryPoint": ""
    }
  ]
}

PackageName and PackageEntryPoint show the package and entry point linked to the test case, as the Test Manager UI shows them. Both are empty strings when no package is linked.

With --automated, every row has IsAutomated: true and rows are sorted by name.

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>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-id <uuid>Required. Internal test case UUID.
--filter <text>Search test case logs by name.
--only-failedShow only failed test case logs. Default: false.
--results <results...>Space-separated results to include: None, Passed, Failed, Restricted.
--statuses <statuses...>Space-separated execution statuses to include: pending, running, cancelling, cancelled, finished, failed.
--duration-period <period>Filter by duration period: last7Days, last15Days, last30Days, last90Days, last180Days, last365Days.
--limit <number>Number of results per page. Default: 50.
--offset <number>Number of results to skip. Default: 0.

--top and --skip still work as deprecated aliases of --limit and --offset, and print a deprecation warning.

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, pre-condition, or post-condition. At least one of these fields is required.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-key <key>Required. Test case key (for example, DEMO:1).
--name <name>New name.
--description <text>New description.
--pre-condition <text>New precondition — what must be true before running the test.
--post-condition <text>New postcondition — what should be true after running the test.

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)",
    "Description": "Logs in and out",
    "PreCondition": "User account exists",
    "PostCondition": "User is logged out",
    "Result": "Updated"
  }
}
{
  "Code": "TestCaseUpdate",
  "Data": {
    "TestCaseKey": "DEMO:1",
    "Name": "Login smoke (2026)",
    "Description": "Logs in and out",
    "PreCondition": "User account exists",
    "PostCondition": "User is logged out",
    "Result": "Updated"
  }
}

uip tm testcases delete​

Delete a test case by its key.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-key <key>Required. Test case key (for example, DEMO:1).
-y, --yesRequired. Confirms the irreversible deletion. The CLI never prompts; without --yes, the command fails with Result: "Failure" and exit code 1.

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"
  }
}

uip tm testcases export​

Export test cases to an .xlsx file. Test Manager builds the file as a background job. Without --wait, the command returns the job; check it with uip tm export-jobs get, and once Status is Completed, download the file with uip tm attachment download. The envelope's Instructions field gives both commands for the job. With --wait, the command waits for the job and writes the file to --output-file.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-ids <uuid...>Test case UUIDs to export, space-separated. Omit to export every test case in the project.
--time-zone <iana-name>IANA time zone for the timestamps written into the file, for example Europe/Bucharest. Defaults to UTC. An unknown zone name is refused before the export starts.
--waitWait until the export finishes and write the file to --output-file.
--output-file <path>Where to write the .xlsx file. Required with --wait.
--overwriteReplace --output-file if it already exists. Without it, an existing file is refused before the export starts.
--timeout <seconds>Maximum seconds to wait (0 = no timeout). Requires --wait. Defaults to 600.
--poll-interval <seconds>Seconds between status checks. Requires --wait. Defaults to 5.

Without --wait, --output-file, --overwrite, --timeout, and --poll-interval have no effect, and the command logs a warning.

Examples​

# start the export and get the job back
uip tm testcases export --project-key DEMO
# start the export and get the job back
uip tm testcases export --project-key DEMO
# export two test cases, wait for the file, and write it to disk
uip tm testcases export \
  --project-key DEMO \
  --test-case-ids a1b2c3d4-0000-0000-0000-000000000011 a1b2c3d4-0000-0000-0000-000000000012 \
  --wait \
  --output-file ./testcases.xlsx
# export two test cases, wait for the file, and write it to disk
uip tm testcases export \
  --project-key DEMO \
  --test-case-ids a1b2c3d4-0000-0000-0000-000000000011 a1b2c3d4-0000-0000-0000-000000000012 \
  --wait \
  --output-file ./testcases.xlsx

Data shape​

Without --wait:

{
  "Code": "TestCasesExport",
  "Data": {
    "Id": "a1b2c3d4-0000-0000-0000-000000000001",
    "Status": "Initiated",
    "TaskType": "TestCasesExcelExport",
    "AttachmentId": null,
    "Created": "2026-10-14T10:00:00.000Z",
    "CreatedBy": "c3d4e5f6-0000-0000-0000-000000000003",
    "Updated": "2026-10-14T10:00:00.000Z",
    "UpdatedBy": "c3d4e5f6-0000-0000-0000-000000000003",
    "Payload": { "Ids": [], "TimeZoneId": "UTC" }
  }
}
{
  "Code": "TestCasesExport",
  "Data": {
    "Id": "a1b2c3d4-0000-0000-0000-000000000001",
    "Status": "Initiated",
    "TaskType": "TestCasesExcelExport",
    "AttachmentId": null,
    "Created": "2026-10-14T10:00:00.000Z",
    "CreatedBy": "c3d4e5f6-0000-0000-0000-000000000003",
    "Updated": "2026-10-14T10:00:00.000Z",
    "UpdatedBy": "c3d4e5f6-0000-0000-0000-000000000003",
    "Payload": { "Ids": [], "TimeZoneId": "UTC" }
  }
}

With --wait:

{
  "Code": "TestCasesExport",
  "Data": {
    "Id": "a1b2c3d4-0000-0000-0000-000000000001",
    "Status": "Completed",
    "AttachmentId": "b2c3d4e5-0000-0000-0000-000000000002",
    "OutputFile": "./testcases.xlsx",
    "FileType": "xlsx",
    "Bytes": 9472
  }
}
{
  "Code": "TestCasesExport",
  "Data": {
    "Id": "a1b2c3d4-0000-0000-0000-000000000001",
    "Status": "Completed",
    "AttachmentId": "b2c3d4e5-0000-0000-0000-000000000002",
    "OutputFile": "./testcases.xlsx",
    "FileType": "xlsx",
    "Bytes": 9472
  }
}

Id is the export job ID. AttachmentId is null until the job completes.

uip tm testcases group-by​

Count the project's test cases per value of a custom label field, such as Priority. Requires a Test Cloud license. Test cases with no value for the field are counted under Value: null.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--field <name>Required. Name of the custom label field to group by, matched without case. If no test case label field has that name, the command fails with ErrorCode: "not_found"; list the fields you can group by with uip tm customfield list --project-key <key> --object-types TestCase --data-types Label.
--sort-order <order>Sort the values: asc or desc. Defaults to asc.

Example​

uip tm testcases group-by --project-key DEMO --field Priority
uip tm testcases group-by --project-key DEMO --field Priority

Data shape​

{
  "Code": "TestCaseGroupBy",
  "Data": [
    { "Value": "High", "Count": 8 },
    { "Value": "Low", "Count": 3 },
    { "Value": null, "Count": 2 }
  ]
}
{
  "Code": "TestCaseGroupBy",
  "Data": [
    { "Value": "High", "Count": 8 },
    { "Value": "Low", "Count": 3 },
    { "Value": null, "Count": 2 }
  ]
}

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

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-key <key>Required. Test case to bind.
--folder-key <uuid>Required. Orchestrator folder UUID (from uip or folders list). A value that isn't a UUID fails with ErrorCode: "invalid_argument".
--package-name <name>Required. Orchestrator package identifier (for example, InvoiceTests).
--test-name <name>Required. The test name inside the package. For UiPath packages, the test name (for example, SmokeTest). For Playwright packages, the displayed specPath > testTitle name (for example, "tests/login.spec.ts > Signs in"). Ignored when --entry-point-id is given, but still required.
--entry-point-id <uuid>Package entry-point ID, the PackageEntryPointId from list-automations. Binds directly by ID and ignores --test-name. Use it when the name is too long to type and list-automations shows it truncated with ….

A --test-name value that contains … is a truncated name and can't be matched; without --entry-point-id, the command fails and asks for the ID.

Examples​

# Link a UiPath test
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

# Link a Playwright test by its displayed 'specPath > testTitle' name
uip tm testcases link-automation \
  --project-key DEMO \
  --test-case-key DEMO:2 \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name PwTests \
  --test-name "tests/login.spec.ts > Signs in"

# Link by entry-point ID when the name shows truncated in list-automations
uip tm testcases link-automation \
  --project-key DEMO \
  --test-case-key DEMO:3 \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name PwTests \
  --test-name "tests/checkout.spec.ts > …" \
  --entry-point-id 7a1b2c3d-0000-0000-0000-000000000abc
# Link a UiPath test
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

# Link a Playwright test by its displayed 'specPath > testTitle' name
uip tm testcases link-automation \
  --project-key DEMO \
  --test-case-key DEMO:2 \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name PwTests \
  --test-name "tests/login.spec.ts > Signs in"

# Link by entry-point ID when the name shows truncated in list-automations
uip tm testcases link-automation \
  --project-key DEMO \
  --test-case-key DEMO:3 \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name PwTests \
  --test-name "tests/checkout.spec.ts > …" \
  --entry-point-id 7a1b2c3d-0000-0000-0000-000000000abc

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"
  }
}

TestName is the full name of the entry point that was bound, also when you bind by --entry-point-id.

Create and link a test case for every test in an Orchestrator package, in one call — the bulk counterpart to link-automation, which links one existing test case to one automation. By default it links every test the folder exposes; scope it to one package with --package-name, or to specific tests with --test-name. Each test either creates a new test case (Action: "Created") or reuses an existing test case with the same name, matched without case, and links it (Action: "Reused").

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--folder-key <uuid>Required. Orchestrator folder UUID (from uip or folders list).
--package-name <name>Only link tests from this package (case-insensitive exact match). Omit to link every test the folder exposes.
--test-name <name...>Only link these tests, space-separated (case-insensitive). Omit to link all of them.
--dry-runPreview which test cases would be created, reused, and linked, without writing anything.

Examples​

# Create and link a test case for every test in one Orchestrator package
uip tm testcases link-package \
  --project-key DEMO \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name InvoiceTests
# Create and link a test case for every test in one Orchestrator package
uip tm testcases link-package \
  --project-key DEMO \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name InvoiceTests
# Preview what would be created and linked, without writing
uip tm testcases link-package \
  --project-key DEMO \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name InvoiceTests \
  --dry-run
# Preview what would be created and linked, without writing
uip tm testcases link-package \
  --project-key DEMO \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name InvoiceTests \
  --dry-run
# Link only two named tests out of the package
uip tm testcases link-package \
  --project-key DEMO \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name InvoiceTests \
  --test-name SmokeTest RegressionTest
# Link only two named tests out of the package
uip tm testcases link-package \
  --project-key DEMO \
  --folder-key f0f0f0f0-0000-0000-0000-000000000001 \
  --package-name InvoiceTests \
  --test-name SmokeTest RegressionTest

Data shape​

{
  "Code": "TestCaseLinkPackage",
  "Data": [
    {
      "TestName": "SmokeTest",
      "PackageName": "InvoiceTests",
      "PackageVersion": "1.0.2",
      "TestCaseKey": "DEMO:7",
      "TestCaseId": "a1b2c3d4-0000-0000-0000-000000000007",
      "Action": "Created"
    },
    {
      "TestName": "RegressionTest",
      "PackageName": "InvoiceTests",
      "PackageVersion": "1.0.2",
      "TestCaseKey": "DEMO:3",
      "TestCaseId": "a1b2c3d4-0000-0000-0000-000000000003",
      "Action": "Reused"
    }
  ]
}
{
  "Code": "TestCaseLinkPackage",
  "Data": [
    {
      "TestName": "SmokeTest",
      "PackageName": "InvoiceTests",
      "PackageVersion": "1.0.2",
      "TestCaseKey": "DEMO:7",
      "TestCaseId": "a1b2c3d4-0000-0000-0000-000000000007",
      "Action": "Created"
    },
    {
      "TestName": "RegressionTest",
      "PackageName": "InvoiceTests",
      "PackageVersion": "1.0.2",
      "TestCaseKey": "DEMO:3",
      "TestCaseId": "a1b2c3d4-0000-0000-0000-000000000003",
      "Action": "Reused"
    }
  ]
}

With --dry-run, the Code is TestCaseLinkPackageDryRun instead, Action values become WouldCreate/WouldReuse, and TestCaseKey/TestCaseId are empty on WouldCreate rows and name the existing test case on WouldReuse rows.

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>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--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 and --test-name values to pass to link-automation, or the PackageEntryPointId to pass as --entry-point-id. link-package acts on the same set of entry points.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--folder-key <uuid>Orchestrator folder UUID. Omit to search across the tenant feed instead of one folder.
--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",
      "PackageEntryPointId": "7a1b2c3d-0000-0000-0000-000000000abc"
    }
  ]
}
{
  "Code": "TestAutomationsList",
  "Data": [
    {
      "PackageName": "InvoiceTests",
      "TestName": "SmokeTest",
      "PackageVersion": "1.0.2",
      "PackageEntryPointId": "7a1b2c3d-0000-0000-0000-000000000abc"
    }
  ]
}

uip tm testcases list-packages​

List the distinct Orchestrator package names that the project's automated test cases are linked to. Names are sorted, and --limit / --offset page through the sorted list.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--filter <prefix>Only names starting with this text (a prefix match, not a substring).
--limit <number>Number of names to return. Defaults to 50.
--offset <number>Number of names to skip. Defaults to 0.

Example​

uip tm testcases list-packages --project-key DEMO --filter Invoice
uip tm testcases list-packages --project-key DEMO --filter Invoice

Data shape​

{
  "Code": "TestCasePackagesList",
  "Data": [
    { "PackageName": "InvoiceTests" }
  ],
  "Pagination": {
    "Returned": 1,
    "Limit": 50,
    "Offset": 0,
    "Total": 1,
    "HasMore": false
  }
}
{
  "Code": "TestCasePackagesList",
  "Data": [
    { "PackageName": "InvoiceTests" }
  ],
  "Pagination": {
    "Returned": 1,
    "Limit": 50,
    "Offset": 0,
    "Total": 1,
    "HasMore": false
  }
}

When HasMore is true, the envelope's Instructions field gives the --offset for the next page.

uip tm testcases list-studio-projects​

List the distinct Studio project names that the project's automated test cases come from. Names are sorted, and --limit / --offset page through the sorted list.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--filter <prefix>Only names starting with this text (a prefix match, not a substring).
--limit <number>Number of names to return. Defaults to 50.
--offset <number>Number of names to skip. Defaults to 0.

Example​

uip tm testcases list-studio-projects --project-key DEMO
uip tm testcases list-studio-projects --project-key DEMO

Data shape​

{
  "Code": "TestCaseStudioProjectsList",
  "Data": [
    { "StudioProjectName": "Acme.CheckoutTests" },
    { "StudioProjectName": "Acme.LoginTests" }
  ],
  "Pagination": {
    "Returned": 2,
    "Limit": 50,
    "Offset": 0,
    "Total": 2,
    "HasMore": false
  }
}
{
  "Code": "TestCaseStudioProjectsList",
  "Data": [
    { "StudioProjectName": "Acme.CheckoutTests" },
    { "StudioProjectName": "Acme.LoginTests" }
  ],
  "Pagination": {
    "Returned": 2,
    "Limit": 50,
    "Offset": 0,
    "Total": 2,
    "HasMore": false
  }
}

uip tm testcases list-testsets​

List the test sets that explicitly assign a given test case, or that explicitly assign any test case carrying one of the given labels. Pass exactly one of --test-case-key or --labels. Test sets that include a test case only through dynamic assignment are not listed.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-key <key>Test case key (for example, DEMO:1).
--labels <labels...>Label names, space-separated, up to 100. Returns every test set that explicitly assigns a test case with at least one of them.
--limit <number>Number of results to return. Defaults to 50.
--offset <number>Number of results to skip. Defaults to 0.

Examples​

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
uip tm testcases list-testsets \
  --project-key DEMO \
  --labels "Smoke Test" Regression
uip tm testcases list-testsets \
  --project-key DEMO \
  --labels "Smoke Test" Regression

Data shape​

{
  "Code": "TestCaseTestSetsList",
  "Data": [
    {
      "TestSetKey": "DEMO:10",
      "Name": "Smoke Suite",
      "FolderKey": "f0f0f0f0-0000-0000-0000-000000000001",
      "Id": "a1b2c3d4-0000-0000-0000-000000000010"
    }
  ],
  "Pagination": {
    "Returned": 1,
    "Limit": 50,
    "Offset": 0,
    "Total": 1,
    "HasMore": false
  }
}
{
  "Code": "TestCaseTestSetsList",
  "Data": [
    {
      "TestSetKey": "DEMO:10",
      "Name": "Smoke Suite",
      "FolderKey": "f0f0f0f0-0000-0000-0000-000000000001",
      "Id": "a1b2c3d4-0000-0000-0000-000000000010"
    }
  ],
  "Pagination": {
    "Returned": 1,
    "Limit": 50,
    "Offset": 0,
    "Total": 1,
    "HasMore": false
  }
}

uip tm testcases list-requirements​

List the requirements assigned to a test case. Rows have the same shape as requirements list.

Arguments​

None.

Options​

FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-key <key>Required. Test case key (for example, DEMO:1).
--limit <number>Number of results to return. Defaults to 50.
--offset <number>Number of results to skip. Defaults to 0.

Example​

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

Data shape​

{
  "Code": "TestCaseRequirementsList",
  "Data": [
    {
      "Id": "a1b2c3d4-0000-0000-0000-000000000005",
      "ObjKey": "DEMO:5",
      "Name": "User can sign in",
      "Description": "Sign-in works with a valid account",
      "ProjectId": "00000000-0000-0000-0000-000000000abc",
      "Created": "2026-09-28T10:12:44.000Z",
      "CreatedBy": "c3d4e5f6-0000-0000-0000-000000000003",
      "Updated": "2026-09-28T10:12:44.000Z",
      "UpdatedBy": "c3d4e5f6-0000-0000-0000-000000000003"
    }
  ],
  "Pagination": {
    "Returned": 1,
    "Limit": 50,
    "Offset": 0,
    "Total": 1,
    "HasMore": false
  }
}
{
  "Code": "TestCaseRequirementsList",
  "Data": [
    {
      "Id": "a1b2c3d4-0000-0000-0000-000000000005",
      "ObjKey": "DEMO:5",
      "Name": "User can sign in",
      "Description": "Sign-in works with a valid account",
      "ProjectId": "00000000-0000-0000-0000-000000000abc",
      "Created": "2026-09-28T10:12:44.000Z",
      "CreatedBy": "c3d4e5f6-0000-0000-0000-000000000003",
      "Updated": "2026-09-28T10:12:44.000Z",
      "UpdatedBy": "c3d4e5f6-0000-0000-0000-000000000003"
    }
  ],
  "Pagination": {
    "Returned": 1,
    "Limit": 50,
    "Offset": 0,
    "Total": 1,
    "HasMore": false
  }
}

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, refer to 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). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--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: manual, automated, none, mixed, or autonomous.
--name <name>Required. Test set name for the new 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 <key>Orchestrator folder key to run the execution in.
--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 <key>Robot user key for the execution target.
--machine-key <key>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 900
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 900
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": "TestManager",
    "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": "TestManager",
    "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.

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 seconds — 15 minutes here)
uip tm wait \
  --execution-id "$id" \
  --project-key DEMO \
  --timeout 900

# 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 seconds — 15 minutes here)
uip tm wait \
  --execution-id "$id" \
  --project-key DEMO \
  --timeout 900

# 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 test cases to an existing test set, either by explicit keys or by label. Pass exactly one of --test-case-keys or --labels.

Assignment is static by default: --test-case-keys, or --labels without --dynamic, links the matching test cases to the test set once, and test cases labeled later are not added. With --labels --dynamic, the labels are stored on the test set instead, so every test case carrying one of them, now or later, is part of the test set and every run includes it. Show a test set's current dynamic labels with uip tm testsets get-dynamic-assignment.

Arguments​

None.

Options​

FlagDescription
--test-set-key <key>Required. Test set object key (for example, DEMO:42). The project is derived from the prefix.
--test-case-keys <keys...>Test case keys to add, space-separated (for example, DEMO:1 DEMO:2). Comma-separated values are also accepted. Mutually exclusive with --labels.
--labels <labels...>Space-separated label names (quote names that contain spaces). Label matching is exact and case-sensitive. Adds every test case in the project carrying at least one of the labels — including the PW_Tag_*, PW_Project_*, PW_Suite_*, and PW_File_* labels applied by pack at ingestion. Without --dynamic, copies the current matches into the test set once. Mutually exclusive with --test-case-keys.
--dynamicWith --labels, assign test cases dynamically: store the labels on the test set, merged with labels already set (at most 30 in total). Not allowed on test sets linked from an external source. The merge reads and then replaces the label list, so do not run it concurrently on the same test set.
--limit <count>Maximum number of label-matched test cases to add. Only valid with --labels and not with --dynamic. Defaults to all matches.

Examples​

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

# add every test case carrying one of the given labels
uip tm testcases add \
  --test-set-key DEMO:42 \
  --labels PW_Tag_smoke PW_Project_chromium

# assign every test case labeled smoke, including ones labeled later
uip tm testcases add \
  --test-set-key DEMO:42 \
  --labels smoke \
  --dynamic
# add by explicit keys
uip tm testcases add \
  --test-set-key DEMO:42 \
  --test-case-keys DEMO:1 DEMO:2

# add every test case carrying one of the given labels
uip tm testcases add \
  --test-set-key DEMO:42 \
  --labels PW_Tag_smoke PW_Project_chromium

# assign every test case labeled smoke, including ones labeled later
uip tm testcases add \
  --test-set-key DEMO:42 \
  --labels smoke \
  --dynamic

Data shape​

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

When adding by --labels, the response also includes MatchedLabels:

{
  "Code": "TestSetAddTestCases",
  "Data": {
    "TestSetKey": "DEMO:42",
    "Added": "DEMO:3, DEMO:4, DEMO:7",
    "MatchedLabels": "PW_Tag_smoke, PW_Project_chromium",
    "Result": "Added"
  }
}
{
  "Code": "TestSetAddTestCases",
  "Data": {
    "TestSetKey": "DEMO:42",
    "Added": "DEMO:3, DEMO:4, DEMO:7",
    "MatchedLabels": "PW_Tag_smoke, PW_Project_chromium",
    "Result": "Added"
  }
}

With --dynamic, the Code is TestSetAddTestCasesDynamic:

{
  "Code": "TestSetAddTestCasesDynamic",
  "Data": {
    "TestSetKey": "DEMO:42",
    "DynamicLabels": ["regression", "smoke"],
    "MatchedTestCases": 14,
    "Result": "Added"
  }
}
{
  "Code": "TestSetAddTestCasesDynamic",
  "Data": {
    "TestSetKey": "DEMO:42",
    "DynamicLabels": ["regression", "smoke"],
    "MatchedTestCases": 14,
    "Result": "Added"
  }
}

DynamicLabels is the full label list after the merge, and MatchedTestCases counts the test cases those labels match right now. If the labels were saved but the count failed, MatchedTestCases is null and the envelope carries a Warning.

uip tm testcases remove​

Remove test cases from a test set. Pass exactly one of --test-case-keys, which removes statically assigned test cases, or --dynamic, which stops dynamic assignment by some or all labels. Removing a key has no effect on a test case that is in the test set only through a dynamic label.

Arguments​

None.

Options​

FlagDescription
--test-set-key <key>Required. Test set object key (for example, DEMO:42). The project is derived from the prefix.
--test-case-keys <keys>Comma-separated test case keys to remove (for example, DEMO:1,DEMO:2). Mutually exclusive with --dynamic.
--dynamicStop assigning test cases dynamically: remove the labels given with --labels from the test set's dynamic assignment, or all of them when --labels is omitted. Static assignments stay. The command reads and then replaces the label list, so do not run it concurrently on the same test set.
--labels <labels...>Dynamic-assignment labels to remove, space-separated, matched without case. Only valid with --dynamic.
-y, --yesRequired. Confirms the removal. The CLI never prompts; without --yes, the command fails with Result: "Failure" and exit code 1.

Examples​

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

# stop assigning test cases dynamically by the smoke label
uip tm testcases remove \
  --test-set-key DEMO:42 \
  --dynamic \
  --labels smoke \
  --yes
# remove statically assigned test cases
uip tm testcases remove \
  --test-set-key DEMO:42 \
  --test-case-keys DEMO:1,DEMO:2 \
  --yes

# stop assigning test cases dynamically by the smoke label
uip tm testcases remove \
  --test-set-key DEMO:42 \
  --dynamic \
  --labels smoke \
  --yes

Data shape​

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

With --dynamic, the Code is TestSetRemoveTestCasesDynamic:

{
  "Code": "TestSetRemoveTestCasesDynamic",
  "Data": {
    "TestSetKey": "DEMO:42",
    "DynamicLabels": ["regression"],
    "Result": "Removed",
    "NotFound": []
  }
}
{
  "Code": "TestSetRemoveTestCasesDynamic",
  "Data": {
    "TestSetKey": "DEMO:42",
    "DynamicLabels": ["regression"],
    "Result": "Removed",
    "NotFound": []
  }
}

DynamicLabels is the label list that remains. NotFound lists the --labels values that were not set on the test set, and appears only when you pass --labels. Result is one of:

ResultMeaning
RemovedSome labels were removed and others remain.
ClearedNo dynamic-assignment labels remain.
UnchangedNone of the --labels values were set on the test set.
NotSetThe test set has no dynamic assignment.

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.

uip tm testcases list-steps still runs as a hidden alias of this verb for older scripts; steps list is the documented form.

Arguments​

None.

Options​
FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--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",
      "TestCaseId": "a1b2c3d4-0000-0000-0000-000000000001",
      "OrderNo": 0,
      "ActionType": "Manual",
      "Description": "Open login page",
      "ExpectedResult": "Login form is displayed",
      "ClipboardData": ""
    }
  ]
}
{
  "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",
      "ClipboardData": ""
    }
  ]
}

Steps are listed in OrderNo order.

uip tm testcases steps get​

Get a single step by its UUID.

Arguments​

None.

Options​
FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--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",
    "TestCaseId": "a1b2c3d4-0000-0000-0000-000000000001",
    "OrderNo": 0,
    "ActionType": "Manual",
    "Description": "Open login page",
    "ExpectedResult": "Login form is displayed",
    "ClipboardData": ""
  }
}
{
  "Code": "TestStepGet",
  "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",
    "ClipboardData": ""
  }
}

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 (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-id <uuid>Required. Test case to add steps to.
--description <text>Step description. Required in 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 with a required description and optional expectedResult, actionType, clipboardData, and orderNo. Pass several, space-separated or by repeating --step, to add multiple steps in order. Use either the step flags or --step, not both.
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": {
    "AddedCount": 1,
    "Steps": [
      {
        "Id": "d4e5f6a7-0000-0000-0000-000000000001",
        "TestCaseId": "a1b2c3d4-0000-0000-0000-000000000001",
        "OrderNo": 0,
        "ActionType": "",
        "Description": "Open login page",
        "ExpectedResult": "Login form is displayed",
        "ClipboardData": ""
      }
    ]
  }
}
{
  "Code": "TestStepAdd",
  "Data": {
    "AddedCount": 1,
    "Steps": [
      {
        "Id": "d4e5f6a7-0000-0000-0000-000000000001",
        "TestCaseId": "a1b2c3d4-0000-0000-0000-000000000001",
        "OrderNo": 0,
        "ActionType": "",
        "Description": "Open login page",
        "ExpectedResult": "Login form is displayed",
        "ClipboardData": ""
      }
    ]
  }
}

Adding steps is not atomic: if one step in a multi-step --step batch fails, the steps before it remain created. The error message reports how many succeeded so you can inspect with steps list and retry only the remainder.

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. Fields you don't pass keep their values. To change a step's position, use steps move.

Arguments​

None.

Options​
FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--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 (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--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 (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--step-id <uuid>Required. Test step UUID.
-y, --yesRequired. Confirms the irreversible deletion. The CLI never prompts; without --yes, the command fails with Result: "Failure" and exit code 1.
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 testcases parameters​

testcases parameters is a subgroup that manages the parameters of a test case: list, get, add, update, and delete. Every verb identifies the test case by exactly one of --test-case-id or --test-case-key. Parameter names are unique per test case and compared without case; adding or renaming to a name that is already taken fails.

uip tm testcases parameters list​

List the parameters of a test case.

Arguments​

None.

Options​
FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-id <uuid>Test case UUID. Mutually exclusive with --test-case-key.
--test-case-key <key>Test case key (for example, DEMO:1). Mutually exclusive with --test-case-id.
--search <prefix>Only parameters whose name starts with this prefix.
--sort-by <expression>Sort expression, for example "name asc".
--limit <number>Number of results per page. Defaults to 50.
--offset <number>Number of results to skip. Defaults to 0.
Example​
uip tm testcases parameters list \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --sort-by "name asc"
uip tm testcases parameters list \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --sort-by "name asc"
Data shape​
{
  "Code": "TestCaseParametersList",
  "Data": [
    {
      "Id": "a1b2c3d4-0000-0000-0000-000000000101",
      "Name": "Username",
      "DefaultValue": "admin",
      "Hint": "User name for the test account",
      "Type": "Text",
      "ObjectId": "a1b2c3d4-0000-0000-0000-000000000001",
      "ObjectType": "testCase",
      "ProjectId": "00000000-0000-0000-0000-000000000abc",
      "Created": "2025-04-15T10:30:00Z",
      "CreatedBy": "c3d4e5f6-0000-0000-0000-000000000003",
      "Updated": "2025-04-15T10:30:00Z",
      "UpdatedBy": "c3d4e5f6-0000-0000-0000-000000000003"
    }
  ]
}
{
  "Code": "TestCaseParametersList",
  "Data": [
    {
      "Id": "a1b2c3d4-0000-0000-0000-000000000101",
      "Name": "Username",
      "DefaultValue": "admin",
      "Hint": "User name for the test account",
      "Type": "Text",
      "ObjectId": "a1b2c3d4-0000-0000-0000-000000000001",
      "ObjectType": "testCase",
      "ProjectId": "00000000-0000-0000-0000-000000000abc",
      "Created": "2025-04-15T10:30:00Z",
      "CreatedBy": "c3d4e5f6-0000-0000-0000-000000000003",
      "Updated": "2025-04-15T10:30:00Z",
      "UpdatedBy": "c3d4e5f6-0000-0000-0000-000000000003"
    }
  ]
}

uip tm testcases parameters get​

Get one parameter of a test case, by ID or by name. Pass exactly one of --parameter-id or --parameter-name. If the test case has no such parameter, the command fails with ErrorCode: "not_found".

Arguments​

None.

Options​
FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-id <uuid>Test case UUID. Mutually exclusive with --test-case-key.
--test-case-key <key>Test case key (for example, DEMO:1). Mutually exclusive with --test-case-id.
--parameter-id <uuid>Parameter UUID.
--parameter-name <name>Parameter name, matched without case.
Example​
uip tm testcases parameters get \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --parameter-name username
uip tm testcases parameters get \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --parameter-name username
Data shape​
{
  "Code": "TestCaseParameterGet",
  "Data": {
    "Id": "a1b2c3d4-0000-0000-0000-000000000101",
    "Name": "Username",
    "DefaultValue": "admin",
    "Hint": "User name for the test account",
    "Type": "Text",
    "ObjectId": "a1b2c3d4-0000-0000-0000-000000000001",
    "ObjectType": "testCase",
    "ProjectId": "00000000-0000-0000-0000-000000000abc",
    "Created": "2025-04-15T10:30:00Z",
    "CreatedBy": "c3d4e5f6-0000-0000-0000-000000000003",
    "Updated": "2025-04-15T10:30:00Z",
    "UpdatedBy": "c3d4e5f6-0000-0000-0000-000000000003"
  }
}
{
  "Code": "TestCaseParameterGet",
  "Data": {
    "Id": "a1b2c3d4-0000-0000-0000-000000000101",
    "Name": "Username",
    "DefaultValue": "admin",
    "Hint": "User name for the test account",
    "Type": "Text",
    "ObjectId": "a1b2c3d4-0000-0000-0000-000000000001",
    "ObjectType": "testCase",
    "ProjectId": "00000000-0000-0000-0000-000000000abc",
    "Created": "2025-04-15T10:30:00Z",
    "CreatedBy": "c3d4e5f6-0000-0000-0000-000000000003",
    "Updated": "2025-04-15T10:30:00Z",
    "UpdatedBy": "c3d4e5f6-0000-0000-0000-000000000003"
  }
}

uip tm testcases parameters add​

Add a parameter to a test case.

Arguments​

None.

Options​
FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-id <uuid>Test case UUID. Mutually exclusive with --test-case-key.
--test-case-key <key>Test case key (for example, DEMO:1). Mutually exclusive with --test-case-id.
--name <name>Required. Parameter name.
--default-value <value>Required. Default value. Pass "" to store an empty value.
--hint <text>Hint shown next to the parameter.
--type <type>Text stores the value as typed; Asset stores an Orchestrator asset name that the robot resolves at run time. Defaults to Text.
Examples​
uip tm testcases parameters add \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --name Username \
  --default-value admin \
  --hint "User name for the test account"
uip tm testcases parameters add \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --name Username \
  --default-value admin \
  --hint "User name for the test account"
# the value is the name of an Orchestrator asset
uip tm testcases parameters add \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --name Credentials \
  --default-value LoginCredentials \
  --type Asset
# the value is the name of an Orchestrator asset
uip tm testcases parameters add \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --name Credentials \
  --default-value LoginCredentials \
  --type Asset
Data shape​
{
  "Code": "TestCaseParameterAdd",
  "Data": {
    "Id": "a1b2c3d4-0000-0000-0000-000000000101",
    "Name": "Username",
    "DefaultValue": "admin",
    "Hint": "User name for the test account",
    "Type": "Text",
    "ObjectId": "a1b2c3d4-0000-0000-0000-000000000001",
    "ObjectType": "testCase",
    "ProjectId": "00000000-0000-0000-0000-000000000abc",
    "Created": "2025-04-15T10:30:00Z",
    "CreatedBy": "c3d4e5f6-0000-0000-0000-000000000003",
    "Updated": "2025-04-15T10:30:00Z",
    "UpdatedBy": "c3d4e5f6-0000-0000-0000-000000000003"
  }
}
{
  "Code": "TestCaseParameterAdd",
  "Data": {
    "Id": "a1b2c3d4-0000-0000-0000-000000000101",
    "Name": "Username",
    "DefaultValue": "admin",
    "Hint": "User name for the test account",
    "Type": "Text",
    "ObjectId": "a1b2c3d4-0000-0000-0000-000000000001",
    "ObjectType": "testCase",
    "ProjectId": "00000000-0000-0000-0000-000000000abc",
    "Created": "2025-04-15T10:30:00Z",
    "CreatedBy": "c3d4e5f6-0000-0000-0000-000000000003",
    "Updated": "2025-04-15T10:30:00Z",
    "UpdatedBy": "c3d4e5f6-0000-0000-0000-000000000003"
  }
}

uip tm testcases parameters update​

Update a parameter, found by ID or by name. Pass exactly one of --parameter-id or --parameter-name, and at least one of --new-name, --default-value, --hint, or --type. Fields you do not pass keep their current value; --default-value "" and --hint "" clear the stored value.

Arguments​

None.

Options​
FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-id <uuid>Test case UUID. Mutually exclusive with --test-case-key.
--test-case-key <key>Test case key (for example, DEMO:1). Mutually exclusive with --test-case-id.
--parameter-id <uuid>Parameter UUID.
--parameter-name <name>Current parameter name, matched without case.
--new-name <name>Rename the parameter to this.
--default-value <value>New default value.
--hint <text>New hint.
--type <type>New parameter type: Text or Asset.
Example​
uip tm testcases parameters update \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --parameter-name Username \
  --new-name UserId
uip tm testcases parameters update \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --parameter-name Username \
  --new-name UserId
Data shape​
{
  "Code": "TestCaseParameterUpdate",
  "Data": {
    "Id": "a1b2c3d4-0000-0000-0000-000000000101",
    "Name": "UserId",
    "DefaultValue": "admin",
    "Hint": "User name for the test account",
    "Type": "Text",
    "ObjectId": "a1b2c3d4-0000-0000-0000-000000000001"
  }
}
{
  "Code": "TestCaseParameterUpdate",
  "Data": {
    "Id": "a1b2c3d4-0000-0000-0000-000000000101",
    "Name": "UserId",
    "DefaultValue": "admin",
    "Hint": "User name for the test account",
    "Type": "Text",
    "ObjectId": "a1b2c3d4-0000-0000-0000-000000000001"
  }
}

Data echoes the values the command sent, not the full stored record. Run parameters get for the stored record.

uip tm testcases parameters delete​

Delete one or more parameters from a test case. Run parameters list first to collect the IDs.

Arguments​

None.

Options​
FlagDescription
--project-key <key>Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
--project-id <id>Test Manager project ID. Use instead of --project-key, and wins if both are given.
--test-case-id <uuid>Test case UUID. Mutually exclusive with --test-case-key.
--test-case-key <key>Test case key (for example, DEMO:1). Mutually exclusive with --test-case-id.
--parameter-ids <uuid...>Required. Parameter UUIDs to delete, space-separated, up to 100 per call.
-y, --yesRequired. Confirms the irreversible deletion. The CLI never prompts; without --yes, the command fails with Result: "Failure" and exit code 1.
Example​
uip tm testcases parameters delete \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --parameter-ids a1b2c3d4-0000-0000-0000-000000000101 a1b2c3d4-0000-0000-0000-000000000102 \
  --yes
uip tm testcases parameters delete \
  --project-key DEMO \
  --test-case-key DEMO:1 \
  --parameter-ids a1b2c3d4-0000-0000-0000-000000000101 a1b2c3d4-0000-0000-0000-000000000102 \
  --yes
Data shape​
{
  "Code": "TestCaseParameterDelete",
  "Data": {
    "Passed": 2,
    "Failed": 0
  }
}
{
  "Code": "TestCaseParameterDelete",
  "Data": {
    "Passed": 2,
    "Failed": 0
  }
}

Passed and Failed are counts. The response does not say which ID failed; run parameters list to see what remains.

  • 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.
  • testcaselog — start, finish, and inspect test case logs, including testcaselog list-assertions.
  • executions — execution-level views of test case logs.
  • report — summary of a run, with failed cases and assertion text.
  • requirements — the requirements that list-requirements and bulk-create --requirement-key refer to.
  • export-jobs — check the job that testcases export starts.

See also​

Was this page helpful?

Connect

Need help? Support(opens in new window)

Want to learn? UiPath Academy(opens in new window)

Have questions? UiPath Forum(opens in new window)

Stay updated