Eine Einführung in das automatisierte Testen von WordPress-Plugins mit PHPUnit
Veröffentlicht: 2022-03-10WordPress ist ein beliebtes Content-Management-System zum Erstellen von Websites, da der Einstieg einfach ist und eine Vielzahl von Themen und Plugins zur Verfügung stehen, um den Funktionsumfang zu erweitern. Der Hauptgrund, warum WordPress viele Plugins und Themes hat, ist, dass es für Entwickler auf jedem Niveau einfach ist, mit der Erstellung eines zu beginnen. Die meisten seiner Entwickler sind unerfahren und schreiben keine Tests für ihre Arbeit, vielleicht aus den folgenden Gründen:
- Es gibt nicht viele Diskussionen über Komponententests, daher wissen sie möglicherweise nicht, dass Tests überhaupt möglich sind.
- Sie glauben nicht an den Wert des Schreibens von Tests für ihren Code, oder sie glauben, dass es sie verlangsamen wird.
- Sie glauben, dass es ausreicht zu testen, ob ihr Plugin oder Theme im Browser funktioniert.
In diesem Tutorial erfahren wir, was automatisiertes Testen ist und wie wichtig es ist, lernen PHPUnit und WP-CLI kennen, lernen, wie man einen Test schreibt und schließlich kontinuierliches automatisiertes Testen mit Travis CI einrichten.
Wir entscheiden uns für Travis CI, weil es eine nahtlose Integration mit GitHub bietet; Sie müssen nicht zu Ihrem Repository gehen und eine Verbindung zwischen ihnen herstellen. Und es ist kostenlos für öffentliche Repositories. Im Gegensatz zu seinen Konkurrenten wie Semaphore CI, GitLab CI und CircleCI bietet Travis CI keinen kostenlosen privaten Repository-Plan an. Keiner seiner Konkurrenten bietet jedoch eine so nahtlose Integration mit GitHub.
Was ist automatisiertes Testen?
Laut Wikipedia ist automatisiertes Testen oder Testautomatisierung die Verwendung spezieller Software (getrennt von der zu testenden Software), um die Ausführung von Tests und den Vergleich der tatsächlichen Ergebnisse mit den vorhergesagten Ergebnissen zu steuern. Die Testautomatisierung kann einige sich wiederholende, aber notwendige Aufgaben in einem bereits bestehenden formalisierten Testprozess automatisieren oder zusätzliche Tests durchführen, die manuell nur schwer durchzuführen wären.
Es gibt mehrere Arten von Tests. Von allen sind Unit-Tests am beliebtesten. Komponententests überprüfen, ob ein Codeblock, eine Funktion oder eine Klassenmethode das tut, was sie tun soll. In diesem Tutorial führen wir Komponententests durch.
Automatisierte Tests helfen, Fehler zu erkennen, damit sie nicht in die Produktion gelangen. Zweifellos würde die Fertigstellung eines codierten und getesteten Plugins länger dauern als eines, das nicht getestet wurde. Das resultierende Plugin würde jedoch weniger oder keine Fehler enthalten.
Sehen wir uns ein einfaches Beispiel aus der Praxis an, das zeigt, wie wertvoll Unit-Tests sind und wofür wir sie verwenden können.
Mein WordPress-Plugin zur Lead-Generierung verfügt über eine OptinThemesRepository
-Klasse mit einer add()
Methode zum Hinzufügen neuer Opt-in-Formularvorlagen und einer get()
Methode zum Abrufen einer Opt-in-Formularvorlage.
Um sicherzustellen, dass sowohl add()
als get()
jetzt und in Zukunft wie beabsichtigt funktionieren, habe ich den folgenden Test geschrieben.
public function testAddGetMethods() { $kick_optin_form = array( 'name' => 'Kick', 'optin_class' => 'kick', 'optin_type' => 'kick', 'screenshot' => MAILOPTIN_ASSETS_URL . 'img/kick.png' ); // add kick optin theme OptinThemesRepository::add($kick_optin_form); $result = OptinThemesRepository::get('kick'); $this->assertEquals($kick_optin_form, $result); }
Wenn dieser Test in Zukunft fehlschlägt, würde ich wissen, dass ein Problem vorliegt, und ich würde die genaue Funktion, Klassenmethode oder Stelle in meinem Plugin kennen, an der es auftritt.
Vorteile automatisierter Tests
Nachdem wir nun wissen, was automatisiertes Testen ist, sehen wir uns weitere Vorteile an.
Frühe Fehlererkennung
Während der Entwicklung von Software können Sie Fehler mit automatisierten Testwerkzeugen leicht finden. Dies kann viel Zeit und Mühe beim Aufspüren von Fehlern sparen.
Höhere Softwarequalität
Ein Tester mit langjähriger Erfahrung kann Fehler machen, wenn er immer wieder dieselben langweiligen manuellen Testskripte erstellen muss. Automatisiertes Testen liefert nicht nur genaue Ergebnisse, sondern spart auch Zeit.
Einfache und robuste Berichterstattung
Automatisierte Testwerkzeuge können jedes einzelne Testskript nachverfolgen. Die Ausführung jedes Testskripts kann in visuellen Protokollen eingesehen werden. Das visuelle Protokoll oder der Bericht zeigt normalerweise die Anzahl der ausgeführten Testskripte und ihren Status (z. B. bestanden, fehlgeschlagen oder übersprungen), ihre gemeldeten Fehler und Hinweise zur Behebung der Fehler an.
Bevor wir uns mit dem Einrichten und Schreiben von Tests befassen, erstellen wir ein einfaches Plugin, das als Fallstudie verwendet werden kann.
Erstellen eines WordPress-Plugins
Wir werden ein einfaches Plugin erstellen, das Google- und Bing-Meta-Tags zur Webmaster-Verifizierung in der Kopfzeile des WordPress-Frontends anzeigt. Das Plugin wird in meinem GitHub-Konto gehostet.
Der Code für dieses Plugin unten wird in die Datei wp-meta-verify.php
.
<?php class WP_Meta_Verify { public function __construct() { add_action('wp_head', \[$this, 'header_code']); } public function header_code() { $google_code = get_option('wpmv_google_code'); $bing_code = get_option('wpmv_google_code'); echo $this->google_site_verification($google_code); echo $this->bing_site_verification($bing_code); } public function google_site_verification($code) { return "<meta name=\"google-site-verification\" content=\"$code\">"; } public function bing_site_verification($code) { return "<meta name=\"msvalidate.01\" content=\"$code\">"; } } new WP_Meta_Verify();
Möglicherweise stellen Sie fest, dass wir keine Einstellungsseite in das Plugin aufgenommen haben, auf der Sie normalerweise den Google- und Bing-Bestätigungscode speichern würden. Ich habe dies absichtlich getan, um es einfach zu halten und unsere Aufmerksamkeit auf das Wesentliche zu lenken. get_option('wpmv_google_code')
und get_option('wpmv_bing_code')
gehen jedoch davon aus, dass es eine Einstellungsseite gibt, und sie rufen die Bestätigungscodes von dort ab.
Unit Testing Ein WordPress-Plugin
PHPUnit ist das De-facto -Testtool für PHP, während WP-CLI die offizielle Befehlszeilenschnittstelle für WordPress ist.
Vor WP-CLI war das Einrichten von PHPUnit-Tests für WordPress-Plugins ein Problem. WP-CLI hat eine großartige Anleitung zur Einrichtung; Wir werden jedoch die Schritte hier noch einmal durchgehen.
Installieren Sie PHPUnit
Führen Sie die folgenden Befehle aus, um PHPUnit zu installieren.
composer global require phpunit/phpunit:5.*
Hinweis: Wir installieren ausdrücklich 5.x
, weil WordPress dies unterstützt, wenn Sie PHP 7 oder höher ausführen, das ich auf meinem Computer habe. Installieren Sie PHPUnit 4.8, wenn Sie die PHP-Version 5 verwenden.
Führen phpunit --version
aus, um zu bestätigen, dass es installiert wurde.
Installieren Sie WP-CLI
Führen Sie die folgenden Befehle aus, um WP-CLI zu installieren.
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar chmod +x wp-cli.phar sudo mv wp-cli.phar /usr/local/bin/wp
Führen wp --info
aus, um die Installation zu bestätigen.
Nachdem wir PHPUnit und WP-CLI installiert haben, werden wir letzteres verwenden, um den Komponententest für das Plugin einzurichten.
Plugin-Einheitentest einrichten
Ändern Sie das Verzeichnis Ihres Terminals in das Stammverzeichnis Ihrer WordPress-Installation und führen Sie den folgenden Befehl aus, um die Plugin-Testdateien zu generieren.
wp scaffold plugin-tests wp-meta-verify
Unten sehen Sie, wie die Struktur des Plugins aussehen wird, nachdem der obige Befehl die Testdateien generiert hat.
|-bin/ |----install-wp-tests.sh |-tests/ |----bootstrap.php |----test-sample.php |-.travis.yml |-phpcs.xml.dist |-phpunit.xml.dist |-wp-meta-verify.php
Hinweis: Standardmäßig generiert der Befehl wp scaffold plugin-tests
eine Travis CI-Konfigurationsdatei. Sie können ein Flag --ci
angeben, um eine Konfigurationsdatei für den von Ihnen verwendeten CI-Dienst zu generieren, etwa so: wp scaffold plugin-tests --c gitlab
. Zum Zeitpunkt des Schreibens werden nur Travis CI, CircleCI und GitLab CI unterstützt.
Ändern Sie das Verzeichnis Ihres Terminals in das Verzeichnis Ihres Plugins und führen Sie das Installationsskript aus:
cd path-to-wordpress-plugin
bin/install-wp-tests.sh wordpress_test root '' localhost latest
Wenn Sie wie ich sind, dann ist Ihr MySQL-Benutzername nicht root
und das Passwort ist nicht leer. Angenommen, der Benutzername lautet homestead
und das Kennwort ist secret
. Sie würden das Installationsskript wie folgt ausführen:
bin/install-wp-tests.sh wordpress_test homestead 'secret' localhost latest
Führen Sie den Befehl phpunit
aus, um den Standardtest in tests/test-sample.php
.
Schreiben Sie unsere Plugin-Tests
Erstellen Sie eine Datei test-wp-meta-verify.php
im Ordner tests
. Es wird unsere Plugin-Tests mit der folgenden setUp
-Klasse enthalten.
<?php class WP_Meta_VerifyTest extends WP_UnitTestCase { public function setUp() { parent::setUp(); $this->class_instance = new WP_Meta_Verify(); } public function test_google_site_verification() { } public function test_bing_site_verification() { } }
Es ist erwähnenswert, dass eine Methode mit dem Präfix test
versehen werden muss, damit sie als Komponententest betrachtet werden kann. Eine bewährte Methode besteht darin, jeder Testklasse ein Test
Suffix hinzuzufügen, obwohl dies nicht erforderlich ist. Siehe WP_Meta_VerifyTest
.
Verwirrt darüber, was setUp()
tut? Sie müssen nur wissen, dass PHPUnit es einmal vor jeder Testmethode (und auf neuen Instanzen) der Testfallklasse ausführt. Es gibt auch tearDown()
, aber es wird nach jeder Testmethode ausgeführt. Es gibt auch setUpBeforeClass()
und tearDownAfterClass()
, die vor bzw. nach jedem Testfall ausgeführt werden. Ein Testfall ist im Grunde eine Klasse, die eine Reihe von Testmethoden enthält. Weitere Informationen finden Sie im WordPress-Handbuch und in der PHPUnit-Dokumentation.
Aus der obigen Klasse ist es ziemlich offensichtlich, dass wir Tests für die Methoden google_site_verification
und bing_site_verification
unserer Plugin-Klasse schreiben werden.
public function test_google_site_verification() { $meta_tag = $this->class_instance->google_site_verification('B6wFaCRbzWE42SyxSvKUOyyPxZfJCb5g'); $expected = '<meta name="google-site-verification" content="B6wFaCRbzWE42SyxSvKUOyyPxZfJCb5g">'; $this->assertEquals($expected, $meta_tag); }
public function test_bing_site_verification() { $meta_tag = $this->class_instance->bing_site_verification('B6wFaCRbzWE42SyxSvKUOyyPxZfJCb5g'); $expected = '<meta name="msvalidate.01" content="B6wFaCRbzWE42SyxSvKUOyyPxZfJCb5g">'; $this->assertEquals($expected, $meta_tag); }
Grundsätzlich stellen die Tests sicher, dass beide Methoden das richtige Meta-Tag zurückgeben, wenn Google- und Bing-Webmaster-Verifizierungscodes als Argumente an sie übergeben werden.
Führen Sie phpunit
, und Sie sollten eine Ausgabe sehen, die dem Screenshot unten ähnelt.
Kontinuierliches automatisiertes Testen mit Travis CI
Travis CI ist ein gehosteter, verteilter kontinuierlicher Integrationsdienst, der zum Erstellen und Testen von Softwareprojekten verwendet wird, die auf GitHub gehostet werden.
Um Travis CI nutzen zu können, müssen wir daher unser Plugin auf GitHub veröffentlichen. Gehen Sie voran und tun Sie das jetzt. Fühlen Sie sich frei, auf meine zu verweisen.
Dank WP-CLI haben wir es dank der .travis.yml
-Datei bereits in unserem Plugin eingerichtet.
Ich möchte erwähnen, dass ich mich nicht an die Programmierstandards von WordPress halte, sondern an die Empfehlungen der PHP-Standards, und meine Plugins erfordern mindestens PHP 5.4. Damit meine Builds nicht fehlschlagen, musste ich ihre Matrix durch die folgende in der .travis.yml
-Datei ersetzen.
matrix: include: - php: 7.1 env: WP_VERSION=latest - php: 7.0 env: WP_VERSION=latest - php: 5.6 env: WP_VERSION=latest - php: 5.6 env: WP_VERSION=trunk - php: 5.5 env: WP_VERSION=latest - php: 5.4 env: WP_VERSION=latest
Gehen Sie zu Travis CI und melden Sie sich mit Ihrem GitHub-Konto an. Folgen Sie der Anleitung auf dem Bildschirm, um Ihr GitHub-Repository hinzuzufügen.
Scrollen Sie nach der Kontosynchronisierung mit GitHub zum Repository Ihres Plugins und aktivieren Sie es.
Wenn Sie das nächste Mal eine Codeänderung vornehmen und auf GitHub pushen, wird ein Build auf Travis CI ausgelöst.
Ich habe ein erfolgreiches Build-Ergebnis für Ihr Sehvergnügen zur Verfügung gestellt.
Einpacken
Es ist kein Geheimnis, dass viele Entwickler, nicht nur WordPress-Entwickler, keine Tests für ihre Projekte schreiben, weil sie nichts davon wissen. Selbst einige der Erfahrenen und Fortgeschrittenen unter uns offenbar nicht, weil sie es für Zeitverschwendung halten.
Zugegeben, die Einrichtung automatisierter Tests kann langweilig und zeitaufwändig sein. Dennoch ist es eine Investition, die sicherstellt, dass sich nur wenige oder keine Fehler in Ihre Software einschleichen, wodurch Sie die Zeit und Ressourcen (einschließlich finanzieller) sparen, die Sie durch Fehler in Ihrer Software gekostet hätten.
Schreiben Sie immer einen Test, bevor Sie ein Feature implementieren, damit Sie es nicht vergessen oder sich faul fühlen, nachdem das Feature implementiert wurde.
Ich hoffe, Sie erkennen jetzt, wie wichtig es ist, Tests zu schreiben und wie Sie damit beginnen, einen für Ihr eigenes WordPress-Plugin zu schreiben.
Wenn Sie Fragen oder Kommentare haben, lassen Sie es mich bitte im Kommentarbereich wissen.