Create a diff between 2 junit-files

0.5.0 2017-01-27 12:06 UTC


Build Status Code Climate Test Coverage Coverage Status Scrutinizer Code Quality Codacy Badge SensioLabsInsight

Latest Stable Version Total Downloads License Dependency Status composer.lock


A small CLI to check which tests have changed between test runs.

This software is in an early alpha-stage. PRs and improvement-ideas are more than welcome.


JUnitDiff can be installed in one of the two following ways:


Run this in your projects root-folder to include JUnitDiff as development-dependency

$ composer global require --dev org_heigl/junitdiff


Download the latest release as PHAR-file from the release-page.

The releases are signed using the JUNitDiff GPG-Key with ID AE11B9CEBADB342A and Fingerprint A84C BFAC 7147 9C6C E37E FF47 AE11 B9CE BADB 342A.

You can verify the phar-file using these commands:

gpg --keyserver --recv-key 0xAE11B9CEBADB342A
gpg --fingerprint AE11B9CEBADB342A
gpg --verify junitdiff.phar.asc junitdiff.phar

Feel free to rename the file junitdiff.phar to junitdiff for easier execution.


JUnitDiff compares two JUnit log files which can be generated with e.g. phpunit.

$ phpunit --log-junit logfile.xml

When you have two JUnit log files from two different test runs available you can check which tests have changed between those with junitdiff.

$ php junitdiff.diff compare </path/to/first/logfile> </path/to/last/logfile>

An example output might be:

[o] Test MyTest::testStoringIdWorks changed from success to error
[+] New Test MyTest::testStoringIdWorksBetter with data set #7
[-] Removed Test MyTest::testStoringIdWorksBest


PHPUnit adds information about skipped or ignored tests into the JUnit-lof file starting with PHPUnit 6.0! So files created with a previous version do not provide information about skipped or ignored tests. (Thanks to Sebastian Bergmann for that info!) Until Issue 3 is resolved they will not be shown in the output! But as they are ignored or skipped and therefore not executed they are just like not existing tests at all, so it shouldn't be an issue.