Skip to main content
Version: 3.0.0

Python API

The testbench-cli-reporter package exposes a Python API so you can drive TestBench actions programmatically — for example from a CI script, a test framework plugin, or a custom orchestration tool.

Installation​

pip install testbench-cli-reporter

Quick start​

from testbench_cli_reporter import (
CliReporterConfig,
Configuration,
ExportXmlAction,
ExportXmlParameters,
TestCycleXMLReportOptions,
run_automatic_mode,
)

export_config = TestCycleXMLReportOptions(
exportAttachments=True,
exportDesignData=True,
reportRootUID="iTB-TT-1234567890",
suppressFilteredData=True,
characterEncoding="utf-16",
exportExpandedData=True,
filters=[],
exportExecutionProtocols=False,
exportDescriptionFields=True,
outputFormattedText=True,
)

action = ExportXmlAction(
parameters=ExportXmlParameters(
outputPath="report.zip",
tovKey="123456",
cycleKey="234567",
report_config=export_config,
)
)

config = CliReporterConfig(
configuration=[
Configuration(
server_url="https://localhost:443/api/",
verify=False,
actions=[action],
)
]
)

run_automatic_mode(
config,
loginname="tt-admin",
password="admin",
)

run_automatic_mode​

def run_automatic_mode(
configuration: CliReporterConfig | dict[str, Any],
loginname: str | None = None,
password: str | None = None,
sessionToken: str | None = None,
raise_exceptions: bool = False,
) -> None

Runs one or more actions against one or more TestBench servers.

Parameters​

ParameterTypeDefaultDescription
configurationCliReporterConfig or dictThe full configuration. If a dict is passed it is automatically converted to CliReporterConfig
loginnamestr | NoneNoneOverride the login name in the configuration
passwordstr | NoneNoneOverride the password in the configuration
sessionTokenstr | NoneNoneOverride the session token in the configuration
raise_exceptionsboolFalseWhen True, HTTP errors propagate as exceptions. When False, they are logged and execution continues

Behaviour​

  1. Converts configuration to CliReporterConfig if needed
  2. Sets up logging from configuration.loggingConfiguration
  3. Opens connections to all configured servers
  4. Queues and executes all actions, respecting thread_limit
  5. Polls until all jobs finish
  6. On HTTP errors: logs the response JSON; re-raises if raise_exceptions=True

Configuration objects​

All configuration dataclasses can be imported directly from testbench_cli_reporter:

from testbench_cli_reporter import (
# Top-level config
CliReporterConfig,
Configuration,
loggingConfig,

# Actions
ExportXmlAction,
ExportJsonAction,
ExportCsvAction,
ExportServerLogsAction,
ImportXMLAction,
ImportJSONAction,
RequestJWTAction,

# Action parameters
ExportXmlParameters,
ExportJsonParameters,
ExportCsvParameters,
ExportServerLogsParameters,
ImportXmlParameters,
ImportJsonParameters,
JWTDataOptions,

# Supporting types
FilteringOptions,
Key,
Permission,
ProjectCSVReportOptions,
ProjectCSVReportScope,
)

CliReporterConfig​

Top-level configuration container.

FieldTypeDefaultDescription
configurationlist[Configuration][]List of server connections
loggingConfigurationloggingConfigdefaultsConsole and file logging settings

Configuration​

A single server connection with its actions.

FieldTypeDefaultDescription
server_urlstr | NoneNoneFull server URL (https://host:port/api/)
verifyboolTrueVerify TLS certificates
sessionTokenstr | NoneNoneSession token
basicAuthstr | NoneNoneBase64-encoded login:password
loginnamestr | NoneNonePlaintext login name
passwordstr | NoneNonePlaintext password
actionslist[BaseAction] | NoneNoneActions to execute
thread_limitint | NoneNoneMax concurrent actions (None = unlimited)

loggingConfig​

FieldTypeDefaultDescription
console.logLevelLogLevelINFOConsole log level
console.logFormatstr"%(message)s"Console log format
file.logLevelLogLevelDEBUGFile log level
file.fileNamestr"testbench-cli-reporter.log"Log file path
file.logFormatstr"%(asctime)s - ..."File log format

Examples​

Import XML results​

from testbench_cli_reporter import (
CliReporterConfig,
Configuration,
ImportXMLAction,
ImportXmlParameters,
ExecutionXmlResultsImportOptions,
run_automatic_mode,
)

import_config = ExecutionXmlResultsImportOptions(
fileName="",
reportRootUID=None,
ignoreNonExecutedTestCases=True,
defaultTester=None,
checkPaths=True,
filters=None,
discardTesterInformation=True,
useExistingDefect=True,
)

action = ImportXMLAction(
parameters=ImportXmlParameters(
inputPath="results.zip",
importConfig=import_config,
)
)

config = CliReporterConfig(
configuration=[
Configuration(
server_url="https://testbench.example.com:443/api/",
verify=True,
actions=[action],
)
]
)

run_automatic_mode(config, loginname="ci-user", password="secret")

Export JSON report​

from testbench_cli_reporter import (
CliReporterConfig,
Configuration,
ExportJsonAction,
ExportJsonParameters,
TestCycleJsonReportOptions,
run_automatic_mode,
)

report_config = TestCycleJsonReportOptions(
treeRootUID=None,
basedOnExecution=True,
suppressFilteredData=True,
suppressNotExecutable=True,
suppressEmptyTestThemes=True,
executionMode="EXECUTE",
filters=[],
)

action = ExportJsonAction(
parameters=ExportJsonParameters(
outputPath="json-report.zip",
projectKey="111",
tovKey="222",
cycleKey="333",
report_config=report_config,
)
)

config = CliReporterConfig(
configuration=[
Configuration(
server_url="https://localhost:443/api/",
verify=False,
actions=[action],
)
]
)

run_automatic_mode(config, loginname="tt-admin", password="admin")

Generate a JWT​

from testbench_cli_reporter import (
CliReporterConfig,
Configuration,
JWTDataOptions,
Permission,
RequestJWTAction,
run_automatic_mode,
)

action = RequestJWTAction(
parameters=JWTDataOptions(
projectKey="111",
permissions=[
Permission.ReadProjectHierarchy,
Permission.ImportExecutionResults,
],
subject="my-service",
expiresAfterSeconds=3600,
)
)

config = CliReporterConfig(
configuration=[
Configuration(
server_url="https://localhost:443/api/",
verify=False,
actions=[action],
)
]
)

run_automatic_mode(config, loginname="tt-admin", password="admin")

Using a dict instead of dataclasses​

You can also pass a plain dictionary matching the JSON config file schema:

from testbench_cli_reporter import run_automatic_mode

run_automatic_mode(
{
"configuration": [
{
"server_url": "https://localhost:443/api/",
"verify": False,
"actions": [
{
"type": "ExportXMLReport",
"parameters": {
"outputPath": "report.zip",
"tovKey": "123456",
"cycleKey": "234567",
"report_config": {
"exportAttachments": True,
"exportDesignData": True,
"characterEncoding": "utf-16",
"suppressFilteredData": True,
"exportExpandedData": True,
"exportDescriptionFields": True,
"outputFormattedText": False,
"exportExecutionProtocols": False,
"filters": [],
"reportRootUID": None,
},
},
}
],
}
]
},
loginname="tt-admin",
password="admin",
)

Error handling​

Set raise_exceptions=True for CI pipelines where you want failures to stop the build:

try:
run_automatic_mode(config, loginname="ci-user", password="secret", raise_exceptions=True)
except Exception as e:
print(f"TestBench action failed: {e}")
sys.exit(1)