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§

Property
Custom properties set during test execution, e.g. environment variables.
Report
The root element of a JUnit report.
SerializeError
An error that occurs while serializing a Report.
TestCase
Represents a single test case.
TestRerun
A rerun of a test.
TestSuite
Represents a single TestSuite.
XmlString
An owned string suitable for inclusion in XML.

Enums§

NonSuccessKind
Whether a test failure is “expected” or not.
ReportKind
A tag indicating the kind of report.
TestCaseStatus
Represents the success or failure of a test case.

Type Aliases§

ReportUuid
A unique identifier associated with a report.