Generate code coverage reports on a live server

v1.1.0 2019-02-04 07:51 UTC


Build Status

This library should help you generate code coverage reports on a live server (it doesn't have to be a production server of course).

Install this library using:

composer require matthiasnoback/live-code-coverage

Collecting code coverage data

In your front controller (e.g. index.php), add the following:


use LiveCodeCoverage\LiveCodeCoverage;

$shutDownCodeCoverage = LiveCodeCoverage::bootstrap(
    __DIR__ . '/../var/coverage',
    __DIR__ . '/../phpunit.xml.dist'

// Run your web application now...

// This will save and store collected coverage data:
  • The first argument passed to LiveCodeCoverage::bootstrap() is a boolean that will be used to determine if code coverage is enabled at all. The example shows how you can use an environment variable for that.
  • The second argument is the directory where all the collected coverage data will be stored (*.cov files). If this directory doesn't exist yet, it will be created.
  • The third argument is the path to a PHPUnit configuration file. Its <filter> section will be used to configure the code coverage whitelist. For example, this phpunit.xml.dist file might look something like this:
<?xml version="1.0" encoding="utf-8"?>
            <directory suffix=".php">src</directory>

Any configuration directive that's available in PHPUnit works for this library too.

If you don't provide a PHPUnit configuration file, no filters will be applied, so you will get a coverage report for all the code in your project, including vendor and test code if applicable.

If your application is a legacy application which exit()s or die()s before execution reaches the end of your front controller, the bootstrap should be slightly different:

$shutDownCodeCoverage = LiveCodeCoverage::bootstrap(
    // ...

// Run your web application now...

Generating code coverage reports (HTML, Clover, etc.)

To merge all the coverage data and generate a report for it, install Sebastian Bergmann's phpcov tool. Run it like this (or in any other way you like):

phpcov merge --html=./coverage/html ./var/coverage


Please note that collecting code coverage data will make your application run much slower. Just see for yourself if that's acceptable.