Geb Anmeldespezial anhand eines Beispiels

8

Ich versuche mich mit Geb vertraut zu machen. Ich versuche es aus dem Inneren der Grails herauszubekommen, aber das sollte überhaupt nichts ausmachen, da meine Frage hier spezifisch für Geb ist.

Ich habe die folgende test Verzeichnisstruktur:

%Vor%

Wo LoginPage.groovy (offensichtlich) die Anmeldeseite ist und wo DashboardPage ist, wohin Sie nach erfolgreicher Anmeldung weitergeleitet werden sollten. In Wirklichkeit habe ich Sicherheitsfilter installiert, die prüfen, ob die URL, auf die Sie zugreifen möchten, eine Authentifizierung erfordert. Wenn dies der Fall ist, leiten sie Sie zur Anmeldeseite weiter und leiten Sie nach erfolgreicher Anmeldung erneut zu der URL um, auf die Sie zugreifen wollten.

Zum besseren Verständnis, hier ist der HTML-Code, der meine Login-Seite umfasst (wiederum ist dies Grails, also wird eine GSP-Datei zur Laufzeit dynamisch in HTML konvertiert):

%Vor%

Also brauche ich einen Geb test, dass:

  1. Versucht, zur Dashboard-Seite zu gehen (nicht autorisiert)
  2. Überprüft, dass wir stattdessen zur Anmeldeseite
  3. weitergeleitet wurden
  4. Melden Sie sich mit guten Anmeldeinformationen an
  5. Überprüft, dass wir nicht auf der Dashboard-Seite
  6. sind

Außerdem:

  • Ich würde gerne wählen zwischen: (a) entweder Browser-basiert ( Firefox oder Chrome ) oder (b) einem kopflosen Browser (den ich glaube, ist der HtmlUnitDriver , aber korrigiere mich, wenn ich falsch liege)
  • Ich möchte, dass die Anmeldedaten, die von Geb verwendet werden, entweder von der GebConfig -Datei oder von einem externen Parameter injiziert werden können (vielleicht als env vars oder als Laufzeitargumente für die Grails-Befehlszeile). Im Wesentlichen möchte ich nicht Benutzername / Passwort in Testcode speichern.

Mein bisher bester Versuch:

GebConfig.groovy :

%Vor%

LogInLogOutSpec.groovy :

%Vor%

Ich glaube, ich bin , aber das ist offensichtlich falsch. Irgendwelche Ideen, wo ich schief gehe? Danke!

    
smeeb 09.10.2015, 17:34
quelle

2 Antworten

6

Sie sollten Ihren Testcode modularisieren. Sie sollten

verwenden
  • Module für UI-Widgets, die auf verschiedenen Seiten vorkommen können
  • Seiten 1 , 2 ) um eine bestimmte HTML-Seite zu modellieren
  • Spezifikationen für die eigentliche Testlogik

In Ihrem Codebeispiel haben Sie eine Dashboard-Seite, aber kein Anmeldeseitenobjekt. Sie sollten sich auch Gedanken über ein Login-Modul machen, wenn alle Ihre Seiten die Möglichkeit haben, sich einzuloggen oder zumindest die Möglichkeit bieten, den Login-Status zu erkennen. Sehen Sie sich diese SO-Antwort für eine Moduldefinition an. Was fehlt, ist eine Funktion, um den Login-Status zu bestimmen. Für eine andere Implementierung sehen Sie sich die AuthModule und die Anmelde-Testspezifikation der Geb-Beispiele .

Zu den Anmeldedaten: Ich denke, Sie haben die Anmeldeinformationen in der Umgebung gut gemacht. Dies funktioniert auf einem Entwicklungscomputer und auch auf dem Build-Server.

Zum Testen mit verschiedenen Browsern: geb-example-gradle ist ein Beispielprojekt mit einem GebConfig und ein build.gradle . Dadurch können Sie den Browser als Argument auf Gradle umstellen:

%Vor%

Dies beantwortet auch Ihre letzte Frage: Ein guter kopfloser Browser, den ich gerne verwende, ist phantomJs .

    
ChrLipp 13.10.2015 14:22
quelle
0

Verweisen Sie auf Geb spec für ein Beispiel. Hauptsächlich können Sie überprüfen, wie LoginModule bietet das Login-Verhalten wie verwendet hier .

%Vor%

Die Anwendung verwendet HtmlUnit driver.

Lassen Sie es wissen, wenn Sie weitere Erklärungen benötigen.

    
dmahapatro 17.10.2015 00:58
quelle