Skip to content
Testing
Skill

/testdriver-test-results-json

Per-test JSON result files with metadata, versions, and infrastructure details

From plugin
testdriverai
35665 skills1 agent

Claude Code

$ npx -y skills add testdriverai/testdriverai --skill testdriver-test-results-json --agent claude-code

SKILL.md

testdriver-test-results-json.SKILL.md
name: testdriver:test-results-json
description: Per-test JSON result files with metadata, versions, and infrastructure details

<!-- Generated from test-results-json.mdx. DO NOT EDIT. -->

Overview

TestDriver writes a JSON result file for each test case after it finishes. These files have full metadata about the test run. This includes the SDK version, the runner version, infrastructure details, interaction statistics, and links to recordings.

TestDriver writes the result files to:

.testdriver/results/<testFile>/<testName>.json

For example, a test file `tests/login.test.mjs` with a test named `"should log in"` produces:

.testdriver/results/tests/login.test.mjs/should_log_in.json

<Note> TestDriver makes the test names safe for the file system. It changes special characters to underscores. It cuts the names to 200 characters. </Note>

Enabling

You do not need configuration. The TestDriver Vitest reporter plugin writes the JSON files automatically each time the tests run.

JSON Schema

Each result file is organized into logical groups:

`versions`

| Field | Type | Description | |---|---|---| | `versions.sdk` | `string \| null` | TestDriver SDK version (e.g. `"7.8.0"`) | | `versions.vitest` | `string \| null` | Vitest version used to run the test | | `versions.api` | `string \| null` | TestDriver API server version | | `versions.runnerBefore` | `string \| null` | Runner version at sandbox start | | `versions.runnerAfter` | `string \| null` | Runner version after auto-update | | `versions.runnerWasUpdated` | `boolean` | Whether the runner was auto-updated during provisioning |

`test`

| Field | Type | Description | |---|---|---| | `test.file` | `string \| null` | Relative path to the test file | | `test.name` | `string \| null` | Name of the test case | | `test.suite` | `string \| null` | Name of the parent `describe` block | | `test.passed` | `boolean` | Whether the test passed | | `test.caseId` | `string \| null` | Database ID for this test case | | `test.runId` | `string \| null` | Database ID for the overall test run | | `test.error` | `string \| null` | Error message if the test failed | | `test.errorStack` | `string \| null` | Error stack trace if the test failed |

`urls`

| Field | Type | Description | |---|---|---| | `urls.api` | `string \| null` | API root URL used for this test | | `urls.console` | `string \| null` | TestDriver console base URL | | `urls.vnc` | `string \| null` | VNC URL for the sandbox | | `urls.testRun` | `string \| null` | Direct link to this test case in the console |

`replay`

The `replay` object contains the recording replay URL and derived embed links. The `gifUrl` and `embedUrl` are generated automatically from the replay URL.

| Field | Type | Description | |---|---|---| | `replay.url` | `string \| null` | Recording replay URL | | `replay.gifUrl` | `string \| null` | Animated GIF thumbnail of the recording | | `replay.embedUrl` | `string \| null` | Embeddable replay URL (appends `&embed=true`) | | `replay.markdown` | `string \| null` | Ready-to-use Markdown embed with GIF linking to the replay |

The `replay.markdown` field produces a clickable GIF badge you can paste directly into PR comments, README files, or issue descriptions:

[![Test Recording](https://api.testdriver.ai/replay/abc123/gif?shareKey=xyz)](https://console.testdriver.ai/replay/abc123?share=xyz)

`date`

| Field | Type | Description | |---|---|---| | `date` | `string` | ISO 8601 timestamp when the test finished |

`team`

| Field | Type | Description | |---|---|---| | `team.id` | `string \| null` | Team ID from the sandbox | | `team.sessionId` | `string \| null` | SDK session ID |

`infrastructure`

| Field | Type | Description | |---|---|---| | `infrastructure.sandboxId` | `string \| null` | Sandbox instance ID | | `infrastructure.instanceId` | `string \| null` | Instance ID | | `infrastructure.os` | `string \| null` | Operating system of the sandbox (`"linux"` or `"windows"`) | | `infrastructure.amiId` | `string \| null` | AWS AMI ID used for provisioning | | `infrastructure.e2bTemplateId` | `string \| null` | E2B template ID used for provisioning | | `infrastructure.imageVersion` | `string \| null` | Sandbox image version |

`realtime`

| Field | Type | Description | |---|---|---| | `realtime.channel` | `string \| null` | Ably channel name used for communication | | `realtime.messageCount` | `number` | Number of messages published to the realtime channel |

`interactions`

| Field | Type | Description | |---|---|---| | `interactions.total` | `number` | Total number of interactions recorded | | `interactions.cached` | `number` | Number of interactions served from cache | | `interactions.byType` | `object` | Breakdown of interactions by type (e.g. `find`, `click`, `assert`) |

Example Output

{
  "sdkVersion": "7.8.0",
  "vitestVersion": "4.0.0",
  "apiVersion": "1.45.0",
  "runnerVersionBefore": "2.1.0",
  "runnerVersionAfter": "2.1.1",
  "wasUpdated": true,
  "apiUrl": "https://api.testdriver.ai",
  "consoleUrl": "https://console.testdriver.ai",
  "testRunLink": "https://console.testdriver.ai/runs/abc123/def456",
  "dashcamUrl": "https://app.dashcam.io/replay/abc123",
  "vncUrl": "wss://sandbox-123.testdriver.ai/vnc",
  "date": "2025-01-15T14:30:00.000Z",
  "team": {
    "id": "team_abc123",
    "sessionId": "sess_xyz789"
  },
  "infrastructure": {
    "sandboxId": "sandbox-123",
    "instanceId": "i-abc123",
    "os": "linux",
    "amiId": "ami-0abc123",
    "e2bTemplateId": null,
    "imageVersion": "v2.1.0"
  },
  "realtime": {
    "channel": "sandbox:sandbox-123",
    "messageCount": 42
  },
  "interactions": {
    "total": 15,
    "cached": 3,
    "byType": {
      "find": 8,
      "click": 5,
      "assert": 2
    }
  }
}

Using Result Files in CI

Result files are useful for extracting test metadata in CI pipelines without parsing log output.

GitHub Actions Examp

Read more
@testdriverai
Ships withtestdriverai

Computer-Use SDK for E2E QA Testing

35665 skills1 agent
Get the whole plugin

Stars on GitHub

Momentum

stars in total
356
Star history of testdriverai/testdriverai on GitHub, a chart by star-history.com

Other skills on testdriverai.

More skills from other plugins.

api-review

api-review

Produce the "Playwright 1.xx API Review" artifact for a range of commits - the public API additions and the breaking or behavior…

@microsoft@microsoftInstall Skill
add-e2e-selectors

add-e2e-selectors

Add reliable @grafana/e2e-selectors to interactive elements and key containers in the Grafana frontend. Use when adding e2e…

grafana5d78k
@grafana@grafanaInstall Skill
promptfoo-evals

promptfoo-evals

Write, refine, run, and QA promptfoo evaluation suites: promptfooconfig.yaml, prompts, providers, vars, tests, assertions,…

promptfoo13d27k
@promptfoo@promptfooInstall Skill
deepeval

deepeval

DeepEval evaluation workflow for AI agents and LLM applications. TRIGGER when the user wants to evaluate or improve an AI agent,…

@confident-ai@confident-aiInstall Skill

Questions about testdriver-test-results-json.

Which coding agents can use testdriver-test-results-json?
testdriver-test-results-json installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.