Implementing Incremental Code Coverage for PHP Projects Using Xdebug, Git, and php-code-coverage
This article explains how to set up incremental code coverage for PHP applications by installing Xdebug, leveraging Git diff to identify changed files, and extending php-code-coverage to generate reports that highlight coverage gaps in newly added code, thereby improving test efficiency and reducing manual effort.
Code coverage is a useful metric for assessing test completeness; while 100% coverage does not guarantee bug‑free software, higher coverage generally correlates with fewer defects. The author describes a project where code volume grew rapidly and manual testing proved insufficient, prompting the adoption of automated, incremental coverage analysis.
Implementation Overview
The solution relies on three main components: xdebug for collecting raw coverage data, git to extract the incremental code changes, and php-code-coverage (a PHPUnit library) modified to merge the incremental information and produce a combined report.
Environment Dependencies
Xdebug – a PHP extension that gathers line‑level execution data.
Git – used to obtain the diff between the current commit and the previous tag.
php-code-coverage (version 6.0.7) – extended to accept the incremental diff and generate coverage reports in XML/HTML.
Step 1: Install Xdebug
Download the appropriate binary from the official site (e.g., http://xdebug.org.cn/download.php), place the .dll (Windows) or compile the .so (Linux) and enable it in php.ini with xdebug.mode=coverage. Verify installation with php -m – the output should list Xdebug.
Step 2: Collect Coverage Data
Configure auto_prepend_file in php.ini to load a bootstrap script that starts coverage when a specific trigger (e.g., a cookie named XDEBUG_COVERAGE_START) is present. In Nginx, check the cookie and forward the trigger via fastcgi_param to PHP.
Step 3: Obtain Incremental Code Information
Use the command
git diff $(git describe --tags --abbrev=0 $commit_id) $commit_idto list changes between the latest tag and the current commit. Parse the diff with regular expressions to produce a file list compatible with the coverage format.
Step 4: Generate the Coverage Report
Extend php-code-coverage to ingest the incremental file list from step 3, merge it with the raw Xdebug data, and output a report that highlights coverage for the newly added code.
The article concludes with screenshots of the setup and a brief promotion of the Qtest testing team, emphasizing the practical benefits of incremental coverage for reducing manual testing effort.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
360 Quality & Efficiency
360 Quality & Efficiency focuses on seamlessly integrating quality and efficiency in R&D, sharing 360’s internal best practices with industry peers to foster collaboration among Chinese enterprises and drive greater efficiency value.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
