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.
- ✅ Deserializing JUnit/XUnit XML back to Rust data structures
- ✅ Including test reruns using
TestRerun - ✅ Including flaky tests
- ✅ Including standard output and error
- ✅ Filtering out invalid XML characters (eg ANSI escape codes) from the output
- ✅ Automatically keeping track of success, failure and error counts
- ✅ Arbitrary properties and extra attributes
§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.
§Optional features
- proptest: Generate
Arbitraryinstances for use with proptest. Not enabled by default.
§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§
- Deserialize
Error - An error that occurs while deserializing a
Report. - Property
- Custom properties set during test execution, e.g. environment variables.
- Report
- The root element of a JUnit report.
- Serialize
Error - An error that occurs while serializing a
Report. - Test
Case - Represents a single test case.
- Test
Rerun - A rerun of a test.
- Test
Suite - Represents a single TestSuite.
- XmlString
- An owned string suitable for inclusion in XML.
Enums§
- Deserialize
Error Kind - The kind of error that occurred during deserialization.
- NonSuccess
Kind - Whether a test failure is “expected” or not.
- Path
Element - Represents a location in the XML document structure.
- Report
Kind - A tag indicating the kind of report.
- Test
Case Status - Represents the success or failure of a test case.
Type Aliases§
- Report
Uuid - A unique identifier associated with a report.