Das Testen Ihrer Drupal-Website ist jetzt noch einfacher mit Behat (ein umfassendes Tutorial)
Veröffentlicht: 2020-09-08„Nichts auf der Welt ist mächtiger als eine gute Geschichte“, sagte Tyrion Lennister, der König des Witzes und der Weisheit.
Die Kraft von Geschichten und guter Kommunikation ermöglicht eine kollaborative und effiziente Softwarebereitstellung. Behavior Driven Development (BDD)-Technologien, die aus agilen Methoden hervorgegangen sind, nutzen diese Leistungsfähigkeit voll aus, um den Testprozess zu automatisieren. Behat ist eine solche BDD-Technologie, die automatisiertes Testen mit „ubiquitärer Sprache“ ermöglicht. Lassen Sie uns mehr über Behat, Mink, Gherkin und deren Implementierung in Drupal erfahren.

Was ist Behat?
Behat ist ein Open-Source-PHP-Framework, das verwendet wird, um Tests durch die Nutzung von Behavior Driven Development (BDD) zu automatisieren. Ein BDD-Ansatz gewährleistet eine qualitativ hochwertige Softwarebereitstellung, indem er sich auf kontinuierliche Kommunikation und einfache Textgeschichten konzentriert. Mit BDD erstellt der Tester Testfälle in menschenlesbarer Sprache. Aus diesem Grund ist es einfach, das gesamte Team auf den gleichen Stand zu bringen, da jeder, vom Product Owner bis zum Entwickler, das aktuelle Szenario verstehen und kontinuierliches Feedback erhalten kann.
Was ist Gurke?
Die vom Behat-Tool verwendete Sprache ist Gherkin, eine für Unternehmen lesbare und domänenspezifische Sprache. Gherkin dient auch als lebendige Dokumentation und es können Berichte erstellt werden, um jeden Testlauf zu dokumentieren. Diese einfache auf Leerzeichen basierende Sprache verwendet einfache Sprachwörter als Schlüsselwörter. Einrückungen (mit Leerzeichen/Tabulator) und Zeilenenden definieren die Struktur für den Testfall. Obwohl das Schreiben und Verstehen der Sprache einfach ist, sollte sich das Endergebnis darauf konzentrieren, eine bessere Zusammenarbeit, Effizienz, Automatisierung und Rückverfolgbarkeit zu ermöglichen. Testfälle sollten intuitiv geschrieben werden, sich auf wichtige Elemente konzentrieren, die Überprüfung doppelter Datensätze vermeiden und eine gute Grammatik verwenden.
Was ist Mink?
Mink ist ein Open-Source-Browser-Controller, der mit der Webanwendung ein Testszenario simuliert. Sobald die Testfälle geschrieben sind, müssen sie ausgeführt werden und Benutzeraktionen emulieren. Mit Mink können Sie dasselbe Testszenario verwenden und auf verschiedenen Browseremulatoren wie Goutte, Selenium, Chrome, Zombie und mehr ausführen. Während der Installation der Behat Drupal-Erweiterung sehen Sie eine Abhängigkeit von Mink, also stellen Sie sicher, dass Sie sie auch installiert haben.
Installation und Implementierung von Behat in Drupal
Der offizielle Weg, Behat in Ihrem Drupal-Projekt zu installieren, ist über Composer. Es kann nicht nur Behat für Sie installieren, sondern Sie können Sie auch später problemlos auf die neueste Version aktualisieren, wenn eine herauskommt.
• Führen Sie im Projektordner den Befehl aus:
$ Komponist erfordert behat/behat
• Oder fügen Sie in Ihrer Composer.json-Datei die require-Anweisung hinzu
"erfordern": {
"behat/behat": "^3.0.0",
„phpunit/phpunit“: „^5.0.0“
}
• Führen Sie anschließend den Befehl Composer install im Terminal aus.
• Wenn es fertig ist, sehen Sie auch ein neues Verzeichnis bin / mit einer Behat-Datei darin. Dies ist die ausführbare Behat-Datei, mit der Sie Ihre Tests ausführen und Debuginformationen abrufen können.
• Erstellen Sie als Nächstes eine Datei namens behat.yml im Stammordner des Projekts. Wenn Behat ausgeführt wird, sucht es nach einer behat.yml- Datei, die es für seine Konfiguration verwendet.
Ursprünglich:
Suiten:
Ursprünglich:
Kontexte:
- Drupal\DrupalExtension\Context\DrupalContext
Erweiterungen:
Behat\MinkExtension:
goutte: ~
base_url: http://example.org/ # Durch die URL Ihrer Site ersetzen
Drupal\DrupalExtension:
Blackbox: ~Führen Sie den Befehl aus, um das Projekt zu initialisieren:
verkäufer/bin/behat –init
Dies erstellt einen features / -Ordner und eine Bootstrap/FeatureContext.php- Standardkontextdatei innerhalb des features / -Ordners .
Geschichten schreiben und Tests ausführen mit Behat
Unser Ziel ist es, die Geschichten auf die effektivste Weise zu beschreiben. Die Geschichten sind in einer menschenlesbaren Sprache, Gherkin, mit der Erweiterung . Feature unter dem Features / Verzeichnis.
Angenommen, Sie müssen testen, ob Sie erfolgreich Inhalt zum Inhaltstyp der Basisseite Ihrer Website hinzufügen können oder nicht. Dazu müssen Sie Zugriff auf die Seite haben, um die Felder auszufüllen und als Administrator zu speichern.
Schreiben wir also unsere erste Geschichte:
Feature: Basisseite CT prüfen Um eine Seite zu erstellen Als Administrator Ich möchte auf /node/add/page zugreifen Damit ich eine Seite erstellen kann Szenario: Basisseite CT Vorausgesetzt, ich bin als Benutzer mit der Rolle "Administrator" angemeldet Wenn ich zu "/node/add/page" gehe Und ich gebe "einfacher Seitentitel" für "edit-title-0-value" ein. Wenn ich auf "Bearbeiten-Senden" drücke Dann sollte ich sehen "Basisseite Der Basisseitentitel wurde erstellt"
Diese Datei kann basic_page.feature heißen . Jedes Feature kann viele Szenarien haben, die das spezifische Verhalten des Features beschreiben. Jedes Szenario hat Abschnitte:
• Gegeben – gibt den Startzustand des Systems an
• Wann – umfasst die Aktion des Benutzers
• Dann – beschreibt, was der Benutzer sieht, nachdem er eine Aktion ausgeführt hat
• Und - um die Konnektivität im Szenario aufrechtzuerhalten.
Es gibt keinen großen Unterschied zwischen Then, And und But . Diese Wörter werden zur Verfügung gestellt, um Ihre Szenarien natürlich und lesbar zu machen.

Alle Feature-Dateien können von Vendor/bin/behat ausgeführt werden . Wenn Sie eine bestimmte Feature-Datei ausführen möchten, führen Sie Vendor/bin/behat features/basic_page.feature aus. Es gibt auch eine Möglichkeit, ein einzelnes Szenario auszuführen, indem Sie einfach eine Zeilennummer hinzufügen, in der das Szenario definiert ist: Vendor/bin/behat features/basic_page.feature:11 .
Es gibt Befehle wie "vendor/bin/behat -dl", die Ihnen die gesamte Anweisungssyntax bereitstellt, die in Szenarien verwendet wird, und "vendor/bin/behat -di" liefert die Syntax zusammen mit den Beispielen.
So schreiben Sie Feature-Dateien
Behat führt curl-Anfragen gegen URLs auf Ihrer Website aus, was den Testprozess recht schnell macht, aber auch dazu führt, dass Behat die Möglichkeit verliert, Funktionen zu testen, die Javascript erfordern. Um Funktionen zu testen, müssen wir also nur das @javascript-Tag vor jedem Szenario hinzufügen, das Javascript erfordert, wie folgt: Feature: Basisseite CT prüfen Um eine Seite zu erstellen Als Administrator Ich möchte auf /node/add/page zugreifen Damit ich eine Seite erstellen kann @api @javascript Szenario: Basisseite CT Vorausgesetzt, ich bin als Benutzer mit der Rolle "Administrator" angemeldet Wenn ich zu "/node/add/page" gehe Und ich gebe "einfacher Seitentitel" für "edit-title-0-value" ein. Und ich fülle wysiwyg im Feld "edit-body-0-value" mit "Basic page content" aus. Wenn ich auf "Bearbeiten-Senden" drücke Dann sollte ich sehen "Basisseite Der Basisseitentitel wurde erstellt"
Um dies zu testen, führen Sie Vendor/bin/behat aus . Dadurch werden die undefinierten Schritte in den Szenarien angezeigt, da die Szenarien einer Funktion zugeordnet werden müssen.

Sie können das Code-Snippet entweder kopieren und in die Kontextdatei FeatureContext.php einfügen oder Vendor/bin/behat --dry-run --append-snippets ausführen .
Dann können Sie die Definitionen für die Funktionen in FeatureContext.php wie gezeigt schreiben:
<?php
Behat\Mink\Exception\ExpectationException verwenden;
Verwenden Sie Drupal\DrupalExtension\Context\RawDrupalContext;
/**
* Definiert Anwendungsfunktionen aus dem spezifischen Kontext.
*/
Klasse FeatureContext erweitert RawDrupalContext {
/**
* Der Nerz-Kontext.
*
* @var Drupal\DrupalExtension\Context\MinkContext
*/
geschützt $minkContext;
/**
* Initialisiert Kontext.
*
* Jedes Szenario bekommt seine eigene Kontextinstanz.
* Sie können auch beliebige Argumente an die übergeben
* Kontextkonstruktor durch behat.yml.
*/
öffentliche Funktion __construct() {
}
/**
* Geben Sie Wysiwyg in das Feld ein.
*
* @Dann fülle ich wysiwyg im Feld :locator mit :value aus
*/
öffentliche Funktion iFillInWysiwygOnFieldWith($locator, $value) {
$el = $this->getSession()->getPage()->findField($locator);
if (leer ($el)) {
throw new ExpectationException('Konnte WYSIWYG mit locator nicht finden: ' . $locator, $this->getSession());
}
$fieldId = $el->getAttribute('id');
if (leer($fieldId)) {
throw new Exception('Keine ID für das Feld mit Locator gefunden: ' . $locator);
}
$this->getSession()
->executeScript("CKEDITOR.instances[\"$fieldId\"].setData(\"$value\");");
}
}Führen Sie nun den Befehl " vendor/bin/behat" aus und alle geschriebenen Szenarien müssen bestehen. Die definierte JS-Funktion bildet die Szenario-Anweisung „ Und ich fülle wysiwyg on-field „edit-body-0-value“ mit „Basic page content “ aus.
