Eliminierung technischer Schulden mit PHPStan, Rector PHP und PHPUnit. Über 20 Jahre Praxiserfahrung in skalierbaren Backends.
- Aktualisiert:
- Autor:
- Roland Golla
Was ist phpcov?
phpcov ist ein Command-Line-Tool von Sebastian Bergmann und das offizielle CLI-Frontend für die php-code-coverage-Bibliothek. Es lässt sich als PHAR-Archiv oder über Phive installieren und ergänzt PHPUnit dort, wo einzelne Test-Läufe nicht ausreichen: beim Zusammenführen von Coverage-Daten aus parallelen oder verteilten Test-Runs. Mit über 21 Millionen Composer-Downloads gehört phpcov zum Standardwerkzeug in professionellen PHP-CI-Pipelines.
Der typische Anwendungsfall ist die CI-Pipeline: Mehrere Test-Suites laufen parallel, beispielsweise mit Paratest, jede schreibt eine .cov-Datei via --coverage-php. phpcov fasst diese Dateien mit dem Befehl phpcov merge zu einem einzigen Gesamtbericht zusammen, wahlweise als HTML, XML (OpenClover) oder serialisiertes PHP-Format. Das Tool ist Teil des PHPUnit-Ökosystems und wird aktiv von Sebastian Bergmann gepflegt.
Neben dem Mergen bietet phpcov den Befehl patch-coverage, der prüft, wie viele der im aktuellen Git-Diff geänderten Zeilen durch Tests abgedeckt sind. Das ist besonders wertvoll in Code-Review-Workflows und in Kombination mit Infection Framework für Mutation Testing. Bei Legacy-Codebasen, wo 100 % Gesamt-Coverage unrealistisch ist, liefert Patch-Coverage den entscheidenden Mehrwert: konkrete Aussagen über neue oder geänderte Zeilen.
Finde das passende Angebot für dein Projekt
Anfrage-Konfiguration
Starten Sie Ihre Anfrage
Gesetzliche Konformität & Inklusion. Optimierung von Performance und Conversion durch radikal nutzerzentriertes, universelles Design.
Skalierbare KI-Systeme mit echtem Code Ownership. CI/CD, Backup-Strategien und Infrastruktur, die mit deinem Team wächst.
Anfrage-Konfiguration
Worauf liegt dein Fokus?
Wähle die Expertise, die dein Projekt jetzt am dringendsten benötigt.
Installation und erste Schritte 2026
Die empfohlene Installationsmethode ist Phive, das PHP-Tool-Management-System. Alternativ steht phpcov als PHAR-Download zur Verfügung. Eine Installation über Composer wird vom Autor ausdrücklich nicht empfohlen, da phpcov ein eigenständiges CLI-Tool und keine Bibliothek ist.
# Installation via Phive (empfohlen)
phive install phpcov
./tools/phpcov --version
# Oder als PHAR-Download
wget https://phar.phpunit.de/phpcov-X.Y.phar
php phpcov-X.Y.phar --version
Nach der Installation läuft der typische Workflow in zwei Phasen: Zuerst generiert PHPUnit für jede Test-Suite eine .cov-Datei, dann führt phpcov diese zusammen.
# Phase 1: .cov-Dateien erzeugen
phpunit --coverage-php /tmp/coverage/FooTest.cov tests/FooTest
phpunit --coverage-php /tmp/coverage/BarTest.cov tests/BarTest
# Phase 2: Zusammenführen und Bericht erstellen
phpcov merge --html /tmp/coverage-html /tmp/coverage
phpcov merge --html /tmp/coverage-html --openclover /tmp/coverage.xml /tmp/coverage
patch-coverage: Coverage gezielt auf Änderungen prüfen
Der Befehl patch-coverage ist besonders in agilen Teams wertvoll: Er prüft nicht die gesamte Codebasis, sondern nur die Zeilen, die im aktuellen Git-Diff geändert wurden. Das Ergebnis zeigt konkret, wie viele der geänderten ausführbaren Zeilen durch Tests abgedeckt sind.
# Diff erzeugen und Coverage messen
git diff HEAD^1 > /tmp/patch.txt
phpunit --coverage-php /tmp/coverage.cov
# Patch-Coverage auswerten
phpcov patch-coverage /tmp/coverage.cov /tmp/patch.txt
# Ausgabe: 1 / 2 changed executable lines covered (50.00%)
Der Exit-Code ist maschinenlesbar: 0 = alle geänderten Zeilen abgedeckt, 1 = Lücken vorhanden, 2 = keine Änderungen erkennbar (meist ein Pfad-Mismatch). Mit --path-prefix lässt sich ein abweichender Basispfad angeben, wenn Diff und Coverage-Daten aus unterschiedlichen Verzeichnissen stammen.
phpcov in CI-Pipelines integrieren und Sales-Mehrwert nutzen
In modernen CI-Setups (GitHub Actions, GitLab CI, Jenkins) läuft phpcov typischerweise als letzter Schritt nach allen parallelen Test-Jobs. Jeder Job exportiert seine .cov-Datei als Artefakt, der Merge-Job sammelt sie ein und erstellt den Gesamtbericht. Das Ergebnis kann direkt an Tools wie Codecov oder SonarQube weitergegeben werden.
- Parallele Test-Suites mit Paratest: Jede Suite schreibt eine eigene
.cov-Datei - Merge-Step:
phpcov mergefasst alle Dateien zusammen - Mehrere Ausgabeformate gleichzeitig: HTML + OpenClover XML in einem Aufruf
- Pfad-Mapping:
--sourcefür Cross-Machine-Merges, wenn Quellpfade abweichen - Versionsprüfung deaktivieren:
--do-not-require-matching-php-versionfür heterogene Umgebungen
Warum das für Ihr Projekt relevant ist: Teams, die parallele Test-Suites einsetzen, verbringen ohne phpcov oft Stunden mit manuellen Coverage-Zusammenführungen oder akzeptieren lückige Berichte. Mit der richtigen Pipeline-Konfiguration liefert phpcov in Sekunden einen vollständigen Gesamtbericht — und damit eine solide Basis für Mutation Testing oder statische Analyse mit PHPStan.
NCA setzt phpcov in PHP- und Symfony-Projekten ein, um Coverage-Berichte aus verteilten Test-Läufen zusammenzuführen und Qualitätsgates in CI-Pipelines zu implementieren. Kostenlose Erstberatung: roland@nevercodealone.de | +49 176 24747727
Häufig gestellte Fragen zu phpcov (FAQ)
Von der Installation über den Merge-Workflow bis zur Patch-Coverage: Hier findest du Antworten auf die häufigsten Fragen rund um phpcov 2026.
Was ist phpcov und wofür wird es 2026 eingesetzt?
phpcov ist das offizielle CLI-Frontend für die php-code-coverage-Bibliothek von Sebastian Bergmann. Es wird eingesetzt, um .cov-Dateien aus mehreren parallelen PHPUnit-Läufen zu einem einzigen Coverage-Bericht zusammenzuführen und um gezielte Patch-Coverage für Git-Diffs zu berechnen.
Wie unterscheidet sich phpcov von PHPUnit 2026?
PHPUnit führt Tests aus und erzeugt dabei .cov-Dateien. phpcov verarbeitet diese Dateien im Nachgang: Es merged mehrere Reports zusammen, konvertiert sie in verschiedene Ausgabeformate (HTML, XML) und berechnet Patch-Coverage. Die beiden Tools ergänzen sich, ersetzen sich aber nicht.
Ist phpcov kostenlos nutzbar 2026?
Ja, phpcov ist Open Source (BSD-3-Clause) und kostenlos. Es wird als PHAR-Archiv von phar.phpunit.de bereitgestellt oder über Phive installiert. Eine Composer-Installation wird vom Autor nicht empfohlen, da es sich um ein eigenständiges Tool handelt.
Wie installiert man phpcov unter Linux und macOS 2026?
Die empfohlene Methode ist Phive: phive install phpcov. Alternativ per PHAR: wget https://phar.phpunit.de/phpcov-X.Y.phar, dann php phpcov-X.Y.phar --version zur Verifikation. X.Y mit der gewünschten Version ersetzen.
Was ist der Unterschied zwischen phpcov merge und patch-coverage 2026?
phpcov merge fasst mehrere .cov-Dateien zu einem Gesamtbericht zusammen. phpcov patch-coverage wertet aus, wie viele der im aktuellen Git-Diff geänderten Zeilen durch Tests abgedeckt sind. Beide Befehle arbeiten auf .cov-Dateien, verfolgen aber unterschiedliche Auswertungsziele.
Wie funktioniert phpcov merge in einer parallelen CI-Pipeline?
Jeder parallele Test-Job ruft PHPUnit mit --coverage-php auf und schreibt eine eigene .cov-Datei. Ein nachgelagerter Merge-Job sammelt alle .cov-Dateien in einem Verzeichnis und ruft phpcov merge --html /output /cov-dir auf. Das Ergebnis ist ein einziger HTML-Bericht über die Gesamt-Coverage.
Kann phpcov .cov-Dateien von verschiedenen PHP-Versionen mergen?
Standardmäßig verlangt phpcov identische PHP-Versionen, Coverage-Treiber und Git-Status. Mit dem Flag --do-not-require-matching-php-version lässt sich diese Prüfung deaktivieren, was heterogene CI-Umgebungen unterstützt.
Was bedeutet Exit-Code 2 bei phpcov patch-coverage?
Exit-Code 2 bedeutet, dass keine geänderten ausführbaren Zeilen erkannt wurden. Das deutet meist auf einen Pfad-Mismatch hin: Die Dateipfade im Diff stimmen nicht mit den Pfaden in den Coverage-Daten überein. Lösung: --path-prefix verwenden, um den korrekten Basispfad anzugeben.
Wie kombiniert man phpcov mit Codecov oder SonarQube?
phpcov merge kann neben HTML auch OpenClover XML (--openclover) ausgeben. Dieses XML-Format ist kompatibel mit Codecov und SonarQube. Mehrere Ausgabeformate lassen sich in einem einzigen Merge-Aufruf kombinieren.
Muss phpcov auf dem gleichen Server laufen wie die Tests?
Nein. Mit der Option --source kann ein abweichender Quellpfad angegeben werden. Das ist nützlich, wenn .cov-Dateien auf einem Build-Server erzeugt wurden, der Merge aber auf einer anderen Maschine mit abweichendem Dateipfad stattfindet.
Ist phpcov DSGVO-konform einsetzbar 2026?
phpcov ist ein lokal laufendes CLI-Tool ohne externe Datenübertragung. Es verarbeitet ausschließlich lokale .cov-Dateien und sendet keine Daten an externe Server. DSGVO-Relevanz entsteht erst, wenn die generierten Berichte auf externe Dienste wie Codecov hochgeladen werden.