Testare il tuo sito web Drupal è diventato più facile con Behat (un tutorial completo)
Pubblicato: 2020-09-08"Non c'è niente al mondo più potente di una bella storia", ha detto il re dell'arguzia e della saggezza, Tyrion Lannister.
Il potere delle storie e una buona comunicazione consentono una distribuzione del software collaborativa ed efficiente. Evolvendosi a partire da metodologie agili, le tecnologie Behavior Driven Development (BDD) sfruttano al massimo questa potenza per automatizzare il processo di test. Behat è una di queste tecnologie BDD che consente test automatizzati utilizzando un "linguaggio onnipresente". Impariamo di più su Behat, Mink, Gherkin e come implementarlo in Drupal.

Cos'è Behat?
Behat è un framework PHP open source utilizzato per automatizzare i test sfruttando lo sviluppo guidato dal comportamento (BDD). Un approccio BDD garantisce la consegna di software di qualità concentrandosi sulla comunicazione continua e su semplici storie di testo. Con BDD il tester costruisce casi di test in un linguaggio leggibile dall'uomo. Per questo motivo, è facile portare l'intero team sulla stessa pagina poiché tutti, dal proprietario del prodotto allo sviluppatore, possono comprendere e ottenere feedback continui sullo scenario attuale.
Cos'è il cetriolino?
Il linguaggio utilizzato dallo strumento Behat è Gherkin, che è un linguaggio aziendale leggibile e specifico del dominio. Gherkin funge anche da documentazione vivente e i report possono essere generati per documentare ogni esecuzione di test. Questo semplice linguaggio basato su spazi bianchi utilizza parole di linguaggio semplici come parole chiave. I rientri (usando spazio/tab) e le terminazioni di riga definiscono la struttura per il test case. Sebbene scrivere e comprendere la lingua sia facile, il risultato finale dovrebbe concentrarsi sul consentire una migliore collaborazione, efficienza, automazione e tracciabilità. I casi di test dovrebbero essere scritti in modo intuitivo, concentrarsi su elementi importanti, evitare di controllare record duplicati e utilizzare una buona grammatica.
Cos'è il visone?
Mink è un controller browser open source che simula uno scenario di test con l'applicazione web. Una volta scritti i casi di test, è necessario eseguirli ed emulare le azioni dell'utente. Con Mink, puoi utilizzare lo stesso scenario di test ed eseguirlo su vari emulatori di browser come Goutte, Selenium, Chrome, Zombie e altri. Durante l'installazione dell'estensione Behat Drupal, vedrai una dipendenza da Mink, quindi assicurati di averla installata.
Installazione e implementazione di Behat in Drupal
Il modo ufficiale per installare Behat nel tuo progetto Drupal è tramite Composer. Non solo può installare Behat per te, ma sarà anche in grado di aggiornarti facilmente all'ultima versione in seguito quando ne uscirà una.
• All'interno della cartella del progetto, eseguire il comando:
$ il compositore richiede behat/behat
• O all'interno del tuo file composer.json, aggiungi l'istruzione require
"richiedere": {
"behat/behat": "^3.0.0",
“phpunit/phpunit”: “^ 5.0.0”
}
• Quindi, eseguire il comando di installazione del compositore nel terminale.
• Al termine, noterai anche una nuova directory bin / con un file Behat al suo interno. Questo è l'eseguibile di Behat e lo utilizzerai per eseguire i tuoi test e ottenere informazioni di debug.
• Successivamente, crea un file chiamato behat.yml all'interno della cartella principale del progetto. Quando Behat viene eseguito, cerca un file behat.yml , che utilizza per la sua configurazione.
predefinito:
suite:
predefinito:
contesti:
- Drupal\DrupalExtension\Context\DrupalContext
estensioni:
Behat\MinkExtension:
gotta: ~
base_url: http://example.org/ # Sostituisci con l'URL del tuo sito
Drupal\DrupalEstensione:
scatola nera: ~Per inizializzare il progetto, eseguire il comando:
venditore/bin/behat –init
Questo crea una feature /cartella e un file di contesto predefinito bootstrap/FeatureContext.php all'interno della feature /cartella.
Scrivere storie ed eseguire test con Behat
Il nostro obiettivo è descrivere le storie nel modo più efficace. Le storie sono scritte in un linguaggio leggibile dall'uomo, Gherkin, con l'estensione . caratteristica sotto le caratteristiche / directory.
Supponiamo che tu debba verificare se puoi aggiungere contenuto al tipo di contenuto della pagina Base nel tuo sito con successo o meno. Per fare ciò, devi avere accesso alla pagina per compilare i campi e salvarla come amministratore.
Quindi, scriviamo la nostra prima storia:
Caratteristica: Controlla la pagina di base CT Per creare una pagina Come amministratore Voglio accedere a /node/add/page Così posso creare una pagina Scenario: Pagina base CT Dato che ho effettuato l'accesso come utente con il ruolo di "amministratore" Quando vado su "/node/add/page" E inserisco "Titolo pagina di base" per "modifica-titolo-0-valore" Quando premo "modifica-invia" Quindi dovrei vedere "Pagina di base Il titolo della pagina di base è stato creato"
Questo file può essere chiamato basic_page.feature . Ogni funzionalità può avere molti scenari, che descrivono il comportamento specifico della funzionalità. Ogni scenario avrà sezioni:
• Dato - dettagli sullo stato iniziale del sistema
• Quando : include l'azione intrapresa dall'utente
• Quindi : descrive ciò che l'utente vede dopo aver eseguito un'azione
• E - per mantenere la connettività nello scenario.
Non c'è molta differenza tra Then, And e But . Queste parole sono messe a disposizione per rendere i tuoi scenari naturali e leggibili.

Tutti i file delle funzionalità possono essere eseguiti da vendor/bin/behat . Se desideri eseguire un file di funzionalità specifico, esegui vendor/bin/behat features/basic_page.feature. C'è anche un modo per eseguire un singolo scenario semplicemente aggiungendo un numero di riga in cui è definito lo scenario: vendor/bin/behat features/basic_page.feature:11 .
Esistono comandi come vendor/bin/behat -dl che fornisce tutta la sintassi delle istruzioni utilizzata negli scenari e vendor/bin/behat -di fornisce la sintassi insieme agli esempi.
Come scrivere file di funzionalità
Behat esegue richieste curl contro gli URL sul tuo sito web, il che rende il processo di test abbastanza veloce, ma fa anche perdere a Behat la capacità di testare le funzionalità che richiedono Javascript. Quindi, per testare le funzionalità, dobbiamo solo aggiungere il tag @javascript prima di ogni scenario che richiede Javascript, in questo modo: Caratteristica: Controlla la pagina di base CT Per creare una pagina Come amministratore Voglio accedere a /node/add/page Così posso creare una pagina @api @javascript Scenario: Pagina base CT Dato che ho effettuato l'accesso come utente con il ruolo di "amministratore" Quando vado su "/node/add/page" E inserisco "Titolo pagina di base" per "modifica-titolo-0-valore" E compilo wysiwyg sul campo "edit-body-0-value" con "Contenuto della pagina di base" Quando premo "modifica-invia" Quindi dovrei vedere "Pagina di base Il titolo della pagina di base è stato creato"
Per testarlo, esegui vendor/bin/behat . Questo ti mostrerà i passaggi non definiti negli scenari perché gli scenari devono essere mappati a una funzione.

Puoi copiare e incollare lo snippet di codice nel file di contesto FeatureContext.php o eseguire vendor/bin/behat --dry-run --append-snippets .
Quindi puoi scrivere le definizioni per le funzioni in FeatureContext.php come mostrato:
<?php
usa Behat\Mink\Exception\ExpectationException;
usa Drupal\DrupalExtension\Context\RawDrupalContext;
/**
* Definisce le caratteristiche dell'applicazione dal contesto specifico.
*/
class FeatureContext estende RawDrupalContext {
/**
* Il contesto del visone.
*
* @var Drupal\DrupalExtension\Context\MinkContext
*/
protetto $minkContext;
/**
* Inizializza il contesto.
*
* Ogni scenario ottiene la propria istanza di contesto.
* Puoi anche passare argomenti arbitrari al
* costruttore di contesto tramite behat.yml.
*/
funzione pubblica __construct() {
}
/**
* Compila wysiwyg sul campo.
*
* @Quindi compilo wysiwyg nel campo :locator con :value
*/
public function iFillInWysiwygOnFieldWith($locator, $value) {
$el = $this->getSession()->getPage()->findField($locator);
if (vuoto($el)) {
throw new ExpectationException('Impossibile trovare WYSIWYG con locator: ' . $locator, $this->getSession());
}
$fieldId = $el->getAttribute('id');
if (empty($fieldId)) {
throw new Exception('Impossibile trovare un id per il campo con locator: ' . $locator);
}
$this->getSession()
->executeScript("CKEDITOR.instances[\"$fieldId\"].setData(\"$value\");");
}
}Ora, esegui il comando vendor/bin/behat e tutti gli scenari che vengono scritti devono passare. La funzione JS definita mapperà l'istruzione dello scenario " E compilo wysiwyg sul campo "edit-body-0-value" con "Contenuto della pagina di base ".
