10 PHP-Testtools für WordPress-Plugins
Veröffentlicht: 2022-08-05Keine Software ist fehlerfrei. Dies ist ein Axiom, das für jede Programmiersprache und jede Anwendung gilt.
Wenn diese Fehler auf Ihrer Website in der Produktion eingesetzt werden, können Sie nachteilige Folgen unterschiedlichen Schweregrades erleiden. Dies sind einige Beispiele, die von ärgerlich bis wirtschaftlich schädlich reichen:
- Mild: Ein Benutzer kann nicht auf einen defekten Link klicken.
- Ernsthaft: Der „Senden“-Button eines Kontaktformulars funktioniert nicht, was der Nutzer erst nach dem Verfassen seiner Nachricht bemerkt.
- Schwerwiegend: Ein Zahlungs-Gateway, das nicht richtig konfiguriert ist, führt dazu, dass Benutzer keine Produkte in Ihrem E-Commerce-Shop kaufen können, wodurch die Website verlassen wird.
Kein einzelnes Tool reicht aus, um alle Aspekte des Testens einer Anwendung zu bewältigen ... aber mit ein wenig Hilfe von diesem Leitfaden können Sie einen Stack für Ihr nächstes Projekt
Kein einzelnes Tool reicht aus, um alle Aspekte des Testens einer Anwendung aus allen möglichen Blickwinkeln zu behandeln. In der Tat ist es neben dem Auffinden von Fehlern wichtig, zusätzliche Tests durchzuführen, um andere Funktionen der Anwendung zu validieren, wie zum Beispiel:
- Zugänglichkeit und Benutzerfreundlichkeit
- Akzeptable Leistung
- Verkehr und Lastumschlag
In diesem Artikel sehen wir uns 10 Tools an, die von der Open-Source-Community erstellt wurden und dabei helfen können, einen Stack zum Testen von PHP-Code in WordPress-Plugins zu erstellen. Einige dieser Tools wurden speziell zum Testen von PHP-Code entwickelt; andere sind zum Testen von WordPress-Code gedacht; und ein paar andere Tools wurden erstellt, um einige generische Funktionen zu handhaben, die zum Testen nützlich sind.
1. DevKinsta
DevKinsta ist eine lokale Entwicklungssuite für WordPress-Seiten. Durch die Angabe einiger grundlegender Details wird sofort eine lokale Instanz einer WordPress-Site installiert, die mit mehreren nützlichen Entwicklungstools wie einem E-Mail-Posteingang, einem Datenbankmanager und einer Protokollierung zur einfacheren Fehlerbehebung geliefert wird.
DevKinsta wird normalerweise von Entwicklern und Designern verwendet, wenn sie ihre WordPress-Themes und Plugins erstellen. Er kann aber auch als lokaler Webserver zur Durchführung von Integrations- und Funktionstests verwendet werden. Dies wird zusammen mit einem HTTP-Tool erreicht, mit dem Sie überprüfen können, ob Ihre Antwortinhalte und Header korrekt sind.
Die wichtigsten Funktionen von DevKinsta sind:
- Einfach eine neue WordPress-Umgebung erstellen und löschen, wenn sie nicht mehr benötigt wird
- Ermöglicht das Testen gegen jede unterstützte Version von PHP und WordPress und jede Kombination davon
- Lässt sich nahtlos in MyKinsta integrieren, wo Benutzer ein externes Backup ihrer Websites und Daten erstellen können
2. PHPUnit
PHPUnit ist ein programmiererorientiertes Testframework für PHP. Es ist das beliebteste Framework zum Ausführen von Komponententests 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 helfen sicherzustellen, dass keine Code-Regressionen eingeführt wurden (dh Änderungen an einem Teil des Codes haben nicht woanders zu Problemen geführt).
Die Top-Features von PHPUnit sind:
- Testen neuer Funktionen
- Neu umgestaltete Codevalidierung
- Kann vollständig automatisiert und innerhalb des Continuous-Integration-Prozesses Ihrer Wahl ausgeführt werden
- Debuggen
- Automatische Dokumentation der erwarteten Nutzung durch Funktionsaufruf und Einschränkungen
- Ermöglicht den Test-Driven-Development-Ansatz (TDD), bei dem Entwickler zuerst Tests und dann Funktionalität erstellen
3. Gehirnaffe
Brain Monkey ist ein Testprogramm für PHP und WordPress. Es bietet Framework-unabhängige Tools, mit denen Sie PHP-Methoden neu definieren und das Verhalten jeder PHP-Anwendung testen können. Es bietet auch Tools zum Testen von WordPress-Code.
Die Top-Features von Brain Monkey sind:
- Ermöglicht Komponententests die Interaktion mit externen, nicht geladenen Bibliotheken
- Ermöglicht den Aufruf von WordPress-Funktionen, ohne dass die WordPress-Umgebung geladen werden muss
- Kann behaupten, dass WordPress-Funktionen (wie
add_filter
oderdo_action
) die Funktionalität wie erwartet aufrufen
4. Gehirnfälscher
Brain Faker verwendet Faker (eine beliebte PHP-Bibliothek zum Generieren gefälschter Daten) und Brain Monkey, um eine einfache Generierung gefälschter WordPress-Objekte und zugehöriger Funktionen zum Testen bereitzustellen, darunter:
-
WP_Post
Instanzen und mockbezogene Funktionen wieget_post
undget_post_field
-
WP_User
Instanzen und mockbezogene Funktionen wieget_userdata
,get_user_by
,user_can
und mehr -
WP_Term
Instanzen und mockbezogene Funktionen wieget_term
undget_term_by
-
WP_Comment
Instanzen -
WP_Site
Instanzen und mockbezogene Funktionen wieget_site
-
WP_Post_Type
Instanzen und mockbezogene Funktionen wieget_post_type_object
undpost_type_exists
-
WP_Taxonomy
Instanzen und mockbezogene Funktionen wieget_taxonomy
undtaxonomy_exists
-
WP_Error
Instanzen
Die Top-Features von Brain Faker sind:
- Fügt gefälschte, aber realistische WordPress-Daten in den Komponententest ein – der Zugriff auf das Änderungsdatum eines gefälschten Beitrags verhält sich wie ein Datum (z. B.
2022-04-17T13:06:58+00:00
"John Smith"
, der Name eines Benutzers passt (z"John Smith"
), eine gefälschte Beitragsinstanz wird von einer gefälschten Benutzerinstanz erstellt und so weiter - Gefälschte Daten können vorab bereitgestellt oder zufällig generiert werden
- Erweiterbar – Entwickler können Klassen und Funktionen aus ihren eigenen WordPress-Plugins simulieren
5. Spott
Mockery ist ein einfaches, aber flexibles PHP-Mock-Objekt-Framework, das zusammen mit PHPUnit, PHPSpec oder einem anderen Unit-Testing-Framework verwendet werden soll. Es bietet ein doppeltes Testframework, das in der Lage ist, alle möglichen Objektoperationen und -interaktionen unter Verwendung einer für Menschen lesbaren domänenspezifischen Sprache (DSL) zu definieren.
Die Top-Features von Mockery sind:
- Ermöglicht die flexible Generierung von Mock-Objekten und Stubs (die vordefinierte vorgefertigte Antworten auf bestimmte Aufrufe während Tests bereitstellen)
- Verbessert die Testisolationsfähigkeiten von PHPUnit
- Flexible API, um verspottete Erwartungen auszudrücken und so weit wie möglich eine Beschreibung in natürlicher Sprache nachzuahmen (z. B.
$mock->shouldReceive('myMethod')->once()->andReturn('Hello world!');
) - Komponententests mit In-Memory-Mock-Objekten, um den Zugriff auf langsamere Systeme (z. B. Datenbanken, Dateisysteme oder externe Dienste) zu vermeiden
- Kann sowohl deterministisches als auch nicht deterministisches Verhalten simulieren
6. Natives WordPress-Exporttool
Das native Exporttool von WordPress lädt die WordPress-Daten der Website als XML-Datei auf Ihr Gerät herunter, einschließlich Beiträge, Seiten, benutzerdefinierte Beitragstypen, Kommentare, benutzerdefinierte Felder, Kategorien, Tags, benutzerdefinierte Taxonomien, Benutzer und Medien. Die XML-Datei verfügt über ein benutzerdefiniertes Format (WordPress eXtended RSS- oder WXR-Datei genannt), das in jede WordPress-Site importiert werden kann.
Dieses Tool ist nicht speziell zum Testen konzipiert. Sein Nutzen ergibt sich jedoch aus der Möglichkeit, Snapshots der WordPress-Datenbank mit einem geeigneten Datensatz zu erstellen, die dann zum Testen verwendet werden können. Dies bedeutet, dass die WordPress-Site 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-Exporttools sind:
- Erstellung von Testdaten unter Verwendung einer tatsächlichen WordPress-Site
- Gemeinsam nutzbare Exportdatei der gesamten Datenbank
- Nützlich sowohl für Integrations- als auch für Unit-Tests
7. Fressen
Guzzle ist ein PHP-HTTP-Client, der das Senden von HTTP-Anfragen und die Integration mit Webdiensten vereinfacht.
Guzzle ist ein generisches Tool, daher ist das Testen nur einer seiner möglichen Anwendungsfälle. Zusammen mit einem lokalen Webserver wie DevKinsta ermöglicht Guzzle die Durchführung von Integrationstests: Sie können mit Guzzle eine HTTP-Anfrage an den Entwicklungs-Webserver senden und die Antwort dann einem Unit-Test in PHPUnit übergeben, der den Inhalt und die Header überprüft sind wie erwartet eingestellt.
Die Top-Features von Guzzle sind:
- Erfüllt die PHP-Standardempfehlung „PSR-7“ (für HTTP-Nachrichtenschnittstellen) und schließt Herstellerbindung aus
- Einfach und schnell
- Tests werden gegen eine tatsächliche WordPress-Site durchgeführt, um die Zuverlässigkeit zu erhöhen
- Kann aus Gründen der Einfachheit und Geschwindigkeit innerhalb von PHPUnit ausgeführt werden
- Integrationstests können automatisiert und dem Continuous-Integration-Prozess hinzugefügt werden
8. WP-CLI
WP-CLI ist die Befehlszeilenschnittstelle für WordPress. Damit können Sie Plugins aktualisieren, Multisite-Installationen konfigurieren und vieles mehr, ohne einen Webbrowser zu verwenden.
WP-CLI ist nicht speziell ein Testwerkzeug, aber das Testen gehört zu den vielen Anwendungsfällen. Nachdem Sie beispielsweise einen neuen Entwicklungs-Webserver eingerichtet haben, können Sie ein Bash-Skript ausführen, das WP-CLI-Befehle enthält, um Testdaten in die WordPress-Site zu importieren, die Benutzer mit den entsprechenden Rollen und Fähigkeiten zu erstellen, erforderliche Plugins von Drittanbietern zu installieren und andere solche Aufgaben.
Da das Skript mit den WP-CLI-Befehlen in Ihrem Git-Repository gespeichert werden kann, kann der Prozess zum Ausführen von Integrationstests dann automatisiert und in Ihren Continuous-Integration-Prozess integriert werden:
- Verwenden Sie das WordPress-Exporttool, um echte Testdaten zu generieren, und speichern Sie sie im Git-Repository.
- Verwenden Sie DevKinsta, um einen Webserver mit einer neuen WordPress-Instanz zu starten.
- Verwenden Sie WP-CLI, um die Testdaten in die WordPress-Site zu importieren (DevKinsta kann über WP-CLI betrieben werden).
- Erstellen Sie einen Einheitentest in PHPUnit, indem Sie Guzzle eine HTTP-Anforderung an den Webserver ausführen lassen, um den Inhalt und die Header Ihrer Antwort zu überprüfen.
Die wichtigsten Funktionen von WP-CLI sind:
- Ermöglicht die Remote-Ausführung von Befehlen für die WordPress-Instanz über eine Befehlszeilenschnittstelle
- Erweiterbar mit anderen Tools
- Verbessert die Fähigkeiten des Teststapels
- Ermöglicht die vollständige Automatisierung des Prozesses
9. XDebuggen
XDebug ist eine Erweiterung für PHP, die eine Reihe von Funktionen zur Verbesserung der PHP-Entwicklung bereitstellt, darunter Debugging, Verbesserungen der PHP-Fehlerberichterstattung, Ablaufverfolgung, Profilerstellung und Codeabdeckungsanalyse.
XDebug wird Ihnen nicht dabei helfen, Ihren Code zu testen, aber es hilft herauszufinden, wo der Fehler liegt. Besonders effektiv ist die Kombination von XDebug mit PHPUnit: Wenn ein Test fehlschlägt und Sie die Ursache des Problems nicht finden können, können Sie mit XDebug Breakpoints in den Unit-Test-Code einfügen. Wenn Sie den Komponententest erneut ausführen, wird das PHP-Skript an jedem dieser Haltepunkte angehalten, sodass Sie den aktuellen Status der Ausführung (Aufrufliste, Eigenschafts- und Objektwerte usw.) überprüfen und versuchen können, herauszufinden, was falsch ist.
Die wichtigsten Funktionen von XDebug sind:
- Verfügt über Integrationen für beliebte PHP-Editoren, einschließlich VS Code, PHPStorm und Sublime
- Profile, wie viel Zeit in jedem Funktionsaufruf verbracht wird und wie viel Speicher es verbraucht
- Viel leistungsfähiger als die einfache Verwendung von
var_dump
zum Debuggen von Code - Ermöglicht die spontane Änderung von Variablenwerten beim Anhalten an Haltepunkten
10. PHPStan
PHPStan ist ein statisches Analysetool für PHP, das entwickelt wurde, um Fehler im Code zu finden, noch bevor Tests geschrieben werden.
Das Ziel von PHPStan ist es, die Anzahl der Tests zu reduzieren, die Entwickler schreiben müssen. Dieses Tool ist das erste, das im Testing-Stack ausgeführt wird und präventiv so viele Fehler wie möglich abfängt. Nur solche Fehler, die nicht aus der statischen Analyse abgeleitet werden können (z. B. solche mit fehlerhafter Logik), müssen über Unit-Tests validiert werden.
PHPStan scannt die gesamte Codebasis und sucht nach Nichtübereinstimmungen. Beispielsweise kann der Antwortwert einer Funktion, die einen Float zurückgibt, keinem Funktionsparameter vom Typ Integer zugewiesen werden. Wann immer der Code ein solches Vorkommen enthält, ist dies ein potenzieller Fehler, und PHPStan wird Sie während der Entwicklungsphase darauf aufmerksam machen, direkt während Sie den Anwendungscode schreiben.
Die wichtigsten Funktionen von PHPStan sind:
- Automatisierung und Integration in Ihren bestehenden Continuous-Integration-Prozess
- Lokalisiert viele knifflige Fehler, wie z. B. Typkonflikte
- Durchsucht die gesamte Codebasis und findet Fehler in selten ausgeführten Codeabschnitten
- Organisiert in Ebenen zunehmender Komplexität, um eine schrittweise Integration zu ermöglichen
- Bietet Erweiterungen für die beliebtesten PHP-Frameworks und CMS, einschließlich Symfony, Laravel, Doctrine, Nette und WordPress
Zusammenfassung
Die Kosten dafür, dass sich Fehler unbemerkt in Ihre Anwendung in der Produktion einschleichen, können Ihrem Ruf und Ihrem Einkommen schaden, daher müssen Sie versuchen, sie zu beseitigen, bevor sie sich auf Ihre Benutzer auswirken.
Bei komplexen Anwendungen ist es fast unmöglich, sich zu 100 % darauf zu verlassen, dass keine Fehler enthalten sind. Aus diesem Grund müssen Sie einen Prozess einrichten, um während des anfänglichen Entwicklungszyklus so viele Fehler wie möglich zu finden und zu entfernen.
Mit einem gut konzipierten Test-Toolkit können Sie die Wahrscheinlichkeit, dass sich Ihre Anwendung auf unerwartete Weise verhält, erheblich minimieren. Die Open-Source-Community hat zahlreiche Tools entwickelt und zur Verfügung gestellt, um die verschiedenen Aspekte einer Anwendung zu testen, was Sie können – und sollten! — verwenden, um einen umfassenden Teststapel zu erstellen.
In diesem Artikel haben wir 10 Tools überprüft, die Ihnen helfen, Ihre Ziele zum Testen von PHP-Code in einem WordPress-Plugin zu erreichen.
Welche dieser Tools haben Sie für Ihr letztes Projekt verwendet? Teilen Sie uns im Kommentarbereich unten mit, was Sie damit gebaut haben!