© istockphoto.com/AndSim
Teil 2: BDD-Tests auf dem Jenkins-Server ausführen

BDD-Tests mit Codeception


Codeception ist ein Testframework, mit dem Akzeptanztests, Functional-Tests, API-Tests und Unit-Tests komfortabel implementiert werden können. Hierfür greift Codeception unter anderem auf PHPUnit zurück.

Eine Wissensbasis in PHPUnit ist zwar nicht nötig, ist aber von Vorteil, sobald der Funktionsumfang von Codeception – zum Beispiel mittels Helper – erweitert werden soll. Akzeptanzkriterien sind Abnahmebedingungen von Stakeholdern an ein Feature bzw. eine umgesetzte Anforderung. Diese Kriterien sind unabhängig vom Framework, der Datenbank und der Programmiersprache – also unabhängig von allen technischen Feinheiten. Den Stakeholder interessiert nur, ob das Feature so umgesetzt wurde, wie es seiner Vorstellung und seinen Anforderungen entspricht. Hierfür wird er auf Links klicken, Formulare ausfüllen, durch die Seite navigieren und die Reaktion dieser begutachten. Dieses Verhalten kann er in BDD-Manier festhalten, um es entsprechend reproduzierbar zu gestalten oder vorab testbar zu machen. Ein weiterer Weg kann sein, das Verhalten der Stakeholder mittels entsprechender Tools aufzuzeichnen und es dann in BDD/Akzeptanztests zu überführen. Codeception bietet die Möglichkeit, diese Akzeptanztests BDD-freundlich abzubilden, wodurch die Tests und die Testergebnisse für die Stakeholder lesbar bleiben (Abb. 1). Ein exploratives Testen kann so gezielter eingesetzt werden, da die Standardanforderungen mittels BDD-Tests abgedeckt sind.

schroeder_bdd_1.tif_fmt1.jpgAbb. 1: Testergebnisse von Tests mit Codeception

Konfiguration von Codeception

Um BDD-Tests mittels Codeception ausführen zu können, passen wir die Verzeichnisstruktur dahingehend an und erweitern sie um ein Verzeichnis test/. In dieses Verzeichnis laden wir mittels des Befehls wget http://codeception.com/codecept.phar Codeception und bereiten es mit php codecept.phar bootstrap für die BDD-Tests vor. Nach dessen Ausführen existiert neben der .phar-Datei die in Listing 1 abgebildete Struktur. Der Bootstrap-Befehl legt die Suiten für die Standardtests von Codeception (Acceptance-, Functional- und Unit-Tests) an, Codeception lässt sich global über codeception.yml konfigurieren, pro Suite jeweils über die *.suite.yml. In der codeception.yml werden unter anderem Pfade zu den Tests, zu Environments und zum Supportbereich festgelegt. Die Environments und den Supportbereich werden wir im Weiteren genauer betrachten. Da Codeception mit PHPUnit arbeitet, bieten die Helper-Klassen eine gute Möglichkeit, eigene Tests zu schreiben, falls die von Codeception zur Verfügung gestellten Tests nicht ausreichend sind.

Listing 1

codecept.phar codeception.yml tests\ _data\ _envs\ _output\ _support\ _generated\ Helper\ Page\ AcceptanceTester.php FunctionalTester.php UnitTester.php acceptance\ _bootstrap.php functional\ _bootstrap.php unit\ _bootstrap.php _bootstrap.php acceptance.suite.yml functional.suite.yml unit.suite.yml

Die Konfiguration in der acceptance.suite.yml passen wir entsprechend den Docker-Containern an (Listing 2). Die Website wird lokal auf Port 5080 zu erreichen sein; dementsprechend wurde die Anpassung vorgenommen. Als Modul wird der PHP-Browser verwendet; später wird dieser durch Firefox und Chrome ersetzt und durch Environments gesteuert.

Listing 2

# Codeception Test Suite Configuration # # Suite for acceptance tests. # Perform tests in browser using the WebDriver or PhpBrowser. # If you need both WebDriver and PHPBrowser tests – create a separate suite. class_name: AcceptanceTester modules: enabled: - PhpBrowser: url: http://localhost:5080/ - \Helper\Acceptance

Environments

Environments sind ein wichtiges Hilfsmittel, um bestimmte Umgebungen zu erschaffen, in denen Tests ausgeführt werden sollen. Für Akzeptanztests/Oberflächentests kann es sinnvoll sein, die Funktionalität der Frontends in verschiedenen Browsern zu testen. Wie im ersten Teil der Artikelreihe [1] bereits unter dem Punkt Selenium erwähnt, bietet Codeception die Möglichkeit, Oberflächentests sowohl mittels Guzzle (einem in PHP geschriebenen HTTP-Client) auszuführen, oder sie via Webdriver an einen nativen Browser weiterzugeben. Gerade für Frontend-Tests, die als Rich-Client in JavaScript implementiert sind, ist es sehr sinnvoll, den gleichen Test in verschiedenen Browsern auszuführen, um sicherzustellen, dass die Oberfläche mit jeder JavaScript Engine den Anforderungen entsprechend reagiert. Hierfür ist es nicht nötig, die Tests mehrfach zu implementieren, sondern es genügt, die Tests einem Environment zuzuweisen. Es ist auch explizit davon abzuraten, verschiedene Oberflächentests für eine gleiche Anforderung für untersch...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang