Crate quick_junit

source
Expand description

quick-junit is a JUnit/XUnit XML data model and serializer for Rust. This crate allows users to create a JUnit report as an XML file. JUnit XML files are widely supported by test tooling.

This crate is built to serve the needs of cargo-nextest.

§Overview

The root element of a JUnit report is a Report. A Report consists of one or more TestSuite instances. A TestSuite instance consists of one or more TestCases.

The status (success, failure, error, or skipped) of a TestCase is represented by TestCaseStatus.

§Features

  • ✅ Serializing JUnit/XUnit to the Jenkins format.
  • ✅ Including test reruns using TestRerun
  • ✅ Including flaky tests
  • ✅ Including standard output and error
  • ✅ Automatically keeping track of success, failure and error counts
  • ✅ Arbitrary properties and extra attributes

This crate does not currently support deserializing JUnit XML. (PRs are welcome!)

§Examples

use quick_junit::*;

let mut report = Report::new("my-test-run");
let mut test_suite = TestSuite::new("my-test-suite");
let success_case = TestCase::new("success-case", TestCaseStatus::success());
let failure_case = TestCase::new("failure-case", TestCaseStatus::non_success(NonSuccessKind::Failure));
test_suite.add_test_cases([success_case, failure_case]);
report.add_test_suite(test_suite);

const EXPECTED_XML: &str = r#"<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="my-test-run" tests="2" failures="1" errors="0">
    <testsuite name="my-test-suite" tests="2" disabled="0" errors="0" failures="1">
        <testcase name="success-case">
        </testcase>
        <testcase name="failure-case">
            <failure/>
        </testcase>
    </testsuite>
</testsuites>
"#;

assert_eq!(report.to_string().unwrap(), EXPECTED_XML);

For a more comprehensive example, including reruns and flaky tests, see fixture_tests.rs.

§Minimum supported Rust version (MSRV)

The minimum supported Rust version is Rust 1.70. At any time, Rust versions from at least the last 6 months will be supported.

While this crate is a pre-release (0.x.x) it may have its MSRV bumped in a patch release. Once a crate has reached 1.x, any MSRV bump will be accompanied with a new minor version.

§Alternatives

  • junit-report: Older, more mature project. Doesn’t appear to support flaky tests or arbitrary properties as of version 0.8.3.

Structs§

Enums§

Type Aliases§

  • A unique identifier associated with a report.