PHP Tests mit Codeception - Automatisierte Funktionstests

In diesem Artikel möchten wir Ihnen eine Einführung in PHP Tests mit Codeception geben. Das Testframework eignet sich zum Testen von Webanwendungen und Webservices. Es basiert auf der Programmiersprache PHP. Eine große Erfahrung in PHP ist nicht nötig, um Testfälle mit Codeception zu schreiben. Lediglich einige Grundlagen reichen, um ein Testautomatisierungs-Framework zu entwickeln.
In Codeception werden die Tests in BDD (Behaviour Driven Design) geschrieben, was einfach zu verstehen ist und durch das Lesen der entwickelten Tests eine Vorstellung vom Verhalten des Systems vermittelt. Es bietet eine Möglichkeit, Akzeptanztests, Funktionstests und sogar Unit-Tests zu schreiben. Das folgende Beispiel in BDD-Stil ist ein Code-Snippet von Codeception:
$I->wantTo('Test meine Webseite');
$I->amOnPage('/');
$I->fillField('#login', 'qytera');
$I->fillField('#password', 'qytera');
$I->click('Log in');
$I->see('Die Experten in Continuous Testing und Testautomatisierung');
Wieso soll Dein QS-Team PHP Tests mit Codeception durchführen?
Codeception bietet mehrere Vorteile zum Testen von PHP Webanwendungen im Vergleich zu anderen Testautomatisierungswerkzeugen auf dem Markt, einige davon:
- Code leicht verständlich: Codeception-Aktionen (I see, I am on page, I wait, …) machen den Code einfach zu verstehen.
- Mit allen Backend-Frameworks kompatibel
- Test-Website mit mehreren Tabs kontrollieren (was z. B. in Cypress nicht unterstützt wird)
- Mit Basic PHP kann man schnell in Codeception einsteigen und mit Helper-Funktionen können komplizierte Aktionen ausgelagert werden.
- Alle Selektoren werden unterstützt (XPath, CSS-Selektoren, ...)
- Framework für alle Teststufen: Unittests, Rest-APIs und SOAP-Webdienste können getestet werden
Installation von Codeception
Vor der Installation von Codeception müssen zunächst einige Tools installiert werden:
- PHP (hier herunterladen)
- Composer (hier herunterladen)
- Java (hier herunterladen)
Um mehr über die Installation zu erfahren, finden Sie in der offiziellen Dokumentation des Codeception Frameworks alle Informationen, die Sie benötigen.
Mit folgendem Befehl werden die benötigten Dateien zur Erstellung der Projektstruktur erstellt:
composer require "codeception/codeception" --dev
Nach Ausführung des Befehls sieht die generierte Dateistruktur wie folgt aus:

Diese Dateien können verwendet werden, um eine vordefinierte Vorlage für die Funktionstests des Projektes zu erstellen. Dazu sollte einer der folgenden Befehle in demselben Ordner ausgeführt werden, in dem die bin-Dateien erzeugt wurden:
Für Akzeptanz Tests:
php vendor/bin/codecept init Acceptance
Für Unit Tests:
php vendor/bin/codecept init Unit
Für REST API Tests:
php vendor/bin/codecept init Api
Im Falle von Akzeptanztests wird nach der Ausführung des vorherigen Befehls ein Ordner erstellt, der wichtige Elemente enthält:

Die wichtigsten Projekt-Elemente werden im Folgenden erklärt:
- _output: Berichte und Bildschirmfotos werden hier erstellt
- Support: enthält automatisch generierte Klassen nach jedem Build des Projekts
- ***Cest.php: Eine Cest-Klasse. Cest-Klassen sind die Einstiegspunkte für die Testautomatisierung. Diese enthalten öffentliche Funktionen, die als Tests betrachtet werden - mit Ausnahme der Funktionen, die mit einem Unterstrich "_" beginnen wie _before oder _after
- codeception.yml: enthält die allgemeine Konfiguration des Projekts, wie die verwendeten Umgebungsvariablen, aktivierte Module oder verwendete Browser.

Codeception Module und Helper
Module
Codeception ist ein Modalitäts-Framework. Die Aktionen und verschiedenen Prüfungen können durch die aktivierten Module in der Yaml-Datei codeception.yml eingesehen werden. Die Aktivierung der Module kann auf zwei Arten erfolgen:
- Mit Composer-Befehl. Die Asserts werden standardmäßig in Codeception 2 und 3 installiert, aber mit Codeception 4 sollen sie separat hinzugefügt werden:
composer require --dev codeception/module-asserts
- Oder die Asserts Module in der Yaml-Konfigurationsdatei von Codeception unter "enabled" hinzufügen und folgender Befehl ausführen:
codecept init upgrade4

Helper
Die verschiedenen aktivierten Module, wie z. B. Asserts, stellen Standardaktionen zur Verfügung, die bei der Erstellung der Tests hilfreich sind, z. B:
- assertEmpty
- assertFalse
- assertEquals
...
In PHP Tests in Codeception ist der Benutzer nicht auf die Standardaktionen beschränkt, es können auch andere Aktionen personalisiert werden. Die personalisierten Aktionen werden im sogenannten Helper-Ordner erstellt. Der Helper-Ordner kann mit dem folgenden Befehl erstellt werden:
codecept generate:helper <Name der Helper Datei>
Die neuen Aktionen in Helper sind nichts anderes als öffentliche Funktionen mit der gewünschten Geschäftslogik:
/** * Fill title. * * @param string $title Title of our page. */ public function fillTitle( $title ) { $I->waitForElementVisible( self::TITLE_FIELD ); $I->fillField( self::TITLE_FIELD, $title ); }
Die soeben gezeigte öffentliche Funktion wird verwendet, um Eingabefelder mit einem bestimmten Text zu füllen. Nach einem Build mit dem folgenden Befehl:
php vendor/bin/codecept build
kann diese Funktion überall im Projekt als Standardfunktion aufgerufen werden:
$I -> fillTitle("Qytera");
Die Funktionstests im Codeception Framework starten
Codeception kann entweder headless, in Docker oder, was laut der offiziellen Website empfohlen ist, als Selenium Standalone verwendet werden.
Headless
Hierfür wird ein PHPBrowser verwendet. Die Aktivierung des Moduls kann in der Yaml-Konfigurationsdatei konfiguriert werden:

Bei der Headless-Ausführung des Tests in Codeception wird kein Browser gestartet, was die schnellste Methode zur Ausführung der Funktionstests ist, aber einige Nachteile mit sich bringt, z.B. können nur Elemente angeklickt werden, die sich innerhalb eines Form befinden.
Selenium Standalone
Die empfohlene und auch schnelle Methode, um in die Codeception-Welt einzusteigen und PHP Tests auszuführen, ist Selenium. Dazu sollten NodeJs und Java lokal installiert sein. Um zu prüfen, ob die beiden Anforderungen bereits installiert sind, kann die Version überprüft werden:
- Für Java: java --version
- Für NodeJs: node --version
Wenn beide Anforderungen bereits installiert sind, kann Selenium standalone mit folgendem Befehl installiert werden:
npm install selenium-standalone -g selenium-standalone install
Page-Objekt in Codeception
Durch die Verwendung des Page Object Design Patterns wird jede Seite als Klasse ausgelagert, was das Hinzufügen neuer Anforderungen oder die Fehlersuche einfach macht. Anhand des generierten Berichts können die Fehler verfolgt und analysiert werden.
Mit der Implementierung des Page Object Design Patterns sehen die Berichte wie folgt aus:

Fazit
Codeception ist ein Open Source Testing Framework, das sich durch seine intuitive und einfache Konfiguration auszeichnet. Die Abbildung von Behavior Driven Development (BDD), Keyword Driven und damit eine gute Rollentrennung bzw. Integration von anderen am Test beteiligten Personen.
Das Framework lässt sich in wenigen Minuten einrichten und erfordert keine tiefgreifenden PHP-Kenntnisse. Die Standardmodule ermöglichen das Testen der PHP Webanwendungen auf allen Ebenen: Unit-Tests, Datenbanken, REST-APIs und Web-Benutzeroberflächen. Die kontinuierliche Integration und Auslieferung wird ebenfalls von Codeception gewährleistet, um eine schnelle Freigabe und eine kurze Markteinführungszeit nach jeder Änderung zu sichern.
Ein weiteres Highlight von Codeception ist die Möglichkeit, die PHP Tests in verschiedenen Sprachen durchzuführen, wie z.B. Gherkin, die Verwendung von Annotationen im Code. Es bietet auch Lösungen für verschiedene Engpässe in anderen Frameworks, ein Beispiel ist das Tabs-Problem in Cypress.
Über den Autor
