O introducere în testarea automată a pluginurilor WordPress cu PHPUnit
Publicat: 2022-03-10WordPress este un sistem popular de gestionare a conținutului pentru construirea de site-uri web, deoarece este ușor de început și o mulțime de teme și pluginuri sunt disponibile pentru a-și extinde setul de caracteristici. Principalul motiv pentru care WordPress are o mulțime de plugin-uri și teme este că este ușor pentru dezvoltatorii de orice nivel să înceapă să construiască unul. Majoritatea dezvoltatorilor săi nu au experiență și nu scriu teste pentru munca lor, poate din următoarele motive:
- Nu există multe discuții despre testarea unitară, așa că s-ar putea să nu știe că testarea este posibilă.
- Ei nu cred în valoarea scrierii de teste pentru codul lor sau cred că le va încetini.
- Ei cred că testarea pentru a vedea dacă pluginul sau tema lor funcționează în browser este suficientă.
În acest tutorial, vom afla ce este testarea automată și importanța acesteia, vom cunoaște PHPUnit și WP-CLI, vom învăța cum să scriem un test și, în final, vom configura testarea automată continuă cu Travis CI.
Optăm să folosim Travis CI, deoarece oferă o integrare perfectă cu GitHub; nu trebuie să mergeți la depozitul dvs. și să configurați nicio conexiune între ele. Și este gratuit pentru depozitele publice. Spre deosebire de concurenții săi, cum ar fi Semaphore CI, GitLab CI și CircleCI, Travis CI nu oferă un plan de depozit privat gratuit. Cu toate acestea, niciunul dintre concurenții săi nu oferă o integrare perfectă cu GitHub așa cum o face.
Ce este testarea automată?
Conform Wikipedia, testarea automată sau automatizarea testelor este utilizarea unui software special (separat de software-ul testat) pentru a controla execuția testelor și compararea rezultatelor reale cu rezultatele prognozate. Automatizarea testelor poate automatiza unele sarcini repetitive, dar necesare într-un proces de testare formalizat deja implementat, sau poate efectua teste suplimentare care ar fi dificil de realizat manual.
Există mai multe tipuri de testare. Dintre toate, testarea unitară este cea mai populară. Testele unitare verifică dacă un bloc de cod, o funcție sau o metodă de clasă face ceea ce este intenționat să facă. Vom face teste unitare în acest tutorial.
Testarea automată ajută la detectarea erorilor, astfel încât acestea să nu ajungă în producție. Fără îndoială, un plugin codificat și testat ar dura mai mult decât unul care nu este testat. Cu toate acestea, pluginul rezultat ar conține mai puține erori sau deloc.
Să vedem un exemplu simplu din lumea reală a modului în care testele unitare sunt neprețuite și pentru ce le putem folosi.
Pluginul meu WordPress de generare de clienți potențiali are o clasă OptinThemesRepository
, cu o metodă add()
pentru adăugarea de noi șabloane de formular de înscriere și o metodă get()
pentru preluarea unui șablon de formular de înscriere.
Pentru a ne asigura că atât add()
cât și get()
funcționează așa cum este intenționat acum și în viitor, am scris testul de mai jos.
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); }
Dacă, în viitor, acest test a început să eșueze, aș ști că există o problemă și aș ști exact funcția, metoda clasei sau locul din pluginul meu în care are loc.
Beneficiile testării automate
Acum că știm ce este testarea automată, să vedem mai multe beneficii.
Detectarea timpurie a erorilor
În timpul dezvoltării software-ului, puteți găsi cu ușurință erori cu instrumente automate de testare. Acest lucru poate economisi mult timp și efort în urmărirea erorilor.
Calitate mai înaltă a software-ului
Un tester cu mulți ani de experiență poate face greșeli atunci când trebuie să pregătească din nou și din nou aceleași scripturi de testare manuale plictisitoare. Testarea automată nu numai că oferă rezultate precise, dar și economisește timp.
Raportare simplă și robustă
Instrumentele automate de testare pot urmări fiecare script de testare. Execuția fiecărui script de testare poate fi văzută în jurnalele vizuale. Jurnalul vizual sau raportul afișează, de obicei, numărul de scripturi de testare executate și starea acestora (de exemplu, trecute, eșuate sau ignorate), erorile raportate și indicii despre cum să le remediați.
Înainte de a trece peste cum să configurați și să scriem teste, să creăm un plugin simplu pe care să îl folosim ca studiu de caz.
Construirea unui plugin WordPress
Vom construi un plugin simplu care afișează metaetichete de verificare Google și Bing pentru webmasteri în antetul front-end-ului WordPress. Pluginul este găzduit în contul meu GitHub.
Codul pentru acest plugin de mai jos va merge în fișierul 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();
S-ar putea să observați că nu am inclus o pagină de setări în plugin, unde de obicei ați salva codul de verificare Google și Bing. Am făcut acest lucru intenționat pentru a rămâne simplu și pentru a ne concentra atenția asupra a ceea ce contează cel mai mult. Cu toate acestea, get_option('wpmv_google_code')
și get_option('wpmv_bing_code')
presupun că există o pagină de setări și preiau codurile de verificare de acolo.
Testarea unitară a unui plugin WordPress
PHPUnit este instrumentul de testare de facto pentru PHP, în timp ce WP-CLI este interfața oficială de linie de comandă pentru WordPress.
Înainte de WP-CLI, configurarea testării PHPUnit pentru pluginurile WordPress era o durere. WP-CLI are un ghid grozav pentru configurare; totuși, vom trece în continuare peste pașii aici.
Instalați PHPUnit
Pentru a instala PHPUnit, executați următoarele comenzi.
composer global require phpunit/phpunit:5.*
Notă: instalăm în mod explicit 5.x
, deoarece asta acceptă WordPress atunci când rulați PHP 7 sau o versiune superioară, pe care îl am pe computerul meu. Instalați PHPUnit 4.8 dacă rulați PHP versiunea 5.
Rulați phpunit --version
pentru a confirma că a fost instalat.
Instalați WP-CLI
Pentru a instala WP-CLI, executați următoarele comenzi.
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
Rulați wp --info
pentru a confirma instalarea acestuia.
După ce au instalat PHPUnit și WP-CLI, îl vom folosi pe acesta din urmă pentru a configura testul unitar pentru plugin.
Configurați testul unității de plugin
Schimbați directorul terminalului la rădăcina instalării WordPress și rulați comanda de mai jos pentru a genera fișierele de testare a pluginului.
wp scaffold plugin-tests wp-meta-verify
Mai jos este cum va arăta structura pluginului după ce comanda de mai sus generează fișierele de testare.
|-bin/ |----install-wp-tests.sh |-tests/ |----bootstrap.php |----test-sample.php |-.travis.yml |-phpcs.xml.dist |-phpunit.xml.dist |-wp-meta-verify.php
Notă: În mod implicit, comanda wp scaffold plugin-tests
generează un fișier de configurare Travis CI. Puteți specifica un --ci
pentru a genera un fișier de configurare pentru serviciul CI pe care îl utilizați, astfel: wp scaffold plugin-tests --c gitlab
. La momentul scrierii, doar Travis CI, CircleCI și GitLab CI sunt acceptate.
Schimbați directorul terminalului în directorul pluginului și rulați scriptul de instalare:
cd path-to-wordpress-plugin
bin/install-wp-tests.sh wordpress_test root '' localhost latest
Dacă sunteți ca mine, atunci numele dvs. de utilizator MySQL nu este root
și parola nu este goală. De exemplu, să presupunem că numele de utilizator este homestead
și parola este secret
. Veți rula scriptul de instalare astfel:
bin/install-wp-tests.sh wordpress_test homestead 'secret' localhost latest
Rulați comanda phpunit
pentru a rula testul implicit în tests/test-sample.php
.
Scrieți testele noastre de plugin
Creați un fișier test-wp-meta-verify.php
în folderul tests
. Acesta va conține testele noastre de plugin cu următoarea clasă de setUp
.
<?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() { } }
Este demn de remarcat faptul că, pentru ca o metodă să fie considerată un test unitar, ea trebuie să fie prefixată cu test
. O bună practică este să adăugați un sufix Test
la fiecare clasă de test, deși nu este obligatoriu. Vedeți WP_Meta_VerifyTest
.
Sunteți confuz cu privire la ce face setUp()
? Trebuie doar să știți că PHPUnit îl rulează o dată înainte de fiecare metodă de testare (și pe instanțe noi) din clasa de caz de testare. Există și tearDown()
, dar este rulat după fiecare metodă de testare. Există, de asemenea, setUpBeforeClass()
și tearDownAfterClass()
, care rulează înainte și, respectiv, după fiecare caz de testare. Un caz de testare este practic o clasă care conține o serie de metode de testare. Consultați manualul WordPress și documentația PHPUnit pentru mai multe informații.
Din clasa de mai sus, este destul de evident că vom scrie teste pentru metodele google_site_verification
și bing_site_verification
ale clasei noastre de pluginuri.
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); }
Practic, testele vor asigura că ambele metode returnează metaeticheta corectă atunci când le sunt transmise codurile de verificare Google și Bing pentru webmasteri ca argumente.
Rulați phpunit
și ar trebui să vedeți o ieșire similară cu captura de ecran de mai jos.
Testare automată continuă cu Travis CI
Travis CI este un serviciu de integrare continuă găzduit, distribuit, folosit pentru a construi și testa proiecte software găzduite pe GitHub.
Prin urmare, pentru a folosi Travis CI, trebuie să publicăm pluginul nostru pe GitHub. Continuă și fă asta acum. Simțiți-vă liber să vă referiți la al meu.
Datorită WP-CLI, îl avem deja configurat în pluginul nostru, datorită fișierului .travis.yml
.
Aș dori să menționez că nu ader la standardele de codare WordPress, ci mai degrabă la Recomandările Standardelor PHP, iar pluginurile mele necesită cel puțin PHP 5.4. Pentru ca build-urile mele să nu eșueze, a trebuit să le înlocuiesc matricea cu următoarele în fișierul .travis.yml
.
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
Mergeți la Travis CI și conectați-vă cu contul GitHub. Urmați ghidul de pe ecran pentru a adăuga depozitul dvs. GitHub.
După sincronizarea contului cu GitHub, derulați la depozitul pluginului dvs. și activați.
Data viitoare când faceți o modificare a codului și apăsați în GitHub, va fi declanșată o compilare pe Travis CI.
Am pus la dispoziție un rezultat de construcție de succes pentru plăcerea dvs. de vizionare.
Încheierea
Nu este un secret pentru nimeni că mulți dezvoltatori, nu doar cei WordPress, nu scriu teste pentru proiectele lor pentru că nu știu despre ele. Chiar și unii dintre cei experimentați și avansați dintre noi se pare că nu, pentru că consideră că este o pierdere de timp.
Desigur, configurarea testării automate poate fi plictisitoare și consumatoare de timp. Cu toate acestea, este o investiție care se va asigura că puține sau deloc erori în software-ul dvs., economisind astfel timpul și resursele (inclusiv financiare) pe care le-ar fi costat erorile din software-ul dvs.
Scrieți întotdeauna un test înainte de a implementa o caracteristică, astfel încât să nu uitați sau să vă simțiți leneș să o faceți după ce caracteristica a fost implementată.
Sper că acum recunoașteți importanța scrierii de teste și cum să începeți să scrieți unul pentru propriul dvs. plugin WordPress.
Dacă aveți întrebări sau comentarii, vă rugăm să-mi spuneți în secțiunea de comentarii.