Skip to content
Talk to our solutions team

Testing CLI Reference

Testing has two surfaces, and they are not equivalent.

SurfaceProvides
kis testThe v2 functional runner only — kis test -t tests/ and its flags
test.svcEvery mode: test, tests, api, load, agent, orchestrator

The kis CLI exposes the v2 runner as a top-level command, so kis test -t tests/ works and takes the flags below. It does not expose the other modes: kis test load is parsed as the v2 runner with an ignored positional argument, not as the load runner. Use test.svc for anything beyond the v2 runner.

Terminal window
kis test -t <path> [flags]
CommandPurposeDoc
test (alias run)v2 functional test runner — the recommended way to run API testsGetting started, Test definitions
testsv1.5 hierarchy runner (steps/testcases/scenarios/testplans directories); also drives load tests via --loadLegacy tests mode, Load testing
loadlegacy load runner over testplan+config+profile YAML tripleLoad testing
apiPostman-style collection runner (requests: files) — a CLI runner, not a serverLegacy tests mode
agentdistributed load worker; dials the orchestrator over gRPCServer modes
orchestratordistributed control plane; gRPC server + HTTPS APIServer modes
versionprint name, version, build commit, build timestamp

Exit codes: 0 success, 1 on any test failure (v2 test), load/tests-mode failures, or cobra errors; -1 for bare invocation with no command. The legacy test plan runner and api log per-item failures but still exit 0 — don’t gate CI on those two.

kis test (alias: kis test run) — v2 functional runner

Section titled “kis test (alias: kis test run) — v2 functional runner”

Runs a test YAML file or a directory tree of suites. No files are written by default: results stream to the console and the process exits 0/1. See Test definitions for the YAML schema.

Terminal window
kis test -t tests/ # run a suite tree; env auto-discovered
kis test -t tests/data.yaml # run one file
kis test -t tests/ -e env.yaml -n staging # multi-env file; pick "staging"
kis test -t tests/ --tags smoke
kis test -t tests/ -v url=http://localhost:8080 -v password=secret
kis test -t tests/ --db .test/results.db --junit .test/junit.xml
kis test -t tests/ --dry-run # validate tree + templates, no HTTP calls
FlagShortDefaultDescription
--tests-tRequired. Path to a test YAML file or directory.
--env-eEnvironment YAML/JSON file. Auto-discovered next to --tests when omitted (see below).
--name-nEnvironment name inside a multi-env env file.
--vars-vInline key=value variables. Highest precedence. Repeatable.
--tagsInclude tags. Commas inside one entry = AND; repeat the flag = OR.
--exclude-tagsSame syntax; matched tests are removed. Exclusion wins over inclusion.
--dbDuckDB file path. Results persist only when provided.
--junitJUnit XML output path (CI integration).
--dry-runfalseValidate suite tree and template resolution without making HTTP calls.
--no-colorfalseDisable ANSI colors (auto-disabled when stdout isn’t a TTY).
--use-guppifalseRoute through the guppi TestExecutionEngine instead of the in-process sequential runner.

Low → high: suite.yaml variables: → env file → --vars.

When --env is omitted, the runner looks in the tests directory (or the directory containing the tests file) for, in order — first hit wins:

  1. env.local.yaml / env.local.yml / env.local.json
  2. env.<name>.yaml / .yml / .json — only when --name is set
  3. env.yaml / env.yml / env.json

The discovered path is announced on stderr. Commit env.yaml, keep env.local.yaml in .gitignore for personal overrides.

Flat — a plain map of variables:

url: http://localhost:8080
password: secret

Multi-env — every top-level value is a map; keys are environment names:

default:
url: http://localhost:8080
staging:
url: https://api.staging.kis.ai

Selection rules: --name <key> picks that block (error lists known keys if missing); no --name picks default; a multi-env file with neither default nor --name is an error. Flat files ignore --name. Accepted extensions: .yaml, .yml, .json (extensionless parses as YAML).

test.svc tests — hierarchy runner (functional + load)

Section titled “test.svc tests — hierarchy runner (functional + load)”

Runs directory-based collections in the steps:/testcases:/scenarios:/testplans: format (see Legacy tests mode). Adding --load switches the same test definitions into load mode (see Load testing).

Terminal window
test.svc tests -p examples/01-rest-basics -d examples/env.json -s
test.svc tests -p examples/01-rest-basics -t teststep -e get-users -s
test.svc tests -p examples/06-load-test --load examples/06-load-test/profile.yaml --profile default
FlagShortDefaultDescription
--path-p<product path>/testsPath to the collection directory.
--patterntype-tallFilter by type: testplan, testscenario, testcase, teststep.
--pattern-eName of the test entity to execute.
--datapath-dData file path, repeatable. .json/.yaml merge into variables; .csv fans out one run per row.
--vars-vInline variables as key=value map.
--loadLoad-profile YAML path. Presence switches to load mode.
--profiledefaultProfile name (key under loadprofiles:).
--logresponses-sfalseLog response bodies.
--loglinenumbers-nfalseLog line numbers.
--loglevel-lpanicLog level: debug, info, warn, error, panic.
--prefixtestLog file prefix.

Output: <prefix>-<RFC3339Nano timestamp>.log plus stdout, and a hierarchy summary table after the run. Any suite failure exits 1.

Drives the legacy testplan format with a config file and a load-profile file. Prefer test.svc tests --load for new load tests; this command remains for existing v1 plans.

Terminal window
test.svc load -i test.yaml -c config.yaml -r load.yaml -l default -e dev
FlagShortDefaultDescription
--input-itest.yamlTest plan YAML.
--config-cconfig.yamlConfig YAML; environments come from its top-level environments: key.
--profiles-rload.yamlLoad-profile YAML (loadprofiles: key). When empty, profiles are read from the input file itself.
--loadprofile-ldefaultProfile name under loadprofiles:.
--env-edefaultEnvironment name.
--output-otest_outputAccepted but unused. The output prefix actually comes from the environment’s output key.

Renders a live terminal dashboard while running; writes test-load-<timestamp>.log and <prefix>_summary.txt. Failures exit 1.

Executes Postman-style request collections (requests: YAML files). Despite the name this is a CLI runner, not a server.

Terminal window
test.svc api -c my-collection # <product path>/api/my-collection
test.svc api -p ./api/my-collection # explicit path
test.svc api -c my-collection -r login # single request by name
FlagShortDefaultDescription
--collection-cCollection name, resolved under <product>/api/<collection> or via <product>/api/collections.yaml.
--path-pExplicit collection directory (wins over --collection).
--folderSubfolder within the collection.
--request-rExecute a single request by name.
--datapath-dData file paths (repeatable).
--vars-vInline variables.
--loglevel-lpanicLog level.
--logresponses-sfalseLog response bodies.
--loglinenumbers-nfalseLog line numbers.

Request failures are logged and execution continues (exit 0).

test.svc agent / test.svc orchestrator — distributed mode

Section titled “test.svc agent / test.svc orchestrator — distributed mode”

Server modes for distributed test execution. Both take the shared infra flag set (--config/-f, default .test.yaml, plus --port, --sid, --config_url, service-discovery and TLS cert flags). See Server modes for config keys, endpoints, and the distributed execution flow.

  • The root command registers two subcommands named test; the v2 runner wins and the legacy plan runner is unreachable under that name. Treat the legacy test flag set (-i/-c/-e/-o) as historical.
  • --output/-o on load is accepted but never read; the file prefix comes from the environment map’s output key.
  • The root infra flags (--sid, --config_url, …) are registered non-persistently: they apply to the bare root, agent, and orchestrator, not to the test-running subcommands.
  • agent logs “Using config file:” with the wrong variable — the file actually loaded is the one passed via --config/-f.