Keine Software ist frei von Fehlern. Das ist ein Grundsatz, der für jede Programmiersprache und jede Anwendung gilt.

Wenn diese Bugs in deiner Website in der Produktion eingesetzt werden, kann das mehr oder weniger schwerwiegende Folgen für dich haben. Hier sind einige Beispiele, die von lästig bis wirtschaftlich schädlich reichen:

  • Mild: Ein Nutzer kann nicht auf einen defekten Link klicken.
  • Ernstzunehmend: Die Schaltfläche „Abschicken“ eines Kontaktformulars funktioniert nicht, was der/die Nutzer/in erst nach dem Verfassen seiner/ihrer Nachricht feststellt.
  • Schwerwiegend: Ein Zahlungsgateway ist nicht richtig konfiguriert, so dass die Nutzer/innen keine Produkte in deinem E-Commerce-Shop kaufen können und die Seite verlassen.


Kein einziges Tool reicht aus, um alle Aspekte des Testens einer Anwendung aus allen möglichen Blickwinkeln abzudecken. Denn neben dem Auffinden von Fehlern ist es wichtig, zusätzliche Tests durchzuführen, um andere Funktionen der Anwendung zu überprüfen, z. B:

In diesem Artikel stellen wir 10 Tools vor, die von der Open-Source-Gemeinde entwickelt wurden und die beim Testen von PHP-Code in WordPress-Plugins helfen können. Einige dieser Tools wurden speziell für das Testen von PHP-Code entwickelt, andere für das Testen von WordPress-Code und wieder andere für allgemeine Funktionen, die für das Testen nützlich sind.

1. DevKinsta

Details für eine lokale WordPress-Seite in DevKinsta
Details für eine lokale WordPress-Seite in DevKinsta

DevKinsta ist eine lokale Entwicklungssuite für WordPress-Websites. Durch die Angabe einiger grundlegender Daten wird sofort eine lokale Instanz einer WordPress-Site installiert, die mit verschiedenen nützlichen Entwicklungstools wie einem E-Mail-Posteingang, einem Datenbankmanager und einer Protokollierung zur einfacheren Fehlerbehebung ausgestattet ist.

DevKinsta wird normalerweise von Entwicklern und Designern für die Erstellung ihrer WordPress-Themes und Plugins verwendet. Es kann aber auch als lokaler Webserver für die Durchführung von Integrations- und Funktionstests verwendet werden. Dies geschieht in Verbindung mit einem HTTP-Tool, mit dem du überprüfen kannst, ob deine Antwortinhalte und Header korrekt sind.

Die wichtigsten Funktionen von DevKinsta sind:

2. PHPUnit

PHPUnit-Logo
PHPUnit-Logo

PHPUnit ist ein programmiererorientiertes Test-Framework für PHP. Es ist das beliebteste Framework für die Ausführung von Unit-Tests in PHP-Code, mit dem Ziel, einzelne Einheiten des Quellcodes zu validieren.

PHPUnit-Tests ermöglichen es Entwicklern, Probleme so früh wie möglich im Entwicklungszyklus zu finden und sicherzustellen, dass es keine Rückschritte im Code gibt (d. h., dass Änderungen an einem Teil des Codes nicht zu Problemen an anderer Stelle geführt haben).

Die wichtigsten Funktionen von PHPUnit sind:

  • Neue Funktionstests
  • Neu überarbeitete Code-Validierung
  • Kann vollständig automatisiert und innerhalb des Continuous Integration Prozesses deiner Wahl ausgeführt werden
  • Fehlersuche
  • Automatische Dokumentation der erwarteten Nutzung durch Funktionsaufrufe und Beschränkungen
  • Ermöglicht den Ansatz des Test-Driven Development (TDD), bei dem die Entwickler zuerst die Tests und dann die Funktionalität erstellen

3. Brain Monkey

Brain Monkey Logo
Brain Monkey Logo

Brain Monkey ist ein Testprogramm für PHP und WordPress. Es bietet Framework-unabhängige Tools, mit denen du PHP-Methoden umdefinieren und das Verhalten jeder PHP-Anwendung testen kannst. Brain Monkey bietet auch spezielle Tools für das Testen von WordPress-Code.

Die wichtigsten Funktionen von Brain Monkey sind:

  • Erlaubt Unit-Tests die Interaktion mit externen, nicht geladenen Bibliotheken
  • Ermöglicht den Aufruf von WordPress-Funktionen, ohne dass die WordPress-Umgebung geladen werden muss
  • Kann sicherstellen, dass WordPress-Funktionen (wie z. B. add_filter oder do_action) die erwarteten Funktionen aufrufen

4. Brain Faker

Brain Faker auf GitHub
Brain Faker auf GitHub

Brain Faker nutzt Faker (eine beliebte PHP-Bibliothek zur Generierung von gefälschten Daten) und Brain Monkey, um auf einfache Weise gefälschte WordPress-Objekte und zugehörige Funktionen zu erzeugen, die du ausprobieren kannst, darunter:

  • WP_Post instanzen und Mocks verwandter Funktionen wie get_post und get_post_field
  • WP_User instanzen und Attrappen verwandter Funktionen wie get_userdata, get_user_by, user_can, und mehr
  • WP_Term instanzen und ähnliche Funktionen wie get_term und get_term_by
  • WP_Comment instanzen
  • WP_Site instanzen, und Scheinfunktionen wie get_site
  • WP_Post_Type instanzen, und Scheinfunktionen wie get_post_type_object und post_type_exists
  • WP_Taxonomy instanzen, und Scheinfunktionen wie get_taxonomy und taxonomy_exists
  • WP_Error instances

Die wichtigsten Funktionen von Brain Faker sind:

  • Injiziert gefälschte, aber realistische WordPress-Daten in den Unit-Test – der Zugriff auf das Änderungsdatum eines gefälschten Beitrags verhält sich wie ein Datum (z. B. 2022-04-17T13:06:58+00:00), der Name eines Benutzers ist passend (z. B. "John Smith"), eine gefälschte Beitragsinstanz wird von einer gefälschten Benutzerinstanz verfasst, und so weiter
  • Die gefälschten Daten können vorab bereitgestellt oder zufällig generiert werden
  • Erweiterbar – Entwickler können Klassen und Funktionen aus ihren eigenen WordPress-Plugins nachbilden

5. Mockery

Mockery auf GitHub
Mockery auf GitHub

Mockery ist ein einfaches, aber flexibles PHP-Mock-Objekt-Framework, das zusammen mit PHPUnit, PHPSpec oder einem anderen Unit-Testing-Framework verwendet werden kann. Es bietet ein Test-Double-Framework, das alle möglichen Objektoperationen und Interaktionen in einer für Menschen lesbaren Domain Specific Language (DSL) definiert.

Die wichtigsten Funktionen von Mockery sind:

  • Ermöglicht die flexible Erzeugung von Mock-Objekten und Stubs (die vordefinierte Antworten auf bestimmte Aufrufe während der Tests liefern)
  • Verbessert die Fähigkeiten von PHPUnit zur Testisolierung
  • Flexible API zum Ausdrücken von Mocking-Erwartungen, die so weit wie möglich eine natürliche Sprachenbeschreibung nachahmt (z. B. $mock->shouldReceive('myMethod')->once()->andReturn('Hello world!');)
  • Unit-Tests mit In-Memory-Mock-Objekten, um den Zugriff auf langsamere Systeme (wie Datenbanken, Dateisysteme oder externe Dienste) zu vermeiden
  • Kann sowohl deterministisches als auch nicht-deterministisches Verhalten simulieren

6. WordPress Native Export Tool

Das WordPress Export Tool
Das WordPress Export Tool

Das WordPress Native Export Tool lädt die WordPress-Daten der Website als XML-Datei auf dein Gerät herunter, einschließlich der Beiträge, Seiten, benutzerdefinierten Beitragstypen, Kommentare, benutzerdefinierten Felder, Kategorien, Tags, benutzerdefinierten Taxonomien, Benutzer und Medien. Die XML-Datei hat ein eigenes Format (WordPress eXtended RSS oder WXR-Datei genannt), das in jede WordPress-Website importiert werden kann.

Dieses Tool ist nicht speziell zum Testen gedacht. Seine Nützlichkeit ergibt sich jedoch aus der Möglichkeit, Snapshots der WordPress-Datenbank mit einem geeigneten Datensatz zu erstellen, die dann für Tests verwendet werden können. Das bedeutet, dass die WordPress-Website in der Produktion, die echte Daten enthält, exportiert und in eine Entwicklungs- oder Staging-Instanz importiert werden kann, um neue Funktionen zu testen.

Die wichtigsten Funktionen des WordPress Export Tools sind:

  • Erstellung von Testdaten mit einer echten WordPress-Website
  • Austauschbare Exportdatei der gesamten Datenbank
  • Nützlich sowohl für Integrations- als auch für Unit-Tests

7. Guzzle

Guzzle-Logo
Guzzle-Logo

Guzzle ist ein PHP-HTTP-Client, der das Senden von HTTP-Anfragen und die Integration von Webdiensten erleichtert.

Guzzle ist ein generisches Tool, so dass das Testen nur einer der möglichen Anwendungsfälle ist. Zusammen mit einem lokalen Webserver wie DevKinsta ermöglicht Guzzle die Durchführung von Integrationstests: Du kannst mit Guzzle eine HTTP-Anfrage an den Entwicklungs-Webserver senden und dann die Antwort an einen Unit-Test in PHPUnit weiterleiten, der überprüft, ob der Inhalt und die Header wie erwartet gesetzt sind.

Die wichtigsten Funktionen von Guzzle sind:

  • Erfüllt die PHP-Standard-Empfehlung „PSR-7“ (für HTTP-Nachrichtenschnittstellen) und verhindert so die Abhängigkeit von einem bestimmten Anbieter
  • Einfach und schnell
  • Die Tests werden gegen eine echte WordPress-Website ausgeführt, was die Zuverlässigkeit erhöht
  • Einfache und schnelle Ausführung aus PHPUnit heraus
  • Integrationstests können automatisiert und in den kontinuierlichen Integrationsprozess integriert werden

8. WP-CLI

WP-CLI Logo
WP-CLI Logo

WP-CLI ist die Kommandozeilenschnittstelle für WordPress. Mit ihr kannst du Plugins aktualisieren, Multisite-Installationen konfigurieren und vieles mehr, ohne einen Webbrowser zu benutzen.

WP-CLI ist kein spezielles Testtool, aber Tests gehören zu seinen vielen Anwendungsfällen. Nachdem du zum Beispiel einen neuen Entwicklungs-Webserver eingerichtet hast, kannst du ein Bash-Skript mit WP-CLI-Befehlen ausführen, um Testdaten in die WordPress-Website zu importieren, Benutzer mit den entsprechenden Rollen und Fähigkeiten anzulegen, benötigte Plugins von Drittanbietern zu installieren und andere Aufgaben zu erledigen.

Da das Skript mit den WP-CLI-Befehlen in deinem Git-Repository gespeichert werden kann, lässt sich der Prozess zur Ausführung der Integrationstests automatisieren und in deinen Continuous Integration-Prozess integrieren:

  1. Nutze das WordPress Export Tool, um echte Testdaten zu erzeugen und sie im Git-Repository zu speichern.
  2. Verwende DevKinsta, um einen Webserver mit einer neuen WordPress-Instanz zu starten.
  3. Verwende WP-CLI, um die Testdaten in die WordPress-Site zu importieren (DevKinsta kann über WP-CLI bedient werden).
  4. Erstelle einen Unit-Test in PHPUnit, bei dem Guzzle eine HTTP-Anfrage an den Webserver ausführt, um den Inhalt und die Header deiner Antwort zu überprüfen.

Die wichtigsten Funktionen von WP-CLI sind:

  • Ermöglicht die Remote-Ausführung von Befehlen gegen die WordPress-Instanz über eine Befehlszeilenschnittstelle
  • Erweiterbar mit anderen Tools
  • Erweitert die Möglichkeiten des Testing Stacks
  • Ermöglicht die vollständige Automatisierung des Prozesses

9. XDebug

XDebug Logo
XDebug Logo

XDebug ist eine Erweiterung für PHP, die eine Reihe von Funktionen bietet, um die PHP-Entwicklung zu verbessern. Dazu gehören Debugging, Verbesserungen der PHP-Fehlerberichte, Tracing, Profiling und Code Coverage-Analyse.

XDebug hilft dir nicht beim Testen deines Codes, sondern dabei, herauszufinden, wo der Fehler liegt. Die Kombination von XDebug mit PHPUnit ist besonders effektiv: Wenn ein Test fehlschlägt und du die Ursache des Problems nicht finden kannst, kannst du mit XDebug Haltepunkte in den Code des Unit-Tests einfügen. Wenn du den Unit-Test erneut ausführst, wird das PHP-Skript an jedem dieser Haltepunkte angehalten. So kannst du den aktuellen Status der Ausführung (Aufrufstapel, Eigenschafts- und Objektwerte usw.) überprüfen und versuchen, den Fehler zu finden.

Die wichtigsten Funktionen von XDebug sind:

  • Bietet Integrationen für gängige PHP-Editoren wie VS Code, PHPStorm und Sublime
  • Zeichnet auf, wie viel Zeit für jeden Funktionsaufruf aufgewendet wird und wie viel Speicher er verbraucht
  • Viel leistungsfähiger als die einfache Verwendung von var_dump zum Debuggen von Code
  • Ermöglicht die Änderung von Variablenwerten während des Anhaltens an Breakpoints

10. PHPStan

PHPStan-Logo
PHPStan-Logo

PHPStan ist ein statisches Analysewerkzeug für PHP, mit dem man Fehler im Code finden kann, noch bevor man Tests schreibt.

Das Ziel von PHPStan ist es, die Anzahl der Tests zu reduzieren, die Entwickler schreiben müssen. Dieses Tool wird als erstes im Teststapel ausgeführt und fängt so viele Fehler wie möglich ab. Nur die Fehler, die sich nicht aus der statischen Analyse ableiten lassen (z. B. solche mit fehlerhafter Logik), müssen durch Unit-Tests überprüft werden.

PHPStan scannt die gesamte Codebasis und sucht nach Unstimmigkeiten. Zum Beispiel kann der Rückgabewert einer Funktion, die einen Float zurückgibt, nicht einem Funktionsparameter vom Typ Integer zugewiesen werden. Wenn der Code ein solches Vorkommnis enthält, ist das ein potenzieller Fehler, und PHPStan wird dich während der Entwicklungsphase darauf aufmerksam machen, noch während du den Anwendungscode schreibst.

Die wichtigsten Funktionen von PHPStan sind:

  • Automatisierung und Integration in deinen bestehenden Continuous Integration Prozess
  • Findet viele knifflige Fehler, wie z.B. Type Mismatches
  • Scannt die gesamte Codebasis und findet Fehler in selten ausgeführten Teilen des Codes
  • Organisiert in Stufen steigender Komplexität, um eine schrittweise Integration zu ermöglichen
  • Bietet Erweiterungen für die beliebtesten PHP-Frameworks und CMS, darunter Symfony, Laravel, Doctrine, Nette und WordPress

Zusammenfassung

Die Kosten, die entstehen, wenn sich Bugs unbemerkt in deine Anwendung einschleichen, können deinem Ruf und deinem Einkommen schaden. Deshalb musst du versuchen, sie auszumerzen, bevor sie deine Nutzer/innen beeinträchtigen.

Bei komplexen Anwendungen ist es fast unmöglich, zu 100 % sicher zu sein, dass sie keine Fehler enthalten. Deshalb musst du einen Prozess einrichten, um so viele Fehler wie möglich während des ersten Entwicklungszyklus zu finden und zu beseitigen.

Mit einem gut durchdachten Test-Toolkit kannst du die Wahrscheinlichkeit, dass sich deine Anwendung unerwartet verhält, erheblich verringern. Die Open-Source-Gemeinschaft hat eine Vielzahl von Tools zum Testen der verschiedenen Aspekte einer Anwendung entwickelt und zur Verfügung gestellt, die du nutzen kannst – und solltest! -, um ein umfassendes Testpaket zu erstellen.

In diesem Artikel stellen wir dir 10 Tools vor, mit denen du deine Ziele beim Testen von PHP-Code in einem WordPress-Plugin erreichen kannst.

Welches dieser Tools hast du für dein letztes Projekt verwendet? Lass uns in den Kommentaren wissen, was du damit gebaut hast!

Leonardo Losoviz

Leo writes about innovative web development trends, mostly concerning PHP, WordPress and GraphQL. You can find him at leoloso.com and twitter.com/losoviz.