- Python
Python helper for uploading benchmark and test artifacts to a Prism server.
This README is intentionally focused on prism_client.py usage and examples.
- Python 3.10+
From pip
pip install prism.py.clientFrom this folder:
pip install -r requirements.txtOptional editable install:
pip install -e .The script can upload four metadata types:
result: test result payload toPOST /TestResult/AddResult/env: environment payload toPOST /TestResult/AddEnvirnoment/param: parameter payload toPOST /TestResult/AddParameter/meta: metadata payload toPOST /TestResult/AddMetadata/
host should include the API prefix, for example https://localhost:44303/api/v1.
Installed from pipe
python -m prism_client -h
usage: python.exe -m prism_client [-h] -t TEST_JOB -p PROJECT [-c CSV] [-j JSON] [-m {env,meta,param,result}] -n NAME
[-s START] [-e END] [-x TIMEOUT_HOURS]
[-b {NotExecuted,Pass,Fail,Blocked,InProgress,Hang,Paused,Aborted}]
[-r {NotExecuted,Pass,Fail,Blocked,InProgress,Hang,Paused,Aborted}] [-g BUILD_GUID]
hostpython prism_client.py host -t TEST_JOB -p PROJECT -m {env,meta,param,result} -n NAME (-j JSON | -c CSV) [options]Required arguments:
host: Prism server API root URL-t, --test-job: test job name-p, --project: project name-m, --meta-type: one ofenv,meta,param,result-n, --name: unique label (dataInfo) for the uploaded payload- one of
-j, --jsonor-c, --csv
Optional arguments:
-g, --build-guid: build GUID (auto-generated if omitted)-s, --start: start time (ISO string, defaults to current time)-e, --end: end time (ISO string, defaults to current time)-x, --timeout-hours: timeout in hours (default0)-b, --build-result: one ofNotExecuted|Pass|Fail|Blocked|InProgress|Hang|Paused|Aborted-r, --test-result: one ofNotExecuted|Pass|Fail|Blocked|InProgress|Hang|Paused|Aborted
Create result.json:
{
"summary": {
"throughput": 1234,
"latency_ms": 21.4,
"passed": true
},
"details": [
{
"name": "case_001",
"status": "Pass",
"duration_ms": 120
}
]
}Run:
python prism_client.py https://your-prism-server/api/v1 \
-p YourProject \
-t YourTestJob \
-m result \
-n benchmark-run-20260609 \
-j result.json \
-b Pass \
-r PassIf you provide CSV, the script converts it to JSON before upload.
python prism_client.py https://your-prism-server/api/v1 \
-p YourProject \
-t YourTestJob \
-m result \
-n benchmark-run-csv \
-c result.csv \
-b Pass \
-r PassEnvironment:
python prism_client.py https://your-prism-server/api/v1 \
-p YourProject \
-t YourTestJob \
-m env \
-n hw-sw-info \
-j environment.jsonParameter:
python prism_client.py https://your-prism-server/api/v1 \
-p YourProject \
-t YourTestJob \
-m param \
-n runtime-args \
-j parameters.jsonMetadata:
python prism_client.py https://your-prism-server/api/v1 \
-p YourProject \
-t YourTestJob \
-m meta \
-n build-info \
-j metadata.jsonimport json
import uuid
from datetime import datetime, timezone
from prism_client import upload_result
host = "https://your-prism-server/api/v1"
project = "YourProject"
test_job = "YourTestJob"
name = "benchmark-run-20260609"
with open("result.json", "r", encoding="utf-8") as f:
payload = json.load(f)
upload_result(
host=host,
project=project,
test_job=test_job,
name=name,
data=payload,
build_guid=str(uuid.uuid4()),
build_result="Pass",
test_result="Pass",
start=datetime.now(timezone.utc).isoformat(),
end=datetime.now(timezone.utc).isoformat(),
timeout_hours=0,
)pytest