×
Besser mit webmate

Besser mit webmate: Accountregistrierung testen



In unserer neuen Reihe “Besser mit webmate” wollen wir Ihnen zeigen, wie webmate helfen kann, besonders knifflige Testfälle zu meistern. Heute wollen wir uns einen Use Case anschauen, der fast auf jeder Seite zu finden ist, aber nur selten automatisiert abgetestet wird: Die “Account Registrieren” Funktion.

Der Use Case: Account registrieren

Egal ob man eine E-Commerce Plattform, ein Payment Portal oder eine E-Learning Webseite betreibt, in den meisten Fällen benötigen die Nutzer des Angebots einen passwortgeschützten Account auf der Webseite. Nach der eigentlichen Registrierung wird oft eine E-Mail mit einem Token oder einem Link an die angegebene E-Mail-Adresse geschickt, um zu verifizieren, dass der Nutzer auch tatsächlich Zugriff auf die angegebene E-Mail-Adresse hat. Dies ist oft schon allein aus regulatorischen Gründen notwendig. Erst im Anschluss kann der Nutzer die Funktionen der Plattform voll nutzen.

Eine Fehlfunktion innerhalb dieses Prozesses kann schnell teuer werden. Entgangener Umsatz, Aufwände im Support und Entwicklungskosten für einen Hotfix summieren sich schnell. Deswegen ist es wichtig, diese und andere essenzielle Funktionen regelmäßig vor dem Release zu testen, am besten automatisiert. Leider ist das Testen von Funktionen, die das Öffnen einer E-Mail benötigen, oftmals schwierig. Zunächst muss sichergestellt werden, dass auf der Testumgebung stets passende Accounts mit passenden E-Mail-Adressen vorhanden sind. Darüber hinaus müssen manuelle Tester bzw. automatisierte Testsysteme Zugriff auf die E-Mail-Adressen bekommen. All das verursacht Aufwand, benötigt stetige Pflege und lenkt das Entwicklerteam von seiner eigentlichen Aufgabe ab.

Ein manueller E-Mail Test
webmate erleichtert ihnen das Testen von E-Mails, indem es auf Wunsch E-Mail-Adressen generiert und die darauf empfangenen E-Mails direkt anzeigt.

Die Lösung: E-Mail-Testing mit webmate

Die Testautomatisierung dieses Prozesses ist dank des integrierten E-Mail-Testing mit webmate besonders einfach. Innerhalb einer Testsession kann man jederzeit eine zufällig generierte E-Mail-Adresse von webmate anfordern. E-Mails, die an diese Adresse geschickt werden, werden automatisch mit der Testsession assoziiert und können daraufhin abgerufen werden. Wir wollen uns anhand eines kurzen Beispiels die Funktionsweise anschauen.

Wir verwenden an dieser Stelle das webmate SDK, welches eine sehr einfache Integration webmate spezifischer Funktionen in bestehende Tests ermöglicht. Damit die E-Mail später in der richtigen Session landet, müssen wir direkt nach der Erstellung des Drivers eine webmate Session erstellen und den Driver mit dieser Session verknüpfen. Alle Aktionen und Screenshots des Drivers landen nun automatisch in der erstellten Session.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
//Erstellen des Drivers
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("browserName", browserName);
caps.setCapability("version", browserVersion);
caps.setCapability("platform", browserPlatform);
caps.setCapability(WebmateCapabilityType.API_KEY, WEBMATE_APIKEY);
caps.setCapability(WebmateCapabilityType.USERNAME, WEBMATE_USERNAME);
caps.setCapability(WebmateCapabilityType.PROJECT, WEBMATE_PROJECTID);

driver = new RemoteWebDriver(new URL(WEBMATE_SELENIUM_URL), caps);

// Erstellen der webmate Session
WebmateAuthInfo authInfo = new WebmateAuthInfo(WEBMATE_USERNAME, WEBMATE_APIKEY);
WebmateAPISession webmateSession = new WebmateAPISession(authInfo, WebmateEnvironment.create(new URI(apiUrl)));

// Verknüpfen der Driver Session mit der webmate Session

WebmateSeleniumSession webmateSeleniumSession = webmateSession.addSeleniumSession(driver.getSessionId.toString);

Der eigentliche Test kann nun wie gewohnt starten. Die für die Registrierung benötigte E-Mail-Adresse wird einfach bei webmate angefragt und im weiteren Prozess verwendet. Die dafür benötigte TestRunId stammt von der webmate Session, die wir mit dem Driver verknüpft haben.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
//Anfragen der Testrun ID
TestRunId testRunId = webmateSeleniumSession.getTestRunId;

//Navigation zum Registrierungsprozess
driver.get("app.examplepage.org/register");
...

//Eingabe der Registrierungsinformationen mit generierter E-Mail Adresse
...
TestMailAddress EmailAddress = webmateSession.mailTest.createTestMailAddress(WEBMATE_PROJECTID, testRunId);
driver.findElement(By.id("E-MailAddress")).sendKeys(EmailAddress.getAddress);
driver.findElement(By.id("password")).sendKeys('bitteaendern');
...
driver.findElement(By.id("submit_btn")).click();

Durch die Assoziation der E-Mail-Adresse mit dem Testrun kann webmate die auf dieser Adresse empfangenen Mails direkt als Testartefakt der laufenden Session zuordnen. Dadurch können Sie sich auch im Nachhinein alle E-Mails anschauen. Im nächsten Schritt müssen wir nun auf die E-Mail warten. Wir benutzen hierfür einen Polling-Mechanismus, der nach einer gewissen Zeit abbricht und den Test für gescheitert erklärt, da die E-Mail nicht innerhalb der spezifizierten Zeit angekommen ist.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//Variablen initialisierung
boolean mailOk = false;
int i = 0;
List[TestMail] mails: = null;

// Wir pollen alle 5 Sekunden. Der Timeout beträgt also insgesamt 1 Minute
int timeout = 12;

while (!mailOk && i < TestConstants.E-MailTimeout) {
  logger.debug("Waiting for mail ...");
  Thread.sleep(5000);

  // Rufe alle Mails innerhalb des Testruns ab.
  mails = webmateSession.mailTest.getMailsInTestRun(webmateProjectId, testRunId);

  // Damit bei längern Wartetimeouts die Selenium Session aufgrund von Inaktivität nicht geschlossen wird, führen wir an dieser Stelle eine beliebige
  // Aktion aus
  driver.findElement(By.xpath("/*"));

  // Da wir wissen, das wir bisher noch keine empfangen haben, reicht die existenz einer E-Mail als Kriterium aus
  if (!mails.isEmpty) {
    mailOk = true;
  }

  else {
    i += 1;
  }
}

Wenn die Registrierungsmail mit Aktivierungslink rechtzeitig angekommen ist, können wir direkt auf den Inhalt der Mail zugreifen, um gewisse Eigenschaften wie beispielsweise den Absender zu verifizieren. An dieser Stelle interessiert uns natürlich vor allem der Aktivierungslink, mit dem wir den Aktivierungsprozess abschließen möchten.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// Überprüfe den Absender
String fromAddress = mails.get(0).getFrom();
assertEquals("From is not correct", "mailTest@company.com",  fromAddress);
// E-Mail Text anfordern, zerlegen und Aktivierungslink extrahieren
String E-MailText = mails.get(0).getE-MailContent.get("txtBody").asText();
Optional<String> activationURL = Arrays.stream(E-MailText.split(" ")).filter(text -> text.startsWith("https")).findFirst();

// Ist kein Aktivierungslink vorhanden, muss ein Fehler vorliegen. 
assertTrue("Activation url not found in E-Mail body", activationURL.isDefined());

// Wir navigieren den Browser zum Aktivierungslink, um die Aktivierung abzuschließen
driver.get(activationURL.get());

Um zu verifizieren, dass die Aktivierung auch wirklich reibungslos geklappt hat, versuchen wir einen Login mit den im Test verwendeten Daten.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
//Zur Loginseite navigieren
driver.get("app.examplepage.org/login");

//Einloggen
driver.findElement(By.id("E-MailAddress")).sendKeys(E-MailAddress.getAddress);
driver.findElement(By.id("password")).sendKeys('bitteaendern');
driver.findElement(By.id("login_btn")).click();

//Wenn der Login geklappt hat, muss ein Element der Startseite auffindbar sein. Ist dies der Fall, markieren wir den Testrun in webmate als erfolgreich.
driver.findElement(By.id("login_welcome"));
webmateSeleniumSession.finishTestRun(TestRunEvaluationStatus.PASSED);
driver.quit();

Ist der Login erfolgreich, können wir davon ausgehen, dass der Aktivierungsprozess wie vorgesehen funktioniert. Der automatisierte Test kann nun als Teil eines Integrationstests vor einem Release mitlaufen. Somit ist stets sichergestellt, dass der Aktivierungsprozess sauber funktioniert.

Der Ausblick: Weitere Use Cases für E-Mail-Testing

Die Nutzung von E-Mail-Testing ist natürlich nicht nur auf das Testen des Aktivierungsprozesses beschränkt. Viele weitere Prozesse innerhalb des Accountmanagements benötigen oft eine Interaktion mit dem Nutzer über seine E-Mail-Adresse, beispielsweise die “Passwort vergessen” Funktion. Auch gibt es oft Funktionen, bei denen dem Nutzer zusätzlich eine E-Mail geschickt wird, um ihn beispielsweise über Änderungen an seinen persönlichen Daten oder über den Versand des bestellten Produkts zu informieren. In all diesen Fällen können Sie das E-Mail-Testing gewinnbringend einsetzen, um das Testen dieser Prozesse zu automatisieren.

Sie können das E-Mail-Testing in webmate auch bei Ihren manuellen Tests verwenden. Das Suchen der E-Mail im Posteingang entfällt hierbei, da ankommende E-Mails direkt in der webmate Konsole betrachtet werden können. Weitere Informationen finden Sie in unserer Dokumentation.

Sollten Sie weitere Fragen haben oder Unterstützung bei der Umsetzung brauchen, schreiben Sie uns gerne. Sie nutzen webmate noch nicht, wollen E-Mail-Testing aber mal selbst ausprobieren? Buchen Sie einen Demotermin!

Wählen Sie Ihren Wunschtermin!

Zum Kalender