Testarea site-ului dvs. Drupal a devenit mai ușoară cu Behat (un tutorial cuprinzător)
Publicat: 2020-09-08„Nu există nimic în lume mai puternic decât o poveste bună”, a spus regele inteligenței și înțelepciunii, Tyrion Lannister.
Puterea poveștilor și a comunicării bune permit o livrare de software colaborativă și eficientă. Evoluând din metodologii agile, tehnologiile Behavior Driven Development (BDD) folosesc această putere la maximum pentru a automatiza procesul de testare. Behat este una dintre aceste tehnologii BDD care permite testarea automată folosind „limbaj omniprezent”. Să aflăm mai multe despre Behat, Mink, Gherkin și despre cum să le implementăm în Drupal.

Ce este Behat?
Behat este un cadru PHP cu sursă deschisă care este folosit pentru a automatiza testarea utilizând dezvoltarea bazată pe comportament (BDD). O abordare BDD asigură livrarea de software de calitate, concentrându-se pe comunicarea continuă și povestiri simple text. Cu BDD, testerul creează cazuri de testare într-un limbaj care poate fi citit de om. Din acest motiv, este ușor să puneți întreaga echipă pe aceeași pagină, în care toată lumea, de la proprietarul produsului până la dezvoltator, poate înțelege și obține feedback continuu despre scenariul actual.
Ce este Gherkin?
Limbajul folosit de instrumentul Behat este Gherkin, care este un limbaj lizibil și specific domeniului. Gherkin servește și ca documentație vie și pot fi generate rapoarte pentru a documenta fiecare test. Acest limbaj simplu bazat pe spații albe folosește cuvinte simple ca cuvinte cheie. Indentările (folosind spațiu/tab) și sfârșiturile de linie definesc structura pentru cazul de testare. Deși scrierea și înțelegerea limbii este ușoară, rezultatul final ar trebui să se concentreze pe o mai bună colaborare, eficiență, automatizare și trasabilitate. Cazurile de testare ar trebui să fie scrise intuitiv, să se concentreze pe elemente importante, să evite verificarea înregistrărilor duplicate și să folosească o gramatică bună.
Ce este Mink?
Mink este un controler de browser open source care simulează un scenariu de testare cu aplicația web. Odată ce cazurile de testare sunt scrise, acestea trebuie să fie executate și să emuleze acțiunile utilizatorului. Cu Mink, puteți utiliza același scenariu de testare și îl puteți rula pe diverse emulatoare de browser precum Goutte, Selenium, Chrome, Zombie și altele. În timp ce instalați extensia Behat Drupal, veți vedea o dependență de Mink, așa că asigurați-vă că o aveți și instalată.
Instalarea și implementarea Behat în Drupal
Modul oficial de a instala Behat în proiectul dvs. Drupal este prin Composer. Nu numai că poate instala Behat pentru dvs., dar vă va putea și actualiza cu ușurință la cea mai recentă versiune mai târziu, când apare una.
• În interiorul folderului de proiect, executați comanda:
$ compozitor necesită behat/behat
• Sau în fișierul dvs. composer.json, adăugați declarația require
„necesită”: {
"behat/behat": "^3.0.0",
„phpunit/phpunit”: „^5.0.0”
}
• Apoi, executați comanda de instalare a compositorului în terminal.
• Când ați terminat, veți observa și un nou director bin / cu un fișier Behat în el. Acesta este executabilul Behat și îl veți folosi pentru a vă rula testele și pentru a obține informații de depanare.
• Apoi, creați un fișier numit behat.yml în folderul rădăcină al proiectului. Când Behat rulează, caută un fișier behat.yml , pe care îl folosește pentru configurarea sa.
Mod implicit:
apartamente:
Mod implicit:
contexte:
- Drupal\DrupalExtension\Context\DrupalContext
extensii:
Behat\MinkExtension:
goutte: ~
base_url: http://example.org/ # Înlocuiți cu adresa URL a site-ului dvs
Drupal\DrupalExtension:
cutie neagră: ~Pentru a inițializa proiectul, rulați comanda:
vendor/bin/behat –init
Acest lucru creează un folder de caracteristici și un fișier de context bootstrap/FeatureContext.php implicit în interiorul caracteristicilor / folder.
Scrierea poveștilor și rularea testelor cu Behat
Scopul nostru este să descriem poveștile în cel mai eficient mod. Poveștile sunt scrise într-un limbaj care poate fi citit de om, Gherkin, cu extensia . caracteristică din directorul caracteristici /.
Să ne imaginăm că trebuie să testați dacă puteți adăuga conținut la tipul de conținut al paginii de bază din site-ul dvs. cu succes sau nu. Pentru a face acest lucru, trebuie să aveți acces la pagină pentru a completa câmpurile și a o salva ca administrator.
Deci, să scriem prima noastră poveste:
Caracteristică: Verificați pagina de bază CT Pentru a crea o pagină Ca administrator Vreau să accesez /node/add/page Ca să pot crea o pagină Scenariu: Pagina de bază CT Dat fiind că sunt autentificat ca utilizator cu rolul de „administrator”. Când merg la „/node/add/page” Și introdu „Titlul paginii de bază” pentru „edit-title-0-value” Când apăs pe „editare-trimitere” Apoi ar trebui să văd „Pagina de bază Titlul paginii de bază a fost creat”
Acest fișier poate fi numit basic_page.feature . Fiecare caracteristică poate avea mai multe scenarii, care descriu comportamentul specific al caracteristicii. Fiecare scenariu va avea secțiuni:
• Dat - detaliază starea de pornire a sistemului
• Când - include acțiunea pe care o întreprinde utilizatorul
• Apoi - descrie ceea ce vede utilizatorul după ce a luat măsuri
• Și - pentru a menține conectivitatea în scenariu.
Nu există prea multă diferență între Atunci, Și și Dar . Aceste cuvinte sunt puse la dispoziție pentru a face scenariile dvs. naturale și lizibile.

Toate fișierele de caracteristici pot fi rulate de furnizor/bin/behat . Dacă doriți să rulați un anumit fișier de caracteristici, rulați vendor/bin/behat features/basic_page.feature. Există, de asemenea, o modalitate de a rula un singur scenariu prin adăugarea unui număr de linie în care scenariul este definit: vendor/bin/behat features/basic_page.feature:11 .
Există comenzi precum vendor/bin/behat -dl care vă oferă toată sintaxa declarației care este folosită în scenarii și vendor/bin/behat -di oferă sintaxa împreună cu exemplele.
Cum se scrie fișiere caracteristice
Behat rulează solicitări curl împotriva adreselor URL de pe site-ul dvs., ceea ce face procesul de testare destul de rapid, dar îl face și pe Behat să-și piardă capacitatea de a testa funcțiile care necesită Javascript. Deci, pentru a testa funcțiile, trebuie doar să adăugăm eticheta @javascript înainte de fiecare scenariu care necesită Javascript, ca acesta: Caracteristică: Verificați pagina de bază CT Pentru a crea o pagină Ca administrator Vreau să accesez /node/add/page Ca să pot crea o pagină @api @javascript Scenariu: Pagina de bază CT Dat fiind că sunt autentificat ca utilizator cu rolul de „administrator”. Când merg la „/node/add/page” Și introdu „Titlul paginii de bază” pentru „edit-title-0-value” Și completez wysiwyg în câmpul „edit-body-0-value” cu „Conținutul de bază al paginii” Când apăs pe „editare-trimitere” Apoi ar trebui să văd „Pagina de bază Titlul paginii de bază a fost creat”
Pentru a testa acest lucru, rulați vendor/bin/behat . Acest lucru vă va arăta pașii nedefiniți în scenarii, deoarece scenariile trebuie să fie mapate la o funcție.

Puteți fie să copiați-lipiți fragmentul de cod în fișierul contextual FeatureContext.php sau să rulați vendor/bin/behat --dry-run --append-snippets .
Apoi puteți scrie definițiile pentru funcții în FeatureContext.php așa cum se arată:
<?php
utilizați Behat\Mink\Exception\ExpectationException;
utilizați Drupal\DrupalExtension\Context\RawDrupalContext;
/**
* Definește caracteristicile aplicației din contextul specific.
*/
clasa FeatureContext extinde RawDrupalContext {
/**
* Contextul nurcii.
*
* @var Drupal\DrupalExtension\Context\MinkContext
*/
protejat $minkContext;
/**
* Inițializează contextul.
*
* Fiecare scenariu primește propria instanță de context.
* De asemenea, puteți transmite argumente arbitrare către
* constructor de context prin behat.yml.
*/
funcție publică __construct() {
}
/**
* Completați wysiwyg pe câmp.
*
* @Apoi completez wysiwyg pe câmpul :locator cu :value
*/
funcția publică iFillInWysiwygOnFieldWith($locator, $valoare) {
$el = $this->getSession()->getPage()->findField($locator);
dacă (gol ($el)) {
throw new ExpectationException('Nu am putut găsi WYSIWYG cu locator: ' . $locator, $this->getSession());
}
$fieldId = $el->getAttribute('id');
dacă (gol ($fieldId)) {
throw new Exception('Nu s-a putut găsi un ID pentru câmpul cu locator: ' . $locator);
}
$this->getSession()
->executeScript("CKEDITOR.instances[\"$fieldId\"].setData(\"$value\");");
}
}Acum, rulați comanda vendor/bin/behat și toate scenariile care sunt scrise trebuie să treacă. Funcția JS definită va mapa declarația de scenariu „ Și completez wysiwyg în câmpul „edit-body-0-value” cu „Conținutul paginii de bază ”.
