quick-junit
Data model, serializer, and deserializer for JUnit/XUnit XML
0.7.0
11M downloads/mo
#2929 most downloaded on crates.io
nextest-rs/quick-junit
What this package is like to depend on
Last release 1 months ago
20 Jul 2026
Ships fairly regularly
a new release about every 4 months
Nearly every release is documented
notes for 21 of 21 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
22 releases · first in 2022
4 releases in the last 12 months
see the full history below
Release timeline
22 releases · Jan 2022 to Jul 2026Releases
latest 22-
0.7.020 Jul 2026Release notes
Open source →Changed
Skipped test counts
Skipped test counts are now reported via the
skippedattribute rather thandisabled. For<testsuite>,skippedmatches the llg schema and the Jenkins junit-10 schema, as well as pytest and Maven Surefire.- Each
<testsuite>now emitsskipped="N", and the root<testsuites>element now emits an aggregatedskipped="N"count. Previously the root didn't carry a skip count at all. - Root-level
skippedis a quick-junit extension. It follows the modern JUnit convention (as documented, for example, by testmoapp/junitxml) and is similar to quick-junit's existing extensions such asuuid. TestSuite'sdisabledfield has been renamed toskipped.Reportgains new publicskippedanddisabledfields, andReport::add_test_suitenow aggregates skip counts intoReport::skipped.
disabledis now modeled as a separate optional count on bothReportandTestSuite, distinct fromskipped. (disabledis intended to count tests that are disabled by design, such as googletest'sDISABLED_-prefixed tests. Note, however, that quick-junit doesn't have a notion of disabled tests at the moment.)Other changes
Reportis now#[non_exhaustive], consistent withTestSuiteandTestCase. Construct it viaReport::newand then assign fields, so that future field additions are non-breaking.- Childless
<testsuite>and<testcase>elements are now serialized as self-closing tags (for example,<testcase name="my-test"/>rather than<testcase name="my-test"></testcase>). The output is semantically identical XML, only more compact and idiomatic. The deserializer already accepted these self-closing forms, so serializing them means round-trip tests now cover those parse paths.
Release notes
Open source →Changed
Skipped test counts
Skipped test counts are now reported via the
skippedattribute rather thandisabled. For<testsuite>,skippedmatches the llg schema and the Jenkins junit-10 schema, as well as pytest and Maven Surefire.- Each
<testsuite>now emitsskipped="N", and the root<testsuites>element now emits an aggregatedskipped="N"count. Previously the root didn't carry a skip count at all. - Root-level
skippedis a quick-junit extension. It follows the modern JUnit convention (as documented, for example, by testmoapp/junitxml) and is similar to quick-junit's existing extensions such asuuid. TestSuite'sdisabledfield has been renamed toskipped.Reportgains new publicskippedanddisabledfields, andReport::add_test_suitenow aggregates skip counts intoReport::skipped.
disabledis now modeled as a separate optional count on bothReportandTestSuite, distinct fromskipped. (disabledis intended to count tests that are disabled by design, such as googletest'sDISABLED_-prefixed tests. Note, however, that quick-junit doesn't have a notion of disabled tests at the moment.)Other changes
Reportis now#[non_exhaustive], consistent withTestSuiteandTestCase. Construct it viaReport::newand then assign fields, so that future field additions are non-breaking.- Childless
<testsuite>and<testcase>elements are now serialized as self-closing tags (for example,<testcase name="my-test"/>rather than<testcase name="my-test"></testcase>). The output is semantically identical XML, only more compact and idiomatic. The deserializer already accepted these self-closing forms, so serializing them means round-trip tests now cover those parse paths.
- Each
-
0.6.102 Jul 2026Release notes
Open source →Updated
Internal dependency update:
quick-xmlupdated to 0.41.0. This resolves the following deserialize-time denial of service issues:Release notes
Open source →Updated
Internal dependency update:
quick-xmlupdated to 0.41.0. This resolves the following deserialize-time denial of service issues: -
0.6.013 Mar 2026Release notes
Open source →Changed
TestCaseStatus::NonSuccess'srerunsfield is now aNonSuccessRerunsstruct.NonSuccessRerunsbundles the list of reruns with aFlakyOrRerunkind that controls whether they are serialized as<flakyFailure>/<flakyError>or<rerunFailure>/<rerunError>. This enables representing tests that both failed and exhibited flaky behavior, as permitted by the JUnit XSD and as supported by an upcoming version of cargo-nextest.- The deserializer now handles all valid combinations of main status and rerun/flaky elements, modeled as a decision table, and errors out on unrepresentable combinations such as both
flakyFailureandrerunFailurebeing present. - MSRV updated to Rust 1.79.
Release notes
Open source →Changed
TestCaseStatus::NonSuccess'srerunsfield is now aNonSuccessRerunsstruct.NonSuccessRerunsbundles the list of reruns with aFlakyOrRerunkind that controls whether they are serialized as<flakyFailure>/<flakyError>or<rerunFailure>/<rerunError>. This enables representing tests that both failed and exhibited flaky behavior, as permitted by the JUnit XSD and as supported by an upcoming version of cargo-nextest.- The deserializer now handles all valid combinations of main status and rerun/flaky elements, modeled as a decision table, and errors out on unrepresentable combinations such as both
flakyFailureandrerunFailurebeing present. - MSRV updated to Rust 1.79.
-
0.5.211 Nov 2025Release notes
Open source →Added
- A long-requested feature: deserialization support for reports! The new deserializer has undergone fuzzing and property-based testing, and it is known to work with JUnit reports generated by quick-junit. The deserializer should work with JUnit reports generated by other tools as well. If it doesn't, fixes are welcome.
- The new
proptestfeature allows for generation of arbitraryReports.
Updated
Internal dependency update:
quick-xmlupdated to 0.38.3.Release notes
Open source →Added
- A long-requested feature: deserialization support for reports! The new deserializer has undergone fuzzing and property-based testing, and it is known to work with JUnit reports generated by quick-junit. The deserializer should work with JUnit reports generated by other tools as well. If it doesn't, fixes are welcome.
- The new
proptestfeature allows for generation of arbitraryReports.
Updated
Internal dependency update:
quick-xmlupdated to 0.38.3. -
0.5.118 Nov 2024 -
0.5.001 Sep 2024Release notes
Open source →Changed
- The
Outputtype, which strips invalid XML characters from a string, has been renamed to
XmlString. - All internal storage now uses
XmlStringrather thanString.
Release notes
Open source →Changed
- The
Outputtype, which strips invalid XML characters from a string, has been renamed toXmlString. - All internal storage now uses
XmlStringrather thanString.
- The
-
0.4.019 Apr 2024 -
0.3.608 Apr 2024 -
0.3.6-rc.108 Apr 2024 pre-release -
0.3.527 Oct 2023Release notes
Open source →Fixed
- Corrected the
rust-versionfield inCargo.tomlto1.70.
Changed
- The
chronodependency no longer imports theclockfeature. This helps cut down on the dependency tree. Thanks @littledivy for your first contribution!
- Corrected the
-
0.3.422 Oct 2023Release notes
Open source →Fixed
Output::newnow strips ANSI escapes as well. Thanks @MaienM for your first contribution!
Changed
- Internal dependency update:
quick-xmlupdated to 0.31.0. - MSRV updated to Rust 1.70.
-
0.3.307 Jul 2023Release notes
Open source →Added
TestCasenow has an extrapropertiessection and anadd_propertymethod, similar toTestSuite. Thanks @skycoop for your first contribution!
Changed
- Internal dependency update: quick-xml updated to 0.29.0.
- MSRV updated to Rust 1.66.
-
0.3.223 Nov 2022Release notes
Open source →Changed
- Internal dependency update: quick-xml updated to 0.26.0.
- MSRV updated to Rust 1.62.
-
0.3.123 Nov 2022 -
0.3.028 Jul 2022Release notes
Open source →Added
Reportcontains a newuuidfield with a unique identifier for a particular run. This is an extension to the JUnit spec.
-
0.2.021 Jun 2022Release notes
Open source →Changed
- quick-xml updated to 0.23.0.
- The error type is now defined by quick-junit, so that future breaking changes to quick-xml will not necessitate a breaking change to this crate.
- MSRV bumped to Rust 1.59.
-
0.1.513 Feb 2022 -
0.1.408 Feb 2022Release notes
Open source →Fixed
- In readme, fix link to cargo-nextest.
Changed
- Update repository location.
-
0.1.329 Jan 2022Release notes
Open source →- In the readme, replace Markdown checkboxes with Unicode ✅ to make them render properly on crates.io.
-
0.1.229 Jan 2022 -
0.1.129 Jan 2022 -
0.1.029 Jan 2022Release notes
Open source →- Initial version.
<!-- next-url --> [0.7.0]: https://github.com/nextest-rs/quick-junit/releases/tag/quick-junit-0.7.0 [0.6.1]: https://github.com/nextest-rs/quick-junit/releases/tag/quick-junit-0.6.1 [0.6.0]: https://github.com/nextest-rs/quick-junit/releases/tag/quick-junit-0.6.0 [0.5.2]: https://github.com/nextest-rs/quick-junit/releases/tag/quick-junit-0.5.2 [0.5.1]: https://github.com/nextest-rs/quick-junit/releases/tag/quick-junit-0.5.1 [0.5.0]: https://github.com/nextest-rs/quick-junit/releases/tag/quick-junit-0.5.0 [0.4.0]: https://github.com/nextest-rs/quick-junit/releases/tag/quick-junit-0.4.0 [0.3.6]: https://github.com/nextest-rs/quick-junit/releases/tag/quick-junit-0.3.6 [0.3.5]: https://github.com/nextest-rs/nextest/releases/tag/quick-junit-0.3.5 [0.3.4]: https://github.com/nextest-rs/nextest/releases/tag/quick-junit-0.3.4 [0.3.3]: https://github.com/nextest-rs/nextest/releases/tag/quick-junit-0.3.3 [0.3.2]: https://github.com/nextest-rs/nextest/releases/tag/quick-junit-0.3.2 [0.3.1]: https://github.com/nextest-rs/nextest/releases/tag/quick-junit-0.3.1 [0.3.0]: https://github.com/nextest-rs/nextest/releases/tag/quick-junit-0.3.0 [0.2.0]: https://github.com/nextest-rs/nextest/releases/tag/quick-junit-0.2.0 [0.1.5]: https://github.com/nextest-rs/nextest/releases/tag/quick-junit-0.1.5 [0.1.4]: https://github.com/nextest-rs/nextest/releases/tag/quick-junit-0.1.4 [0.1.3]: https://github.com/diem/diem-devtools/releases/tag/quick-junit-0.1.3 [0.1.2]: https://github.com/diem/diem-devtools/releases/tag/quick-junit-0.1.2 [0.1.1]: https://github.com/diem/diem-devtools/releases/tag/quick-junit-0.1.1 [0.1.0]: https://github.com/diem/diem-devtools/releases/tag/quick-junit-0.1.0