#cargo-test #junit #xml-format #testing #xml-parser

app junitify

Takes cargo test JSON and transform to JUnit XML

16 releases

0.1.17 Sep 22, 2022
0.1.15 Apr 3, 2022
0.1.14 Jan 16, 2022
0.1.12 Oct 2, 2021
0.1.8 Sep 25, 2021

#346 in Development tools

Download history 168/week @ 2023-12-10 165/week @ 2023-12-17 52/week @ 2023-12-24 102/week @ 2023-12-31 136/week @ 2024-01-07 184/week @ 2024-01-14 136/week @ 2024-01-21 155/week @ 2024-01-28 138/week @ 2024-02-04 179/week @ 2024-02-11 220/week @ 2024-02-18 113/week @ 2024-02-25 236/week @ 2024-03-03 351/week @ 2024-03-10 212/week @ 2024-03-17 106/week @ 2024-03-24

912 downloads per month

MIT license



junitify on crates.io pipeline

junitify takes JSON tests from stdin and writes JUnit XML results into stdout, or into a directory specified with --out.

This can be used to integrate with CI/CD platforms that uses JUnit XML format to show tests results in the UI, such as Gitlab.


cargo install junitify


cargo test -- --format=json -Z unstable-options --report-time | junitify --out tests/

Valgrind (Since 0.1.13)

Since 0.1.13 you can transform Valgrind XML report into JUnit reports, for example:


valgrind --tool=memcheck --xml=yes --xml-file=report.xml (cargo +nightly test -q --message-format=json --no-run | jq -r '.executable | select(. != null)') 
junitify -k valgrind --out tests/ -f report.xml

Non-Zero exit code (Since 0.1.14)

Since 0.1.14, you can now use -z to make junitify exit with a non-zero code when tests fail, also you can use -r to report all tests to stdout.

JUnit XML (Since 0.1.14)

Since 0.1.14, junitify is able to read the JUnit XML produced by itself, in companion with -z and -r, it will print tests results and exit with a non-zero code when there are failed tests.

JUnit XML parser works in the same way as the other parsers, it reads JUnit XML and outputs JUnit XML, it may change its contents and structure, and remove a bunch of values (in case of XMLs that were not generated by junitify).

New XML generator (Since 0.1.14)

Instead of using Handlebars, we now use quick-xml to generate XML, this will help with preserving the original output of tests without applying strange indentation, at the same time it provides a more maintainable code based more on serde.

We will be removing the handlebars dependency in the future (removed in 0.1.15).

Ignore parsing errors (Since 0.1.15)

Sometimes, the tests prints messages to the Stdout and Stderr, and they are piped to the Cargo output, mixing with the test suite output, this causes junitify to fail when parsing the output. To overcome this, you can use -i or --ignore-parse-errors to ignore parsing errors.

Be aware that, if the Cargo output json format changes (and it will, since --format=json is unstable), the junitify will ignore them instead of crashing, so only use it when your tests output are messing with the output of cargo test.

Example with -i:

cargo test -- --format=json -Z unstable-options --report-time | junitify -i --out tests/

Read the full changelog here Junitify 0.1.15 Changelog

CI/CD Docker Image

docker pull jonathanxd/junitify:latest

CI/CD Example

You can find an example of CI/CD usage in bindet .gitlab-ci.yml, and see how they look like in one of the pipeline reports.


~238K SLoC