HRTK can export test results to JSON files for external tooling, CI integration, or historical tracking. Run /hrtk export after a test run to write the results to disk.
Generating an Export
Output:
HRTK: Results exported to plugins/hrtk-server/results/run_1712345678000.json
Files are written to <plugin data directory>/results/ with a timestamp-based filename.
{
"timestamp": 1712345678000,
"suites": [
{
"plugin": "MyMod",
"suite": "Combat Tests",
"durationMs": 45,
"tests": [
{
"name": "testSwordDamage",
"displayName": "Sword deals correct damage",
"status": "PASSED",
"durationMs": 3,
"message": null,
"tags": ["combat", "melee"]
},
{
"name": "testArrowDamage",
"displayName": "Arrow deals correct damage",
"status": "FAILED",
"durationMs": 5,
"message": "Expected health below <80.0> but was <95.0>",
"tags": ["combat", "ranged"]
}
]
}
]
}
Field Reference
Root Object
| Field | Type | Description |
|---|
timestamp | long | Unix timestamp (milliseconds) when the export was generated |
suites | array | List of suite result objects |
Suite Object
| Field | Type | Description |
|---|
plugin | string | Name of the plugin that owns this suite |
suite | string | Display name of the suite |
durationMs | long | Total suite execution time in milliseconds |
tests | array | List of test result objects |
Test Object
| Field | Type | Description |
|---|
name | string | Method name of the test |
displayName | string | Human-readable display name |
status | string | One of: PASSED, FAILED, ERRORED, SKIPPED, TIMED_OUT |
durationMs | long | Test execution time in milliseconds |
message | string? | Failure message, error message, or skip reason (null if passed) |
tags | string[] | List of tags applied to this test |
Status Values
| Status | Description |
|---|
PASSED | Test completed successfully |
FAILED | Assertion failure |
ERRORED | Unexpected exception |
SKIPPED | Test was disabled or precondition not met |
TIMED_OUT | Test exceeded its timeout |
Example: Parsing in Python
import json
with open("run_1712345678000.json") as f:
data = json.load(f)
for suite in data["suites"]:
print(f"\n{suite['plugin']} / {suite['suite']}")
for test in suite["tests"]:
status = test["status"]
name = test["displayName"]
ms = test["durationMs"]
print(f" [{status}] {name} ({ms}ms)")
if test["message"]:
print(f" {test['message']}")
CI Integration
Export JSON results after each test run in your CI pipeline. Compare results across builds to detect regressions. The timestamp field lets you track when each run occurred.
You can automate export by combining commands:
The export file includes all suite results from the last run, making it a complete snapshot of test health.
HRTK does not automatically clean up old export files. If you run exports frequently, consider adding a cleanup step to your CI pipeline or server maintenance scripts.
Next Steps