PHP Tests mit Codeception - Automatisierte Funktionstests

🕒 Lesedauer: 4 Minuten

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:

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:

 

Image
codeception-blog-bild-1.png

 

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:

 

Image
codeception-blog-bild-2.png

Bild: Codeception Akzeptanztests generierte Struktur. [Quelle: Codeception]

 

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 


 

Image
codeception-blog-bild-3.png

Bild: Codeception.yml Codeausschnitt. [Quelle: Codeception]

 

Image
codeception-blog-bild-4.png

Bild: Prüfungen und Filesystem Module aktivieren. [Quelle: Codeception]

 

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:

 

Image
codeception-blog-bild-5.png

 

Bild: Aktivierung des Php Browsers in der codeception.yml Datei. [Quelle: Codeception]

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:

 

Image
codeception-blog-bild-6.png
Bild: Bericht und Fehler-Screenshot. [Quelle: Codeception]

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.

Veröffentlicht am 06.Juli 2023

Aktualisiert am 19.November 2024

Mehdi

Test Automation Engineer

In der Softwareentwicklung habe ich umfassende Kenntnisse zu Java, Typescript und anderen Programmiersprachen gesammelt, die für meine Arbeit als Test Automation Engineer essenziell sind. Bei Qytera habe ich mich auf Testautomatisierung spezialisiert. Somit kann ich insbesondere in Kundenprojekten meine Erfahrungen und Methoden in die Umsetzung von Automatisierungs-Lösungen, mit verschiedenen Tools wie Selenium, Cypress und Codeception, einbringen.

Finden Sie weitere interessante Artikel zum Thema: