2016-11-16 4 views
6

Sowohl Laravel als auch Selen verwenden die Behauptungen von PHPUnit. In Laravel und Selenium schreiben Sie Code, um Tests zu machen (anstatt Dinge in der GUI zu wählen; z. B. , write in: name->queryInput text:"test search", click: name->searchButton). Laravel und Selenium sind in der Lage, Webseiten zu besuchen, Formulare einzureichen und die Ergebnisse zu überprüfen. Sie können Tests sowohl in Laravel als auch in Selen automatisieren, indem Sie den Befehl PHPUnit zu cron hinzufügen.Warum Selen mit Laravel zum Testen verwenden?

Also Warum sollte ich Selen zum Testen in Laravel verwenden?

Das einzige, was mir einfällt, ist, dass Selenium Ihnen erlaubt, einen Browser zu wählen, in dem die Seiten geöffnet werden. Wenn Ihr Test nur mit Laravel-Tests besteht, kann es bei einigen Browsern fehlschlagen, wie zum Beispiel beim Internet Explorer.

In this Laracast sagt der Autor um 1:00:

Ein Problem mit diesem [Test in Laravel] ist, es enthält keine Hilfe von JavaScript. Stattdessen täuschen wir die Anfrage vor, wir bekommen die Antwort, wir untersuchen sie, aber keine Browser- oder JavaScript-Engine ist an diesem Prozess beteiligt.

Aber was sind die Nachteile der Vortäuschung der Anfragen? Wie würde Selenium helfen? Ein Beispiel wäre perfekt.

Antwort

6

Sie haben eigentlich schon die Antwort bekommen. Was Sie sagen, ist richtig.

Laravel Tests integriert intern werden die Anfragen emulieren und einige Vorteile nutzen können (wie Deaktivieren von Middleware, Mocking, Bespitzelung, etc.), um sicherzustellen, dass Sie ein bestimmtes Problem (Testfall) isolieren . Die Idee ist, die Anwendung zu testen, ohne die Komponenten-Nebenwirkungen von Drittanbietern in das Schlachtfeld einzuführen, das wäre: die Client-Browser, externe Dienste usw. Diese Art von Tests sind wirklich schnell und leicht. Auch sehr gut zum Testen von API-Aufrufen geeignet.

So Selen ist genau all jene Fälle abzudecken, in Wich Sie eigentlich wollen, dass diese Szenarien abdecken betroffen von Komponenten von Drittanbietern Nebenwirkungen, wie JavaScript in entweder Chrome, IE, Firefox, usw., auch in den verschiedenen Versionen von denen. Sie können dies wie einen Versuch verstehen, so nah wie möglich an dem real world-Szenario zu sein, wo der Client-Browser tatsächlich das erwartete Verhalten Ihrer Anwendung beeinträchtigen kann. Es ist auch möglich, Screenshots auszulösen, wenn Sie CSS oder interaktive Komponenten visuell validieren möchten. Es ist wichtig zu erwähnen, dass diese Tests aufgrund dieses Browser-Hooks viel langsamer ausgeführt werden.

Das Essen zum Mitnehmen dafür sein sollte, dass Sie entweder Verwendung der eine oder andere ausschließlich nicht brauchen. Sie arbeiten ähnlich, aber am Ende bieten sie unterschiedliche Fähigkeiten.Sie können eine Reihe von Laravel-Integrationstests und eine Reihe von Selenium-Tests für die Dinge haben, die Ihnen wichtig sind. I suggest you this Laracast

ich Ihnen kann an example in meinem Projekt zur Verfügung stellen, das nicht relevant, aber zumindest eine Art und Weise zu zeigen, dass beiden Testtypen im selben Projekt koexistieren können.

Hoffe, das hilft!

+2

Danke für die Antwort. Es lohnt sich also, alle Selenium-Komponenten zu installieren, da es dann, wie Sie sagten, das reale Szenario * imitiert. Aber dann scheint es, dass du immer Selen verwenden solltest, denn das ist dein Ziel. Ich habe die Laracast und die gleichen Tests in Selen geschrieben und wäre dann mehr * aus der realen Welt *. Könnten Sie also ein Beispiel geben, bei dem der Browser überhaupt keine Rolle spielt, weshalb ich genau weiß, wann Laravels integriertes Testen und wann Selenium zu verwenden ist? Ich weiß, das erweitert meine Frage, aber es wäre schön, ein vollständiges Bild zu haben. – user1

+2

Nun, ich habe etwas sehr Wichtiges nicht erwähnt. Selenium-Tests haben einen Nachteil, sie sind viel langsamer, wegen der Integration mit Browsern, und sie sind abhängig von einer konkreten Browser-Instanz als Abhängigkeit. In meinem speziellen Fall verwende ich hauptsächlich Laravel-integrierte Tests und Selenium nur für solche Tests, bei denen ich ein bestimmtes Szenario überprüfen muss (zum Beispiel JS oder Seiten-Rendering in einem bestimmten Browser aus einem ganz bestimmten Grund). – alariva

+2

@mr_jigsaw Id sagen, dass der Browser überhaupt keine Rolle spielt, solange Sie sich primär auf die Anwendungslogik konzentrieren (mehr von -say- Backend) Und es ist sinnvoll, Selenium zu verwenden, wenn Sie sich etwas mehr auf UI/UX konzentrieren browserspezifische Funktionen, bei denen es sich nur um wenige Anwendungsszenarios handeln könnte, die Sie testen möchten (mehr von -Say-Frontend) – alariva