DocumentationPortable result evidence

JUnit XML evidence contract

JUnit XML is the portable hand-off between your test framework, CI/CD provider, and QaCockpit. Keep the original files non-empty, complete, and attached to the exact run.

01

What QaCockpit reads

QaCockpit accepts common JUnit-style XML dialects rather than requiring one vendor's exact schema. The importer preserves suites, test cases, duration, status, failure message, stack evidence, and captured output when the reporter provides it.

Minimal JUnit-style report
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="checkout" tests="2" failures="1" skipped="0" time="1.42">
  <testcase classname="CheckoutApiTest" name="createsOrder" time="0.61" />
  <testcase classname="CheckoutApiTest" name="rejectsExpiredCard" time="0.81">
    <failure message="Expected HTTP 422 but received 500" type="AssertionError">
      stack trace or safe diagnostic context
    </failure>
  </testcase>
</testsuite>
  • <testsuites> and a single root <testsuite> are both valid common shapes.
  • Passed, failed, skipped, error, and unknown results remain distinct technical states.
  • File name, extension, artifact name, and directory can follow your repository conventions.
  • An empty or missing report is evidence-intake failure, not a passing test run.

02

Common framework outputs

FrameworkCreate JUnit XMLTypical path
PlaywrightJUnit reporter with outputFile or PLAYWRIGHT_JUNIT_OUTPUT_FILEtest-results/junit.xml
JUnit 5 / REST Assuredmvn test through Maven Surefiretarget/surefire-reports/TEST-*.xml
pytestpytest --junitxml=test-results/junit.xmltest-results/junit.xml
.NET testUse a JUnit-compatible test logger in the existing test projectThe logger's configured output directory

The framework writes the report. QaCockpit does not require an SDK inside the test code and does not ask the pipeline to execute a product-owned command.

03

Retain reports on success and failure

The most useful report often comes from a run containing failed tests. Configure the artifact step to run regardless of the test command outcome, verify that at least one report is non-empty, and preserve the original CI conclusion after retention.

04

Keep multiple files and shards unambiguous

  • Retain every report produced by Maven modules, matrix jobs, or test shards.
  • Give each GitHub matrix job a unique artifact name because retained artifacts are immutable.
  • Do not overwrite one shard's XML with another shard at the same shared path.
  • Use stable suite and test identity so Test Scope can explain added and missing cases.
  • Preserve exact run and attempt context instead of merging results from unrelated executions.

05

Keep the evidence boundary safe

JUnit files, logs, screenshots, and traces may contain URLs, identifiers, payloads, or failure output. Exclude credentials and sensitive customer data before retention. QaCockpit reads provider artifacts through the authorized connection and exposes protected evidence only to permitted organization members.

Never place access tokens, cookies, Authorization headers, private keys, or production secrets in JUnit properties, stdout, screenshots, traces, or workflow inputs.