Testautomatisierung mit dem Robot Framework und Playwright

🕒 Lesedauer: 8 Minuten

Ein Unternehmen, das mit dem Gedanken spielt, in die Testautomatisierung einzusteigen, ist entweder ein Unternehmen, das Testen von Grund auf einführen möchte, oder ein Unternehmen, das manuelles Testen durch automatisiertes Testen ersetzen möchte. Damit stellt sich ein neues Problem: Wie soll die Testautomatisierung aussehen bzw. welches Testwerkzeug soll verwendet werden? Ist das Team sehr technikaffin, liegt die Antwort meist auf der Hand: Klassiker wie Playwright, Selenium oder Cypress können zur Automatisierung eingesetzt werden. Was aber, wenn das Team weniger technikaffin ist? Gibt es auch für sie eine Möglichkeit, Testfälle automatisch zu implementieren? Zur Beruhigung der jetzt vielleicht besorgten Gemüter kann positiv verkündet werden, dass auch diese Zielgruppe gut bedient ist. Ein Werkzeug, das diese Aufgabe erfüllt, ist das Robot Framework in Kombination mit der Playwright Library, um das es in diesem ersten Blogbeitrag der Serie gehen soll.

 

1. Was ist Testautomatisierung?

Wie der Begriff “Testautomatisierung“ bereits andeutet, besteht das Ziel darin, manuelle Testaktivitäten in einen automatisierten Zustand zu überführen. Man stelle sich eine Situation vor, in der ein manueller Tester ein und dasselbe Objekt zehnmal hintereinander testen muss. Je nach Komplexität wird man schnell feststellen, dass sich die Ergebnisse von Lauf zu Lauf unterscheiden können. Die Ursachen hierfür können u.a. im Faktor “Mensch“ selbst liegen. Er kann bei jedem Durchlauf falsche Daten hochladen, falsche Felder ausfüllen oder Schritte versehentlich überspringen, was häufig zu unnötigen Fehleranalysen führt. Genau diese und sich wiederholende Aufgaben können durch Testautomatisierung ersetzt werden. Dies spart vor allem Zeit und Ressourcen und führt zu einer insgesamt höheren Softwarequalität.

 

2. Was ist Playwright?

Playwright ist ein Testautomatisierungstool, das am 31. Januar 2020 von Microsoft veröffentlicht wurde. Die Köpfe hinter Playwright sind dieselben, die auch an der Entwicklung von Googles Puppeteer beteiligt waren. Wie Selenium und Cypress ist Playwright in erster Linie ein UI-Testautomatisierungswerkzeug, das die Programmiersprachen TypeScript, JavaScript, Java, Python und .NET C# unterstützt. Bei den Browsern werden Firefox, Chromium und Webkit auf Windows-, Linux- und Mac OS-Systemen unterstützt.

 

3. Warum E2E-Tests automatisieren?

E2E (End-to-End) Testfälle beziehen sich auf den gesamten Workflow einer Anwendung. Nimmt man als Beispiel einen Online-Shop, so muss man sich zunächst einloggen, dann Waren in den Warenkorb legen und schließlich zur Kasse gehen, um den Einkauf abzuschließen. Auch wenn dieser Prozess auf den ersten Blick einfach erscheint, ist zu bedenken, dass in einem solchen Prozess mehrere Dienste und Komponenten miteinander kommunizieren müssen. Da im Laufe der Zeit Fehler in der Anwendung auftreten können, ist es wichtig, diese so schnell und früh wie möglich zu erkennen. Hier kommen E2E-Tests ins Spiel, die in regelmäßigen Abständen den Zustand der Anwendung über mehrere Benutzerpfade hinweg überprüfen und die Ergebnisse in Form von Reports sofort zurückmelden. Wer also das Risiko minimieren will, sollte unbedingt auf E2E-Automatisierung setzen.

 

4. Was ist das Robot Framework?

Seit seiner Veröffentlichung am 24. Juni 2008 erfreut sich das Robot Framework bei Unternehmen immer größerer Beliebtheit: War es anfangs auf Nokia und den finnischen Markt beschränkt, nutzen es mittlerweile auch Konzerne wie DB Schenker und ING.
Das Robot Framework ist ein auf Open Source basierendes Automatisierungs-Framework. Unter den Testwerkzeugen gehört es zu den Keyword-Driven, ähnlich wie Cucumber. Es zeichnet sich insbesondere durch seine einfache und menschenlesbare Skriptsprache für eine benutzerfreundliche Erfahrung sowie die einfache Integration in viele IDEs und Texteditoren aus. Das Framework ist in Python implementiert, was die Verwendung einer großen Anzahl öffentlicher Open-Source-Bibliotheken ermöglicht. Die Weiterentwicklung wird hauptsächlich von der Robot Framework Foundation finanziert.

 

4.1 Vorteile des Robot Framework

Die Vorteile des Robot Framework sind wie folgt:

  • Durch seine menschenlesbare Skriptsprache ist das Robot Framework ein benutzerfreundliches Testautomatisierungswerkzeug, das auch von technisch weniger versierten Personen leicht bedient werden kann.

  • Es kann durch verschiedene Bibliotheken erweitert werden.

  • Es bietet ein breites Spektrum an Testmöglichkeiten: Web, Mobile, API und Desktop.

  • Es ist plattformübergreifend und kann unter Windows, macOS und Linux eingesetzt werden.

  • Datengetriebenes Testen: Ein bestehendes Skript kann für verschiedene Testdaten verwendet werden.

  • Es erlaubt die automatische Generierung von HTML-Reports.

  • Einfache Integration in die CI/CD Pipeline, u.a. Jenkins, Gitlab CI und Travis CI.

  • Es gibt eine aktive und etablierte Community.

  • Einfache Integration in andere Testwerkzeuge wie Playwright, Selenium oder Cypress.

 

4.2 Die Architektur setzt sich aus vier Ebenen zusammen:

  1. Testdaten
    Auf der ersten Ebene erhält das Robot Framework die zu testenden Daten, die im Prozess verarbeitet und für den Test aufbereitet werden.
  2. Das Robot Framework selbst
    Auf der zweiten Ebene bezieht das Framework die Schlüsselwörter aus den zugehörigen Bibliotheken, um mit dem zu testenden Objekt zu interagieren.
  3. Die Testbibliotheken
    Auf der dritten Ebene kommunizieren die Testbibliotheken direkt mit dem System. Alternativ kann ein Testwerkzeug als Treiber verwendet werden.
  4. Das zu testende Objekt
    Auf der vierten Ebene wird das eigentliche Objekt getestet, aus dem am Ende Logs und Reports generiert werden, wobei die Reports in den Formaten HTML und XML erzeugt werden können.
Image
Architektur des Robot Framework
Bild: Die Architektur des Robot Framework [Quelle: Qytera]

4.3 Das Robot Framework: Installation und Inbetriebnahme

Um das Robot Framework nutzen zu können, muss Python auf dem System installiert sein (Download: https://www.python.org/downloads/).

Im nächsten Schritt wird das Robot Framework installiert. Dazu geben wir folgenden Befehl in die Konsole ein:

pip install robotframework

Nachdem die Installation abgeschlossen ist, können wir mit folgendem Befehl überprüfen, ob die Installation erfolgreich war:

robot --version

Hier sollte die Version angezeigt werden (z.B. “Robot Framework 7.1.1 (Python 3.13.0 on win32)”).

Eine weitere Voraussetzung für die Nutzung der Playwright-Bibliothek ist eine funktionierende Version von Node.js (Download: https://nodejs.org/en/download/). Sobald diese installiert ist, können Sie Robot und Playwright mit den folgenden Befehlen verheiraten:

pip install robotframework-browser
rfbrowser init # alternatively: python -m Browser.entry init

Für den nächsten Schritt ist es wichtig, Visual Studio Code installiert zu haben (Download: https://code.visualstudio.com/Download). In Visual Studio Code müssen wir dann zunächst nach der Erweiterung für Python suchen (Tipp: Strg + Shift + X bringt einen direkt zum Reiter mit allen verfügbaren Erweiterungen).

Image
Robot Framework Erweiterung für Python
Bild: Die Erweiterung für Python [Quelle: Qytera]

Außerdem müssen wir noch nach der Erweiterung für das Robot Framework suchen.

Image
RobotCode Erweiterung für das Robot Framework
Bild: Die RobotCode Erweiterung für das Robot Framework [Quelle: Qytera]

Danach kann dann auch endlich mit dem Programmieren losgelegt werden.

 

4.4 Ein erster Test mit dem Robot Framework

Um einen Vorgeschmack zu bekommen, ist unten ein einfacher Testfall aufgeführt, der auf die Playwright-Seite navigiert, auf einen Button klickt und dann auf einer anderen Seite nach einem Element sucht. Zu beachten ist, dass hier Schlüsselwörter aus der Playwright-Bibliothek verwendet werden:

Playwright Test 
    New Page            https://playwright.dev/ 
    Get Title           matches             Playwright 
    Get Attribute       "Get started"       href            ==      /docs/intro 
    Click               "Get started" 
    Get Url             matches             .*intro

Zeile 1: Der Name und Startpunkt des Testfalls.
Zeile 2: Verwendung des Schlüsselwortes “New Page“, um einen neuen Tab zu öffnen.
Zeile 3: Verwendung des Schlüsselwortes “Get Title“ und der nachfolgenden Methode “matches“, um nach dem Element mit Titel “Playwright“ zu suchen.
Zeile 4: Mit dem Schlüsselwort “Get Attribute“ wird nach dem Text “Get started“ gesucht, der im Element mit Attribut “href=/docs/intro” gefunden werden kann.

 

Image
href Attribut
Bild: href Attribut des Elements, in dem der Text "Get started" gefunden werden kann. [Quelle: Qytera]

Zeile 5: Verwendung des Schlüsselworts “Click“, um auf das Element mit Text “Get started“ zu klicken.
Zeile 6: Mit dem Schlüsselwort “Get Url“ und der anschließenden Methode “matches“ wird überprüft, dass die URL mit “intro” endet.

Schon an diesem kleinen Beispiel kann man sehen, dass die Skriptsprache des Robot Frameworks mit Playwright das Schreiben von automatisierten Testfällen auf einer benutzerfreundlichen Ebene ermöglicht. Für einen tieferen Einblick in die Welt der Keywords und Funktionen empfiehlt sich ein Blick in die Dokumentation der Playwright Keywords.

 

4.5 CI/CD

Wie bereits erwähnt, kann das Robot Framework in verschiedene CI/CD Pipelines integriert werden. Als Beispiel soll hier GitLab vorgestellt werden:

 

Image
Robot Framework CI/CD Pipeline
Bild: Ein durchgeführter Job von Testfällen in der Pipeline [Quelle: Qytera]

Im oberen Bild sehen wir den Job, der erfolgreich gelaufen ist, was an “Passed“ erkannt werden kann. Ansonsten würde bei einem Fehlschlag ein “Failed“ zu sehen sein. Zusätzlich erhalten wir die Information, wie lange die Pipeline gelaufen ist, vor wie vielen Tagen sie ausgelöst wurde, auf welchem Branch sie ausgeführt wurde und zu guter Letzt, wer sie ausgeführt hat. Ein Rerun der Pipeline sowie der Download von Artefakten ist ebenfalls möglich.

 

Image
Robot Framework Logs
Bild: Die Logs während des Durchlaufs [Quelle: Qytera]

Schaut man nun in den Job hinein, so findet man die einzelnen Testfälle mit der Angabe, ob sie den Testdurchlauf bestanden haben oder nicht. Ein integrierter HTML-Report gibt gleichzeitig einen visuellen Überblick über alle Testfälle: 

 

Image
Test Report des Robot Framework
Bild: Der integrierte Test Report vom Robot Framework [Quelle: Qytera]

GitLab und alle anderen gängigen CI/CD Umgebungen erlauben natürlich eine komplett individuelle Konfiguration der Jobs, die an den jeweiligen Projektkontext angepasst werden können. Dies erfordert jedoch ein höheres technisches Verständnis, insbesondere im Bereich DevOps.

 

4.6 Integration von Robot Framework mit Xray

Neben den einfachen HTML-Reports, die das Robot Framework erzeugt, ist es auch möglich, Testmanagement-Tools wie Xray einzubinden. Dazu muss ein Skript erstellt werden, das die Ergebnisse in die entsprechenden Tools lädt. Ob dieses Skript cURL verwendet oder ein Python-Skript ist, bleibt jedem selbst überlassen. Aufgrund der besseren Lesbarkeit wäre hier jedoch das Python-Skript zu empfehlen.

Bei der Erstellung des Skripts sind insbesondere folgende Punkte zu beachten, um eine reibungslose Kommunikation zu gewährleisten:

  • Bereitstellung der Xray-Authentifizierungsurl (im Beispiel für die Cloud-Instanz): https://xray.cloud.getxray.app/api/v2/authenticate
  • Bereitstellung der Xray URL zur eigenen Instanz und des zugehörigen Projektschlüssels (im Beispiel für die Cloud Instanz): https://xray.cloud.getxray.app/api/v2/import/execution/robot?projectKey=XYZ
  • Erstellen einer Funktion, die folgende Parameter entgegennimmt:
    • den Pfad zum XML Report vom Robot Framework
    • die Xray Client ID
    • das Xray Client Secret
  • Abschicken eines POST-Requests zur Generierung eines JWT-Tokens für die weitere Authentifizierung
  • Abschicken eines weiteren POST-Requests mit dem JWT-Token, wodurch der Report nach Xray hochgeladen wird

 

Im Code sieht das wie folgt aus:

# upload.py 

import requests 
import fire 
import os 

URL_XRAY_AUTHENTICATE = "https://xray.cloud.getxray.app/api/v2/authenticate" 
URL_XRAY_IMPORT_EXECUTION = "https://xray.cloud.getxray.app/api/v2/import/execution/robot?projectKey=XYZ" 

def upload_cloud(results_xml: str | os.PathLike[str], client_id: str, client_secret: str): 
    responseAuth = requests.post( 
        url=URL_XRAY_AUTHENTICATE, 
        json={ 
            "client_id": client_id, 
            "client_secret": client_secret 
        }, 
        headers={ 
            "accept": "application/json", 
            "content-type": "application/json" 
        } 
    ) 
    with open(results_xml, "rb") as payloadXray: 
        responseXray = requests.post( 
            url=URL_XRAY_IMPORT_EXECUTION, 
            data=payloadXray, 
            headers={ 
                "accept": "text/xml", 
                "content-type": "text/xml", 
                "authorization" : f"Bearer {responseAuth.json()}" 
            } 
        ) 
        print(responseXray.json()) 


if __name__ == "__main__": 
    fire.Fire({ 
        "upload-cloud": upload_cloud 
    })

Dieses Skript kann dann wie folgt ausgeführt werden:

python upload.py upload-cloud /path/to/output.xml <client-id> <client-secret>

Beim erfolgreichen Upload wird dann eine neue Test Execution in Xray generiert:

Image
Xray Report von Robot Framework Testfällen
Bild: Xray Report von Robot Framework Testfällen [Quelle: Qytera]

5. Fazit: Testautomatisierung mit dem Robot Framework

Wie wir im Blogbeitrag sehen konnten, bietet das Robot Framework einerseits eine einfache Möglichkeit, Testfälle auch für technisch weniger affine Personen zu schreiben. Gleichzeitig ermöglicht die Bibliothek von Playwright die Erstellung robuster und performanter Testfälle. Die folgenden Punkte heben hervor, warum Playwright ein so guter Co-Player des Robot Frameworks ist:

  • Prägnante Assertions
  • Präzise Kontrolle über Browser
  • Selektoren können verkettet werden
  • Gute Shadow-DOM-Unterstützung
  • Einfache Deskriptoren für mobile Geräte
  • Senden von HTTP-Anfragen

Wer also mit dem Robot Framework für die Zukunft gewappnet sein will, sollte sich unbedingt überlegen, die Playwright Library an Bord zu holen.

 

Veröffentlicht am 04.Dezember 2024

Aktualisiert am 11.Dezember 2024

Valerius Schmidt

Junior Testautomation Engineer, Test Analyst

Ursprünglich als Sprachwissenschaftler für die antike sowie mittel und neuzeitliche Welt, war ich während und nach meiner aufbauenden Ausbildung zum Fachinformatiker für Anwendungsentwicklung in diversen Projekten in den Unternehmen wie der Trout GmbH und der fino digital GmbH involviert. Themenschwerpunkte waren dort zum einen die Softwareentwicklung, die Datenqualität sowie das Testen von Software und der Automatisierung. Seit August 2023 bin ich als Junior Testautomation Engineer und Test Analyst bei der Qytera GmbH tätig, wo mein Fokus aktuell auf dem Testen mit dem Automatisierungswerkzeug Playwright liegt.

Finden Sie weitere interessante Artikel zum Thema: