Testautomatisierung: Selenium und Robot Framework – das perfekte Team

5. März 2015Julian Loschelders

Welche Vorteile bringt der gemeinsame Einsatz von Selenium und Robot Framework für die Testautomatisierung?

Diese Frage möchte ich beantworten, indem ich mich auf die folgenden wesentlichen Vorteile fokussiere:

  • Testfälle können in einer einfachen Syntax erstellt und besser verwaltet werden
  • Testberichte sind sehr hilfreich und unterstützen die Auswertung durch Filter- und Suchfunktionen
  • Neben dem Web-Frontend können weitere Komponenten, wie die Datenbank und API-Schnittstellen (SOAP, REST), getestet bzw. automatisiert werden

Um die Vorteile herauszustellen, beschreibe ich, wie Selenium IDE und Selenium Webdriver eingesetzt werden:

Die Selenium IDE ist ein Browser-Plugin für Firefox, das für den Einstieg in die GUI-Automatisierung sehr gut geeignet ist. Über eine Aufnahmefunktion können Aktionen des Anwenders aufgezeichnet und wieder abgespielt werden, so dass auch ein nicht technikaffiner Tester Fälle automatisieren kann. Fehlgeschlagene Schritte können schnell identifiziert werden, da der Bericht gut aufgearbeitet wird. Mit der wachsenden Anzahl an zu verwaltenden Fällen, kommt die Selenium IDE jedoch schnell an ihre Grenzen. Zwar können Testsuiten als eine Kette von mehreren Testfällen angelegt werden, die mangelnde Verwaltung kann aber nicht kompensiert werden. Um Testfälle mit unterschiedlichen Daten auszuführen, sind zusätzliche Plugins erforderlich. Außerdem ist der Umgang mit Steuerdaten (z.B. Testumgebung, angemeldeter Benutzer, etc.) für die Konfiguration der Testsuiten nicht intuitiv und nicht testfallübergreifend möglich.

Mittels des Selenium Webdriver können automatisierte Tests in verschiedenen Programmiersprachen (z.B. Java, Python, etc.) entwickelt werden. Testfälle können aber auch mithilfe der Selenium IDE aufgezeichnet, in die jeweilige Programmiersprache exportiert und dann beliebig angepasst werden. Ein weiterer Vorteil des Selenium Webdrivers ist der modulare Aufbau, der durch die Nutzung von Page Objects erreicht werden kann. Die Funktion einer Webseite (ein Page Object z.B. LoginPage) wird dabei unabhängig von den konkreten Testfällen automatisiert, so dass diese nur die automatisierten Funktionen der Webseite nutzen (z.B. LoginPage.Login (user, password)). So muss bei einer Änderung der Webseite nur das Page Object angepasst werden und die Testfälle bleiben stabil. Die Ergebnisse müssen über zusätzliche Frameworks aufbereitet werden (z.B. JUnit). Hier gibt es ein breites Spektrum von wenig informativen Meldungen (z.B. „OK“ oder „Fehler“) bis hin zu umfangreichen HTML-Reports inkl. Screenshots. Testfälle werden üblicherweise direkt in der Entwicklungsumgebung verwaltet, eine Einbindung in Testtools erfolgt selten. Werden die Testfälle mit Selenium Webdriver automatisiert, können Tester ohne Programmierkenntnisse nur eingeschränkt mitwirken. Hier gibt es die Möglichkeit Behavior Driven Development Frameworks1 (z.B. JBehave, Cucumber, etc.) einzusetzen, damit die zu testenden Szenarien in einer natürlichen Sprache beschrieben werden. Da für das Verständnis der Automatisierung aber weiterhin Programmierkenntnisse notwendig sind, ist ein sehr enger Dialog zwischen Entwicklern und Testern erforderlich.

Testfälle können in einer einfachen Syntax erstellt und besser verwaltet werden

Das Robot Framework ist in Python implementiert, kann aber ohne Kenntnisse dieser Programmiersprache genutzt werden. Außerdem verwendet es eine eigene, an die natürliche Sprache angelehnte Syntax aus Schlüsselwörtern (Keywords), die ohne Programmierkenntnisse leicht zu verstehen und anzuwenden ist. Es können auch eigene Schlüsselwörter (Keywords) bzw. ganze Sätze definiert werden, um Testfälle in natürlicher Sprache zu beschreiben und automatisiert auszuführen. Das Robot Framework unterstützt auch die sogenannte Gherkin Syntax, die von Behavior Driven Development Frameworks verwendet wird. Hier ein kleines dokumentiertes Beispiel für den Test eines Logins mithilfe der Selenium Library2:

Die Testfälle vom Robot Framework können in verschiedenen Formaten gespeichert werden. Testfälle in einfachen Textdateien zu speichern, hat mehrere Vorteile:

  • Die Fälle können mit einem beliebigen Editor erstellt bzw. betrachtet werden.
  • Sie lassen sich gut in einem Source Repository (z.B. GIT, Subversion) verwalten.
  • Sie können durch die textuelle Beschreibung auch in beliebige Tools für die Testfallverwaltung integriert werden.

Für die Erstellung gibt es auch unterstützende Plugins für Entwicklungsumgebungen wie z.B. IntelliJ und Eclipse und eine eigenständige Umgebung namens RIDE. Aber auch die Verwaltung ohne zusätzliche Tools ist meiner Ansicht nach sehr einfach, da die Dateien einfach in Verzeichnissen abgelegt werden können. Darüber hinaus können einzelne Testfälle markiert und anhand dieser Markierung (Tag) ausgeführt werden.

Testdaten können auf verschiedene Arten eingebunden werden. So können beispielsweise Variablen definiert werden, um alle Arten von Steuerdaten (z.B. Testumgebung, angemeldeter Benutzer, etc.) modular abzubilden. Für Testfälle mit unterschiedlichen Daten gibt es mehrere Varianten. Die Testdaten können, wie im folgenden Beispiel, mit dem besonderen Schlüsselwort Template eingebunden werden:

Die zweite Variante ist, dass die eigenen Schlüsselwörter so definiert sind, dass sie direkt in die Testfälle geschrieben werden. Gibt es sehr viele gleichartige Fälle mit unterschiedlichen Testdaten ist dieser manuelle Aufwand sehr hoch. Aufgrund des einfachen Formats, können zusätzliche Skripte erstellt werden (z.B. Python, VBA in Excel), welche die Daten aus einer Datei auslesen (z.B. CSV, Excel). Die dritte Variante erfordert zusätzliche Bibliotheken. Es gibt bereits eine XML-Bibliothek und eine für den Zugriff auf Datenbanken, die es ermöglichen, die Testdaten aus diesen Quellen einzubinden.

Testberichte sind sehr hilfreich und unterstützen die Auswertung durch Filter- und Suchfunktionen

Das Robot Framework erzeugt bei der Testdurchführung einen interaktiven Bericht im HTML-Format. Er ist sehr hilfreich, weil er durch die einfache Syntax besonders lesefreundlich ist und durch die interaktiven Such- und Filterfunktionen sehr gut bei der Auswertung unterstützt. Der HTML-Bericht besteht aus zwei Dateien, die standardmäßig report.html und log.html heißen.

Die Datei report.html bietet eine Übersicht aller ausgeführten Testsuiten sowie Fälle und bietet darüber hinaus verschiedene Filter und Suchfunktionen an. Für jeden Testfall werden neben dem Namen und Ausführungsstatus noch weitere Daten angezeigt (z.B. Beschreibung, Tags, Fehlermeldung, Dauer der Ausführung). Zusätzlich werden aggregierte Ergebnisse zu den Testfällen berechnet.

Für die detaillierte Analyse wird das Log (log.html) verwendet, das alle durchgeführten Schritte eines jeden Testfalls entsprechend seiner Hierarchie enthält. In einem Schritt wird genau ein Schlüsselwort ausgeführt. Dabei kann eine Testsuite beliebig viele weitere Suiten beinhalten und wird konkret als Verzeichnis oder Datei abgebildet. Ein Testfall ist mindestens einer Testsuite zugeordnet sowie atomar und kann keine weiteren Testfälle beinhalten. Jeder dieser Fälle kann beliebig viele Schlüsselwörter beinhalten. Eigene Schlüsselwörter können viele weitere enthalten. Jedes Schlüsselwort einer Bibliothek (Library) ist atomar. In Abbildung 1 ist dieser Sachverhalt als UML-Klassendiagramm dargestellt.

blog5.3

Abbildung 1: UML-Klassendiagramm – Zusammenhang Testsuite, Testfall und Schlüsselwort

Zusätzlich zu den zwei HTML-Dateien wird eine XML-Datei erzeugt, die die Basis für beide Dateien darstellt. Aus dieser können die HTML-Dateien wieder erzeugt und weitere nützliche Funktionen ausgeführt werden. Beispielsweise können alle fehlerhaften Testfälle erneut ausgeführt werden. Sehr hilfreich ist auch die Möglichkeit, dass separat durchgeführte Testläufe verschiedener Stufen in einem Report kombiniert werden. Diese Output-Datei kann für die Integration in andere Reporting-Tools genutzt werden. So wurde sie z.B. für ein Jenkins Plugin genutzt, um die Ergebnisse eines Testlaufs direkt in einem Jenkins Job anzuzeigen.

Der Testfokus kann auf weitere Komponenten erweitert werden

Ein weiterer großer Vorteil der Kombination aus Selenium und Robot Framework ist, dass durch das Robot Framework das Anwendungsgebiet nicht auf die reine Web-GUI-Automatisierung beschränkt ist. Durch die Anwendung weiterer Bibliotheken kann das Einsatzgebiet der Automatisierung beispielsweise auf die Datenbank oder API-Schnittstellen (SOAP, REST) erweitert werden. So kann das Robot Framework nach dem Bausteinprinzip erweitert werden. In der Abbildung 2 ist dieser Zusammenhang nochmal schematisch dargestellt. Um weitere Bibliotheken einzusetzen, müssen lediglich ein paar neue Schlüsselwörter genutzt werden. Die Testfallverwaltung, der Testbericht und auch die Einbindung in die Entwicklungs- und Testumgebungen werden dabei nicht beeinträchtigt.

Blogeintrag-5.3

Abbildung 2: Modularer Aufbau von Robot-Framework

Wenn die existierenden Bibliotheken nicht ausreichen, besteht die Möglichkeit, eigene zu entwickeln. Das ist nicht kompliziert, setzt aber Programmierkenntnisse voraus. Die selbstentwickelten Bibliotheken können in Python oder Java implementiert werden. Über diesen Weg ist es auch möglich, weitere Automatisierungstools wie z.B. Sikuli3 einzubinden.

Fazit

Mit Selenium können Web-Anwendungen sehr gut automatisiert werden. Im Zusammenspiel mit dem Robot Framework kann die Automatisierung zu einer vollständigen integrierten Lösung ausgebaut werden. Anwender mit geringen technischen Kenntnissen können Testfälle erstellen und verwalten. Das Robot Framework stellt einen hilfreichen Testdurchführungsbericht bereit und ermöglicht die Automatisierung weiterer Softwarekomponenten, wie Datenbank und weitere Schnittstellen (SOAP, REST).

Die Kombination dieser beiden Tools ist sehr hilfreich, kann aber mit der Funktionalität und dem Komfort kommerzieller Programme nicht verglichen werden. Dafür ist der Einsatz vom Robot Framework kostenlos und bietet durch die freie Auswahl an Entwicklungswerkzeugen, der toolunabhängigen Verwaltung von Testfällen und der eigenen Entwicklung von Automatisierungsbibliotheken ggf. mehr Flexibilität.

Benutzen Sie Selenium, Robot-Framework oder bereits beide in Kombination? Denken Sie auch, dass die gemeinsame Nutzung der beiden Tools Vorteile bringt? Ich freue mich über Ihre Kommentare.

Julian Loschelders Julian Loschelders ist als Consultant im Bereich Test- und Qualitätsmanagement bei adesso tätig. Er unterstützt Projekte als Testmanager und technischer Testspezialist.
Artikel bewerten:
1 Star2 Stars3 Stars4 Stars5 Stars
Loading...

Kommentare

MP 5. März 2015

Sehr geehrter Herr Loschelders,

Mich interessiert die Thematik sehr, allerdings erschließt sich mir nicht, welche vorteile das Robot Framework nun beispielsweise gegenüber JBehave haben soll.

Wie realistisch ist es, das ein Kunde ohne Programmierkentnisse ein paar Zeilen Python schreibt und dort sogar noch Variablen mit „$“ Notation einfügt?
Mir erscheint dies auch nicht realistischer als das er ein paar Userstories in ein Textdokument schreibt.

Wenn ich als Entwickler bereits vorgebe welche Schritte ausführbar sind und der Kunde daraus Szenarien entwickeln kann, erscheint mir das jedenfalls greifbarer??

Oder habe ich einfach etwas überlesen?

Julian Loschelders 6. März 2015

Sehr geehrter MP,

das besondere an Robot-Framework ist, dass ich auch Kunden ohne besondere Programmierkenntnisse an die Automatisierung schrittweise heranführen kann.

Zuerst werden die Kunden nur die Testfälle erstellen / bearbeiten. Das ist alles, was in dem Bereich unterhalb „*** Test Cases ***“ liegt. Hierfür sind gar keine besonderen Kenntnisse erforderlich, weil hier in der Regel nur die selbst erstellten Schlüsselwörter verwendet werden. So wie ich es in dem Beispiel gemacht habe („Login Benutzer Julian mit Passwort secret“). Die Ausprägungen der Variablen werden einfach „in-place“ in den Text geschrieben (im Beispiel wird die Variable ${user} mit „Julian“ und ${password} mit „secret“ belegt). Analog der User Stories bei JBehave.

Bei Robot-Framwork entfällt im Gegensatz zu JBehave die Implementierung der Schritte in Java, da diese auch in der Robot-Framework Notation mit Schlüsselwörtern durchgeführt wird. Diese Notation ist übrigens kein Python, sondern hängt von der verwendeten Bibliothek ab. Die Definition von eigenen Schlüsselwörtern erfolgt im Bereich „*** Keywords ***“. Im Beispiel habe ich das Schlüsselwort „Login Benutzer ${user} mit Passwort ${password}“ mit speziellen Schlüsselwörtern aus der Bibliothek SeleniumLibrary definiert (z.B. „Go To“, „Click Button“). Auch die Schlüsselwörter von bestehenden Bibliotheken sind meiner Meinung nach sehr leicht zu verstehen – auch von Anwendern ohne Programmierkenntnisse.

Ob die Kunden tatsächlich in die Automatisierung der einzelnen Schlüsselwörter eingebunden werden oder nicht, hängt natürlich von der Projektsituation ab. Ich habe die Erfahrung gemacht, dass die Akzeptanz für die Automatisierung höher ist, wenn auch die Implementierung der Schlüsselwörter durch die Kunden nachvollzogen werden kann. Das wird durch die Schlüsselwort-Syntax von Robot-Framework erleichtert.

Viele Grüße Julian Loschelders

Matthias Bode 10. März 2015

Sehr geehrter Herr Loschelders,
Vielen Dank für die gute Darstellung der Möglichkeiten, automatisierte Testfälle für Webanwendungen durch Personen ohne Programmierkenntnisse erstellen zu lassen. Jedoch lässt der Artikel zwei essentielle Punkte in der Testautomatisierung von Webanwendungen aus, die zumindest mir zusehends Kopfzerbrechen bereiten. Zum ersten die Erstellung von Vorbedingungen für das automatisierte Testen von Webanwendungen. Das Erstellen von in der Anwendung vorhandener und für den Test notwendiger Daten stellt zumeist die komplexeste Hürde für die Einführung von automatisierten Tests dar. Gibt es aus ihrer Sicht sinnvolle standardisierte Möglichkeiten, die Erzeugung von Vorbedingungen zusätzlich in den Rahmen der Testspezifikation zu integrieren?
Zum zweiten die Integration der Testauswertung in Testverwaltungstools(Testlink, Polarion, etc.). Ab einer gewissen Komplexität des Testprozesses (>1000 automatisierte zum Teil recht komplexe Tests mit mehr als 20 Steps) scheint es mir unerlässlich eine Verknüpfung der Testspezifikation zum Testdurchlauf herzustellen. Dies ist unbedingt notwendig, um die auftretenden Fehler klar zu identifizieren und nachzustellen. Gibt es aus ihrer Sicht sinnvolle Vorgehensmodelle dies durch geeignete Tools sicherzustellen. Die Auswertung in CI Automaten lässt zumeist nur die Auswertung Testfall geht oder eben nicht zu.

Julian Loschelders 10. März 2015

Sehr geehrter Herr Bode,

die Voraussetzungen für die Automatisierung zu schaffen, stellt auch meiner Meinung nach eine große Herausforderung dar. Ich kenne hier keine „Standardverfahren“, sondern eine Lösung ist immer abhängig von der konkreten Projektsituation. Grundsätzlich versuche ich in der Automatisierung immer möglichst unabhängig von den anderen Testaktivitäten zu sein (d.h. eigene Testumgebung oder exklusive Nutzung, eigene Daten). Teilweise können die benötigten Testdaten durch andere Testfälle generiert werden (z.B. wird zuerst ein Benutzer angelegt und im zweiten Testfall für den Login genutzt). In der Regel ist es aber erforderlich die Daten in der Testumgebung in einen Initialzustand für den Start der Automatisierung „zurückzusetzen“ – das kann problematisch sein, wenn die Umgebung nicht exklusiv für die Automatisierung bereitsteht. Idealerweise kann z.B. mit Vagrant die komplette Umgebung inkl. der Konfiguration für jeden Testlauf neu aufgebaut werden. Die Dokumentation dieser Vorbedingungen erfolgt nach meiner Ansicht entweder direkt im Testfall als Vorbedingungen (z.B. ein vorhergehender Testfall) oder für die Testumgebung (Konfiguration der Umgebung, Wiederaufbau, Datenbestand, …) im Testkonzept.

Für die Testauswertung liefert Robot-Framework für jeden Testdurchlauf bereits einen sehr umfangreichen Ausführungsbericht (log.html). In diesem Log sind alle (!) durchgeführten Schlüsselwörter (Steps) aufgezeichnet. Selbst wenn diese Schlüsselwörter wieder aus eigenen Schlüsselwörtern bestehen. Es ist direkt im Log erkennbar, welches Schlüsselwort in einem Testfall fehlgeschlagen ist. Insofern bietet Robot-Framework bereits die Verknüpfung zwischen Testfall und Testdurchlauf. Für die Integration in Jenkins gibt es ein Plugin, das für jeden durchgeführten Build Informationen über den Robot-Framework Testdurchlauf bereitstellt.

Viele Grüße Julian Loschelders

Kommentar hinzufügen:

Ihr Kommentar: