Codeception Tutorial 1

Teil 1: Projekt anlegen, WebDriver, Ordnerstruktur

Dieses Tutorial ist für PHP Web-Entwickler gedacht, die mit Codeception testen wollen. Es geht weiter als die einfachen Quickstart Guides, und wird die üblichen Fragen beantworten, die auf dem Weg zu einem ausgewachsenen Testprojekt auftauchen.

Für die ersten Schritte empfehle ich den Quickstart Guide von Codeception selber: https://codeception.com/quickstart Damit kann man Codeception erst einmal kennen lernen. Und wenn dann das erste $I->amOnPage funktioniert und die Tests grün sind, ist schon mal cool!

Weiter geht es dann mit dem AcceptanceTest Tutorial, da kommt $I->click dazu, es werden CSS und XPath Selektoren gezeigt und Formulare automatisch ausgefüllt. Das macht dann schon Spaß, und ich empfehle euch als erstes mal mit den Beispielen herumzuspielen, und auszuprobieren was da so alles geht.

Bezogen auf ein reales Projekt stellen sich einem aber dann Fragen wie:

  • Wo konfiguriere ich eigentlich die URLs, und kann ich zwischen Development und Live-Server unterscheiden?
  • Wo hinterlege ich die Passwörter für den Login?
  • Auch der PHPBrowser hat seine Grenzen, relativ schnell bracht man eine WebDriver Installation.

Und darum gehts in diesem Tutorial: die realen Probleme in einem Web Projekt und wie man sie gelöst bekommt. Also los gehts!

Die Installation findet wie üblich mit composer statt. Dadurch werden alle benötigten Codeception Klassen in den Ordner „vendor“ heruntergeladen:

composer require "codeception/codeception"

Anschließend lege ich ein neues Projekt an, diesmal mit dem init Aufruf für Acceptance Tests:

php vendor/bin/codecept init acceptance

Im Dialog alle Fragen erst einmal mit Enter bestätigen (wird später bearbeitet).
Dann legen wir einen neuen Acceptance Test an mit dem Namen „Webseite“:

php vendor/bin/codecept generate:cest acceptance Webseite

Allerdings müssen wir jetzt auch schon das erste Problem lösen: die WebDriver Konfiguration. Der WebDriver ist für jedes ernsthafte Testprojekt Voraussetzung, denn damit sind eine Menge Browserfunktionen für Tests verwendbar. Für die Installation gibt es verschiedene Möglichkeiten:

Wenn dann der WebDriver richtig installiert und konfiguriert ist, machen wir weiter mit dem Einstiegstest: frontpageWorks
Die TestURL muss noch konfiguriert werden. Da kann man eine remoteURL wie in diesem Beispiel Google eintragen, aber auch http://localhost oder die Projekt URL. Momentan noch statisch, konfigurierbar wird die URL in Teil2.

1) In codeception.yml die url ändern:
    - WebDriver:
        url: https://www.google.de
        browser: chrome
2) in WebseiteCest den Test hinzufügen
    public function frontpageWorks(AcceptanceTester $I)
    {
        $I->amOnPage('/');
        $I->see('Google');
    }
3) Alle Tests ausführen mit:
    php vendor/bin/codecept run

Wer ein automatisch generiertes „LoginCest“ im Projekt hat, sieht jetzt, dass ein paar mehr Tests aufgerufen werden als gedacht. Damit sind wir auch schon bei einer der ersten Fragen:
Wie rufe ich eigentlich einen einzelnen Test auf? Denn mit „run“ werden ja immer alle Tests aufgerufen?

Einzelne Testklasse: 
    php vendor/bin/codecept run acceptance WebseiteCest
Testklasse im Unterordner:
    php vendor/bin/codecept run acceptance MyFolder/WebseiteCest
Einzelne Funktion: 
    php vendor/bin/codecept run acceptance WebseiteCest:frontpageWorks

Als nächstes bringen wir ein bisschen Struktur ins Projekt. Dafür am besten jetzt das Gitlab Projekt von Teil1 öffnen. Dort sind die folgenden Änderungen an der Projektstruktur:

  • LoginCest.php kann erst mal gelöscht werden (das Thema Login schaue ich mir später noch ausführlich an)
  • eine neuer Ordner „acceptance“ wird im Ordner „tests“ angelegt. Dahin verschiebe ich „WebseiteCest.php“, und dahin kommen ab jetzt alle Cest Dateien.
  • eine zusätzliche Yaml Datei „acceptance.suite.yml“ wird in tests angelegt. Der Block „suite“ aus „codeception.yml“ kommt jetzt in diese neue Datei. Damit haben wir jetzt eine ordentlich konfigurierte Testsuite namens „acceptance“ mit eigener Yaml Datei.
    Daraus ergibt sich der Aufruf „run acceptance“ – und es sind weitere Testsuites mit beliebigen Namen möglich.
  • ein Namespace wurde in „codeception.yml“ hinzugefügt. Weiß nicht wie es euch geht, ohne Namespaces kann ich nicht arbeiten…
    Ein „run“ Aufruf findet jetzt natürlich nichts mehr, denn unseren Testdateien fehlt der Namespace Eintrag. Diesen also in WebseiteCest.php und allen anderen Dateien im Ordner „_support“ hinzufügen.
  • Nur die Dateien in „_generated“ kann man ignorieren. Diese kann man einfach löschen, dann werden sie automatisch neu generiert. Deswegen ist der Ordner auch im .gitignore

Die Codes bis hierher findet man im zugehörigen git Repository, Branch: tutorial_part1
https://gitlab.com/aschmutt/codeception/tree/tutorial_part1

Und weiter geht es mit dem Tutorial Teil 2: Konfiguration mit Environment Variablen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.