Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Testing

Programmierung mit Yii2: Automatisiertes Testen mit Codeception

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called How to Program With Yii2.
Programming With Yii2: Security
How to Program With Yii2: ActiveRecord

German (Deutsch) translation by Wei Zhang (you can also view the original English article)

Final product image
What You'll Be Creating

Wenn Sie fragen: "Was ist Yii?" Sehen Sie sich mein früheres Tutorial, Einführung in das Yii-Framework, an, das die Vorteile von Yii beschreibt und einen Überblick darüber enthält, was in Yii 2.0, veröffentlicht im Oktober 2014, neu ist.

In dieser Programming With Yii2-Serie leite ich die Leser mit dem Yii2 Framework für PHP. In diesem Tutorial erkläre ich das automatisierte Testen mithilfe von Codeception, das in das Yii2-Entwicklungsframework integriert ist.

Zugegeben, meine Erfahrung beim Schreiben von Tests mit meinem Code ist knapp. Ich war oft Teil von Einzelprojekten oder kleinen Projekten mit begrenzten Ressourcen. Während meiner Zeit bei Microsoft hatten wir verschiedene Testteams, die das taten. Aber ehrlich gesagt, das ist wahrscheinlich auch für dich typisch, oder? Programmierer schreiben gerne, sie schreiben keine Tests - zumindest Programmierer der alten Schule nicht.

Codeception ist eine innovative Bibliothek, die buchstäblich das Schreiben von Tests zum Kinderspiel macht. Und ich würde sagen, dass sie zu einem vernünftigen Grad erfolgreich waren. Als ich meinen Zeh in das Wasser von "Lake Codeception" tauchte, war es meistens einfach und lustig. Als ich jedoch tiefer ging, stieß ich auf Konfigurationsprobleme mit Yii und den spezifischen Modulen, die in dieser Serie verwendet wurden. Es gab definitiv Herausforderungen. Insgesamt bin ich beeindruckt und sehe den Vorteil, mehr zu lernen.

Einfach gesagt, Codeception und seine Integration mit Yii lassen mich mehr Tests schreiben, eine Premiere für mich. Ich vermute, du wirst eine ähnliche Erfahrung machen.

Eine kleine Erinnerung, bevor wir anfangen, nehme ich an den Kommentarthreads unten teil. Ich bin besonders interessiert, wenn Sie zusätzliche Gedanken haben oder Themen für zukünftige Tutorials vorschlagen möchten. Wenn Sie eine Frage oder einen Themenvorschlag haben, bitte posten Sie unten. Sie können mich auch auf Twitter @reifman direkt erreichen.

Fertig machen

Codeception installieren

Um mich zu führen, habe ich Yii Testing Environment Setup Dokumentation verwendet. Ich begann mit einer globalen Installation von Codeception, damit ich sie aus jedem Projekt verwenden konnte.

Sie müssen auch codeception/specify benötigen:

Und codeception/verify:

Als nächstes hilft es, einen Alias für codecept unter Verwendung Ihres globalen Composer-Verzeichnisses einzurichten:

Dies setzt den Alias:

Yii erfordert auch, dass Sie Faker installieren, der gefälschte Testdaten für Ihre Anwendung generiert:

Einrichten der Codeception mit Ihrer Anwendung

codecept bootstrap initialisiert die Codeception für Ihre Yii-Anwendung und erstellt eine Vielzahl von Konfigurationsdateien zum Erstellen und Ausführen von Tests für Ihre Anwendung. Wir verwenden die Hello-Anwendung aus dieser Serie für dieses Tutorial. Sehen Sie sich den GitHub-Link auf dieser Seite an, um den Code zu erhalten.

Aus irgendeinem Grund endete ich auch mit doppelten Testverzeichnissen in Hallo / Tests; nur hello / tests / functional, hallo / tests / acceptance und hello / tests / unit wurden gelöscht. Alle Tests leben in hello/tests/codeception/*.

Die verschiedenen Arten von Tests

Die Codeception konzentriert sich auf drei Arten von Tests:

  1. Das Testen von Einheiten überprüft, ob bestimmte Einheiten funktionieren, z. B. ein umfassender Test aller Methoden Ihres Modells.
  2. Funktionstests verifizieren gängige Anwendungsszenarien so, als ob sie von einem Benutzer ausgeführt würden, aber mithilfe der Webbrowser-Emulation.
  3. Akzeptanztests sind identisch mit Funktionstests, führen die Tests jedoch über einen Webbrowser durch.

Und es unterstützt drei verschiedene Arten von Testformaten für Ihren Testcode:

  1. Cept: Es ist die einfachste Testdatei für ein einzelnes Szenario
  2. Cest: ein objektorientiertes Format zum Ausführen mehrerer Tests innerhalb einer einzigen Datei
  3. Test: Tests geschrieben auf PHPUnit, einem PHP-Testframework

Beginnen wir mit einem Beispiel für Akzeptanztests im ceptformat:

Abnahmeprüfung

Wir werden zuerst das Testbeispiel für die Begrüßung von Codeception verwenden.

Dies erzeugt tests/acceptance/WelcomeCept.php, die wir unten bearbeiten werden.

Da Abnahmetests den Browser erfordern, müssen wir /tests/acceptance.suite.yml in unserem Projekt bearbeiten, um unsere Entwicklungs-URL http://localhost:8888/hello bereitzustellen:

Jetzt können wir den ersten Test in tests/acceptance/WelcomeCept.php ändern. Ich schreibe einen Test, der die Titelseite lädt, um sicherzustellen, dass es wie erwartet funktioniert.

Codeception-Tests haben das Konzept eines Actors, in diesem Fall $I= new AcceptanceTester().

So beschreibt es Akteure in der Codeception-Dokumentation:

Wir haben einen UnitTester, der Funktionen ausführt und den Code testet. Wir haben auch einen FunctionalTester, einen qualifizierten Tester, der die Anwendung als Ganzes mit der Kenntnis seiner Interna testet. Und ein AcceptanceTester, ein Benutzer, der mit unserer Anwendung über eine von uns bereitgestellte Schnittstelle arbeitet.

Sie können Ihre Tests mit Code kommentieren, z. B. $I->wantTo('perform a certain test') oder 'ensure that the frontpage works'.

In meinem Test möchte ich $I->see Text für 'Congratulations!' und 'Yii-powered':

Hier ist die aktuelle Hallo-Startseite:

Programming with Yii - The Hello Home Page

Lassen Sie uns als nächstes den Test ausführen, einfach codecept run:

Wie Sie sehen können, hat unser Test bestanden und der Code zur Überprüfung dieser Funktionalität war sehr gut lesbar und einfach.

Hinweise zu den Standardtests von Yii

Um weiter zu gehen, habe ich Yi's Standardtests benutzt. An diesem Punkt stieß ich auf eine Reihe von Konfigurationsproblemen - hauptsächlich aufgrund der Verwendung des benutzerdefinierten yii2-Benutzermoduls in dieser Serie. Andere waren auf kleine Bugs mit Yii zurückzuführen, auf die das Team schnell reagiert hat und fixieren, wenn GitHub gemeldet wurde. In einigen Fällen wurden Probleme in späteren Versionen des yii2-basic tree behoben.

Da ich den yii2-basic tree für diese Serie aktualisiert habe, musste ich auch einige Änderungen an den Standardtests vornehmen.

Hier ist ein Beispiel für die Ausgabe zum Ausführen der Standard-Akzeptanztests, nachdem ich einige kleinere Anpassungen vorgenommen hatte:

Funktionsprüfung

Um funktionsfähige Tests zu erhalten, musste ich eine Instanz des integrierten Servers von Yii ausführen. Ich wusste nichts über diese Komponente, bis Yi's Alex Markov es in unserem GitHub-Austausch erwähnte.

Ich habe kleine Änderungen an den Funktionstests in / tests / codeception / functional vorgenommen, hauptsächlich um nach meinen spezifischen aktualisierten Textzeichenfolgen zu suchen, d. H. "Invalid login or password" anstelle von Yi's Standard. Hier ist ein Blick auf LoginCept.php:

Grundsätzlich greift der Code auf das LoginForm-Modell zu und testet seine verschiedenen Methoden mit Hilfe von Yii serve.

Hier ist der Testcode /tests/codeception_pages/LoginPage.php, den er nutzt (ich musste ihn auch ändern, um Änderungen an der Serie vorzunehmen):

Sie können sehen, dass wir den Actor mit fillFields kodieren und auf die Schaltflächen für unsere aktualisierten Formularfelder klicken.

Bei der Fehlerbehebung meiner Codeception-Integration mit Yii fand ich es hilfreich, diese Tests im ausführlichen Modus auszuführen:

Hier ist die ausführliche Ausgabe der Funktionstests für die Anmeldung: Im MacOS-Terminal sind PASSED und FAILED rot oder pinkfarben und für Sichtbarkeit invertiert:

Insgesamt gibt es ein bisschen zu lernen, um mit der Codeception anzufangen und Ihre Tests richtig zu programmieren. Aber die Ergebnisse sind beeindruckend und hilfreich.

Komponententest

Grundsätzlich sind Komponententests ein programmatischer Test unserer Infrastruktur und Modelle. Im Idealfall würden wir Tests für jede Methode und jede Nutzungsvariante unserer Modelle schreiben.

Leider war ich nicht in der Lage, Unit-Tests in unserem Baum zu betreiben, entweder wegen kleiner Yii-Bugs, die noch nicht veröffentlicht wurden, oder wegen Konfigurationsproblemen zwischen Codeception und yii2-user, die wir in Programmieren mit Yii2: Integrating User Registration integriert haben.

In unserer Startup-Reihe, die yii2-user nicht verwendet, sondern die integrierte Benutzerintegration der Yii Advanced-Baumstruktur verwendet, werde ich noch einmal auf Unit-Tests eingehen.

Lassen Sie uns ein paar Beispiele aus dem Yii2-App-Basisbaum betrachten.

E-Mails des Kontaktformulars testen

Der Befehl hello/tests/codeception/unit/models/ContactFormTest.php testet das Senden einer E-Mail über die programmatische Verwendung von Modellen:

Ich konnte diesen Test aufgrund eines kleinen Fehlers in Yii, der noch nicht aktualisiert wurde (oder zumindest konnte ich den aktualisierten Code nicht finden), nicht erfolgreich bestehen. Mein Drop der Yii-Codebase benannte ausgehende E-Mails mit Datumsstempeln und der obige Code suchte nach einem festen Dateinamen. So ist es immer gescheitert. Dennoch ist es nützlich zu sehen, wie programmatische Tests Modelle verwenden können, um eine Datei zu generieren und dann nach dieser Datei zu suchen und ihren Inhalt zu überprüfen, um zu überprüfen, ob der Code funktioniert.

Testen der Anmeldung

Schauen wir uns hello/tests/codeception/unit/models/LoginFormTest.php an. Wiederum machte es meine Verwendung des yii2-Benutzers zum Zeitpunkt des Schreibens dieses Tutorials übermäßig schwierig zu integrieren; Wir können jedoch den konzeptionellen Ansatz für Unit-Test-Benutzermodellfunktionen betrachten.

Hier ist testLoginCorrect(), die prüft, ob die Anmeldung mit einem korrekten Passwort erfolgreich ist:

Es verwendet das LoginForm-Modell, um den Benutzer programmgesteuert einzuloggen. Anschließend sucht es programmgesteuert nach dem aktuellen Benutzer von Yii, der nun kein Gast mehr ist.

Was kommt als nächstes?

Ich hoffe, dass es euch Spaß gemacht hat, über Codeception und seine Integration mit Yii zu lernen, trotz einiger der Hindernisse, denen ich begegnet bin. Die Standardinstallation von yii2-basic sollte heute besser funktionieren.

Wenn Sie mehr darüber erfahren möchten, wann und was getestet werden soll und warum, empfehle ich, Yiis Testing Overview zu lesen. Es gibt sicherlich mehr über Codeception zu lernen und umfassendere Tests zu schreiben.

Achten Sie auf kommende Tutorials in unserer Programming With Yii2-Serie, während wir weiter in verschiedene Aspekte des Frameworks eintauchen. Wenn du wissen möchtest, wann das nächste Yii2-Tutorial eintrifft, folge mir @reifman auf Twitter oder schau auf meiner Instructor-Seite vorbei.

Vielleicht möchten Sie auch unsere Build Your Startup With PHP-Serie, die Yii2-Vorlage verwendet, wie wir eine reale Anwendung erstellen. In der Tat können Sie heute die Startanwendung Meeting Planner ausprobieren.

ähnliche Links

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.