The test group is the busiest in the CLI. It triggers runs, lists historical runs, fetches structured results, streams logs, downloads artifacts, and pulls signed evidence packs.
rbtk test├── run # Run tests against a pool (push code, wait, return result)├── cloud # Run on a hosted pool (synonym for `run --pool hosted-*`)├── list # List recent runs├── results # Structured pass/fail/coverage for a run├── logs # Stdout + stderr for a run (alias of `rbtk log <run-id>`)├── watch # Live-stream a run's status (queued → running → finished)├── cases # List test cases that ran inside a run├── files # List or download per-test-case artifacts from a run├── artifacts # Hidden alias for `test files` (kept for back-compat)└── evidence-pack # Download the signed PDF + ReqIF + ZIP bundle
Kick off a test run. The most common invocation pushes the working directory to the platform, dispatches it to whichever pool matches the project’s routing rules, and waits for completion.
# Most common: push, route, waitrbtk test run --push ./# Force a GPU run on a specific poolrbtk test run --push ./ --pool prod-gpu-farm --gpu# Don't wait — return the run ID and exitrbtk test run --push ./ --no-wait# 8a1f-test-run-id# Pin commit metadata when running outside git contextrbtk test run --push ./ --git-sha $GIT_SHA --git-ref refs/heads/release-2.4
Convenience alias for rbtk test run --pool hosted-*. Picks the right hosted pool based on requirements.
rbtk test cloud --push ./ --sim gazebo-harmonic # → hosted-gazebo-gpurbtk test cloud --push ./ # → hosted-ros2-cpu
Same flags as rbtk test run. The command always prints a workspace URL alongside the run ID so you (or a chat agent) can hand the link straight to a stakeholder:
✓ Queued test run 8a1f3c2d-9a01-4d2d-9aab-6a14a92e7baf Branch: pivot @ 0xabc123 Pool: hosted-gazebo-gpu Cost: ≈ $1.20 (12 sim-minutes) Watch: rbtk test watch 8a1f3c2d URL: https://acme.roboticks.io/warehouse/test-runs/8a1f3c2d-...
The workspace URL is derived from the org slug and project slug — no extra round-trip.
RUN ID BRANCH STATUS TESTS DURATION STARTED POOL8a1f... main PASS 412/412 2m 14s 12 min ago prod-gpu-farm8a1c... pr/214 FAIL 411/412 2m 19s 22 min ago prod-gpu-farm8a1a... pr/214 PASS 412/412 2m 12s 31 min ago prod-gpu-farm
With --output json, each row includes the run ID, pool, requirement coverage delta, and links.
rbtk test results <run-id>rbtk test results latest --output json
Output (table):
Run 8a1f3c2dBranch main @ 0xabc123Status PASS · 412/412 · 2m 14sREQUIREMENT COVERAGE Confirmed 142 (+3) Uncovered 18 (-1) Total 160PER-FILE FAILURES (0)POOL prod-gpu-farm (self-hosted)
With --output json, returns the full result graph: per-test outcomes, per-requirement links, MCAP attachments, coverage delta vs the previous run on the same branch.
Stream or fetch logs for a run. Equivalent to rbtk log <run-id>.
rbtk test logs <run-id> # live tail if running, full dump if completedrbtk test logs <run-id> --tail 200 # last 200 linesrbtk test logs <run-id> --since 5m # last 5 minutesrbtk test logs <run-id> --stderr # stderr only
Logs include structured fields when --output json:
Live-stream a run’s status — queued → running → finished — without leaving the terminal. Polls the platform every second and exits when the run hits a terminal state.
rbtk test watch <run-id>rbtk test watch latestrbtk test watch <run-id> --interval 5 # poll every 5 seconds insteadrbtk test watch <run-id> --output json # one JSON object per status change
List the test cases that executed inside a run, including their per-test-case S3 prefix. Useful for picking the --nodeid to feed back into rbtk test files.
rbtk test cases <run-id>rbtk test cases <run-id> --status failedrbtk test cases <run-id> --output json | jq '.[] | select(.confirms[] == "REQ-014")'
List or download per-test-case artifacts from a run — MCAP bags, screenshots, custom files emitted via attach_artifact(), JUnit XML, runner stdout/stderr.
rbtk test files <run-id> # list everythingrbtk test files <run-id> --nodeid "tests/test_estop.py::test_estop_halts_motion" # one testrbtk test files <run-id> --prefix attachments/ # one kindrbtk test files <run-id> --download --out ./run-artifacts/ # download allrbtk test files <run-id> --download --nodeid "tests/...::test_x" --out ./test_x/
Flag
Description
--nodeid <pytest-nodeid>
Scope to one test case. The CLI re-uses the deterministic sha256(nodeid)[:16] slug, so the local layout mirrors S3.
--prefix <key-prefix>
Restrict to a sub-prefix inside the run or test case (e.g. mcap/, attachments/).
--download
Download instead of listing.
--out <dir>
Output directory (default .). Created if missing.
--pattern <glob>
Only files matching glob (e.g., *.mcap).
On-disk layout mirrors S3 so artifacts stay grouped under the test that produced them:
rbtk test run --rerun <run-id> # rerun the same payload on the same poolrbtk test run --rerun <run-id> --only-failed # rerun only the tests that failed