You are currently viewing Gedanken unserer Praktikantinnen, Teil 5 – Automated website login testing mit Selenium

Gedanken unserer Praktikantinnen, Teil 5 – Automated website login testing mit Selenium

Dieses mal wurde mir die Aufgabe zuteil, eine Webseite vor dem Deployment zu testen; natürlich automatisiert mit einer gitlab CI-CD Pipeline.

Quelle

Als Erstes müssen wir also ein Docker Image bauen, welches alle Module und Erweiterungen besitzt welche wir benötigen werden.
Da ein Webbrowser benötigt wird brauchen wir ein Debian: unstable image. Die anderen Docker Versionen von Debian unterstützen keine Webbrowser.

Folgende Erweiterungen werden benötigt:

  • Firefox
  • Geckodriver
  • Selenium
  • Python3
  • Requests
  • wget
  • tar

Folgende Sachen werden mit wget heruntergeladen und mit tar entpackt:

  • Python3
  • Requests
  • Geckodriver

Tar kann man sich prinzipiell wie eine .zip Windows Datei vorstellen, mit dem Unterschied, dass keine Komprimierung zustande kommt. Es werden einfach nur ein Haufen Dateien zusammengepackt, ohne Struktur. Das ist unter anderem auch der Grund, weswegen man eine .tar datei nicht wie eine .zip Datei öffnen kann und die vorhandenen Dateien sehen kann. Eine .tar Datei muss entpackt werden damit man den Inhalt sieht.

Ein weiterer Punkt der .tar interessant macht ist, dass eine .tar Datei von jedem Betriebssystem erkannt werden kann und jede gängige Freeware Lösung wie z.b. Winrar und 7zip diese entpacken kann.

Firefox und Geckodriver werden beide von Selenium benötigt.

Selenium startet Firefox über den Geckodriver. Dieser muss in der globalen $PATH Variable zu finden sein. Einfachheitshalber würde ich deswegen vorschlagen, dass Geckodriver somit in /usr/bin installiert wird, da dies einer der Orte ist wo viele dependancies installiert sind und worauf die $PATH Variable hinweist.

Die größte Herausforderung war diesmal ein Password und einen Nutzernamen verschlüsselt an das Python Skript in der gitlab pipeline zu übergeben. Immerhin wollen wir nicht, dass unsere Passwörter in die falschen Hände gelangen.

Gelöst wurde dies dank gitlabs Fähigkeit, Variablen auch als File zu speichern und die Möglichkeit, diese Files mit Python auszulesen.

Gitlab Variablen werden somit in einem temporären Ordner als Datei gespeichert, welche das Python-Script ganz einfach auslesen kann. Somit kann ich eine Variable erstellen, welche einfach nur aus dem Inhalt der Datei (Passwort, Nutzernamen) besteht und diese zum anmelden der Webseite verwenden, um diese schlussendlich auszutesten.

Selenium funktioniert relativ einfach. Mit dem find_element Befehl kann man schnell und einfach die HTML Struktur einer Webseite durchgehen. Sei dies jetzt einfach durch das Finden einer ID oder aber durch strukturiertes durchgehen des HTML Codes selbst, einem XPATH. XPATH kann man auch ganz einfach in dem Terminal des Webbrowsers kopieren. Man muss nicht mühsam alles einzeln durchgehen, um dorthin zu kommen wo man hin will.

Das Skript meldet sich also einfach mithilfe der Variablen in gitlab an, und geht dann die Webseite durch um zu testen, o alles, worauf geklickt werden kann auch funktioniert.

Schlussendlich wird mit dem requests modul ein .txt file heruntergeladen und schließlich mit einer anderen .txt Datei verglichen. Beide sollten gleich sein, um sicher zu gehen, dass die Datei beim Download nicht korrumpiert wurde.

Sollte dies nicht der Fall sein, wird ein sys.exit() error code geworfen welcher dafür sorgt, dass die Pipeline nicht erfolgreich abgeschlossen wird. Immerhin wollen wir ja nichts deployen was nicht funktioniert.

Das einzige Problem, dass ich im Code gesehen habe, war Folgendes; wenn die Navigation nicht funktioniert bleibt im Browser ein Fenster offen. Ich muss, um eine Webseite zu navigieren, vorher ein Browser Fenster öffnen und es wieder schließen, sobald ich fertig bin. Dafür gibt es auch einen eigenen Befehl in Selenium.

Glücklicherweise hat mir mein Kollege diese Sorge genommen indem er mir sagte, dass alles, was in der Pipeline ausgeführt wurde, nach einer Stunde wieder zurückgesetzt wird. Ergo: Keine offenen Browser-Fenster.

Leave a Reply