Robot Framework

Testautomatisierung mit Robot Framework

In Zeiten in denen Softwaresysteme immer komplexer werden, rückt auch das Thema Qualitätssicherung immer mehr in den Fokus unserer Projekte. Hierbei spielt vor allem Testautomatisierung eine entscheidende Rolle, denn nur so lassen sich die vielen unterschiedlichen Testfälle wirklich effizient ausführen und wiederholen. Bei vielen unserer Kunden ist das automatisierte Testen fester Bestandteil der CI/CD Prozesse und trägt entscheidend zu verlässlichen Releases bei. Seit mehreren Jahren setzt Quanto Solutions hauptsächlich auf Robot Framework als Tool für automatisierte Tests und das über verschiedene Ebenen der Testpyramide hinweg. Robot Framework kann als generisches Test-Framework angesehen werden und steht als Open-Source-Projekt unter der Apache 2.0 Lizenz auf GitHub frei zur Verfügung.

Robot Framework Testpyramide
Testpyramide

Merkmale von Robot Framework

Es sprechen viele Gründe für den Einsatz von Robot Framework für die Testautomatisierung:

  1. Guter Support
    Robot Framework ist Open-Source und erfreut sich einer großen Community an Entwicklern aus unterschiedlichen Branchen, die ständig an der Weiterentwicklung mitwirken. Der Quellcode steht auf GitHub zur Verfügung. Derzeit arbeiten an der Kernkomponente ca. 110 Entwickler. Daneben existieren 40 zugehörige Projekte für bestimmte Anwendungsfälle. Auf Stack Overflow gibt es mehr als 11.000 Threads zu diesem Thema.
  2. Viele Integrationen und Erweiterungen
    Dank der großen Community existieren bereits sehr viele Erweiterungen und Integrationen zu diversen Systemen, welche als Plugins verwendet werden können. Hierzu zählen beispielsweise der Zugriff auf Datenbanken, die Kommunikation per REST oder SOAP für beispielsweise SAP Web Services sowie das Testen des Verhaltens von Web-Frontends, APIs oder mobiler Endgeräte.
  3. Dokumentation
    Alle Features und Funktionen sind gut und verständlich dokumentiert. Auf der Website des Frameworks wird der Einstieg in das automatisierte Testen mit Robot Framework durch entsprechende Tutorials gut beschrieben.
  4. Erweiterbarkeit
    Robot Framework selbst ist in der Programmiersprache Python geschrieben und es besteht die Möglichkeit eigene Erweiterungen und Integrationen für spezielle Anforderungen zu entwickeln. Somit ist die Einsetzbarkeit von Robot Framework nahezu grenzenlos.
  5. Reporting
    Das Framework generiert nach jeder Ausführung automatisch einen Report über die Testergebnisse und ermöglicht im Falle eines Fehlers die schnelle Analyse und Behebung. Der Report wird als HTML ausgegeben und stellt sich in unterschiedlichen Abstraktionsebenen dar. So kann über eine Art Drill-Down von der Gesamtübersicht bis hin zu den einzelnen Ausführungsschritten eines Tests navigiert werden, um die genaue technische Ausführung und deren Parameter zu sehen.
  6. DevOps und CI/CD
    Robot Framework lässt sich ohne Probleme innerhalb von CI/CD-Umgebungen wie z. B. Azure DevOps, Jenkins, GitLab, Concourse CI oder Team City integrieren. Somit kann es sehr gut als Quality Gate in automatischen Deployment Prozessen eingesetzt werden. Auch für die Verwendung innerhalb von Container-Umgebungen (z. B. Docker) ist es einsetzbar. Viele CI/CD-Umgebungen verwenden bereits Container zum Ausführen der Pipelines, daher ist dies ein wichtiger Aspekt. Zudem verfügt das Framework über die Möglichkeit, den Report im xUnit-Format auszugeben, welches von vielen CI/CD-Umgebungen interpretiert werden kann. Somit stehen die Ergebnisse der automatischen Tests als zusätzliche Informationen der ausgeführten Test-Pipeline zur Verfügung.

Testfallbeschreibung in Robot Framework

Gemäß dem DRY-Prinzip werden in Robot Framework für die Testfälle sogenannte Keywords erstellt. Diese Keywords abstrahieren die Logik, um mit dem Zielsystem zu kommunizieren und können in unterschiedlichen Einzeltestfällen wiederverwendet werden.

Beispiel:

Login Page Should Be Open
    Title Should Be    Login Page

Zum Beschreiben der Testfälle gibt es die Möglichkeit Keywords einfach sequenziell aufzurufen, oder sich mit Hilfe der Gherkin-Syntax eine Art ausführbare Dokumentation in englischer Sprache zu erstellen. Das ermöglicht es vor allem Testern ohne Entwicklungshintergrund Testfälle zu implementieren und zu verstehen.

Beispiel:

Given calculator has been cleared
When user types "1 + 1"
And user pushes equals
Then result is "2"

Erweiterung von Robot Framework Teil 1: Einfaches Beispiel

Wie eingangs bereits angedeutet, lässt sich Robot Framework sehr gut mit Hilfe der Programmiersprache Python erweitern. Zu diesem Zweck stellt Robot Framework bereits entsprechende Python Module zur Verfügung und ermöglicht so, die einfache Implementierung von neuen Keywords mit nahezu unbegrenzten Möglichkeiten. Im folgenden Beispiel wird gezeigt, wie eine einfache Keyword Library implementiert werden kann.

from robot.api.deco import keyword
from robot.libraries.BuiltIn import BuiltIn
from robot.api import logger
import random

class MyRobotLibrary(object):

    @keyword(name='select random fruit', tags=('custom',))
    def select_random_fruit(self, ):
        fruits = ["apple", "banana", "cherry"]

        try:
            fruit = random.sample(fruits, k=1)[0]
            BuiltIn.set_test_variable('${myFruit}', fruit)
        except as e:
            logger.error(e)

Soll die Library nun in einem Robot Framework Test verwendet werden, kann diese einfach mit dem Befehl

Library MyRobotLibrary.py

in die Testsuit importiert und verwendet werden.

Erweiterung von Robot Framework Teil 2: Darf es noch etwas mehr sein?

Nun wurde im vorangegangenen Beispiel kurz gezeigt, wie in Python eine eigene Library für Robot Framework implementiert werden kann. Wollte man nun eine 3rd Party Library nutzen oder auf externe Ressourcen wie Datenbank oder Webservices zugreifen, kann das auf diese Weise entsprechend implementieren. Was aber, wenn die 3rd Party Library die genutzt werden soll, nicht für Python zur Verfügung steht? Was ist, wenn diese in Java oder .net geschrieben ist und nur für diese Plattform zur Verfügeng steht?

Nutzung von Java Libraries mittels jython

„Jython (früher JPython) ist eine reine Java-Implementierung der Programmiersprache Python und ermöglicht somit die Ausführung von Python-Programmen auf jeder Java-Plattform. Damit geht einher, dass sämtliche Java-Bibliotheken in Python-Programmen importiert und dynamisch genutzt werden können.“ (Zitat Wikipedia https://de.wikipedia.org/wiki/Jython)

Um Jython für die Implementierung von Test-Libraries nutzen zu können, muss auf dem Zielsystem Java (min. Java 8) installiert sein. Jython selbst kann unter https://www.jython.org/download heruntergeladen werden.

Installation

Nachdem jython heruntergeladen wurde, kann der Installer ausgeführt werden.

$ java -jar jython-installer.jar -s -d ~/jython -t standard -e demo doc src

Dieser Befehl besagt, das jython in das Verzeichnis ~/jython in der Standardkonfiguration ohne Demos, Dokumentation und Quellcode installiert werden soll.

Um Robot Framework nutzen zu können, muss es innerhalb von jython installiert werden. Eine bereits vorhandene Installation unter Standard-Python reicht nicht aus.

$ ~/jython/bin/jython -m pip install robotframework

Einbindung von Java Frameworks

Um das gewünschte Java Framework nun in einer Testlibrary nutzbar zu machen, müssen die .jar files des Frameworks zum Pfad von jython hinzugefügt werden.

import sys, os
dir_path = os.path.dirname(os.path.realpath(__file__))
lib_home = os.path.join(dir_path, 'path/to/framework')
for file in os.listdir(lib_home):
    if file.endswith('.jar'):
        sys.path.append(os.path.join(lib_home, file))

Nun kann auf das Entsprechende Framework einfach zugegriffen werden, in dem mittels from…import… die gewünschte Klasse importiert wird. Hier zu sehen am Beispiel von Chemistry. (https://chemistry.apache.org/)

from org.apache.chemistry.opencmis.client.runtime import SessionFactoryImpl as SessionFactory

Bei der Implementierung der Testlibrary ist darauf zu achten, dass der Python 2 Syntax verwendet wird, das jython zurzeit noch auf diesem aufbaut.

Ausführung von Robot Framework Test über Python

In dem entsprechenden Test kann die Testlibrary genau wie im einfachen Beispiel mit Lib verfügbar gemacht werden. Beim Ausführen der Tests muss allerdings jython als Runtime für Robot Framework verwendet werden.

$ ~/jython/bin/jython -m robot.run path/to/testfile

In dieser kurzen Beschreibung wurde die Nutzung von Java Libraries in Robot Framework mit Hilfe jython erklärt. Es wird aber drauf hingewiesen, dass eine ähnliche Nutzung von .net Libraries mit IronPython (https://ironpython.net/) möglich ist.

Zusammenfassung

Automatisiertes Testen ist ein starker Erfolgsfaktor für Softwaresysteme. Ein Framework wie Robot Framework kann dabei unterstützen, unterschiedliche Komponenten eines Softwaresystems wiederholbar und transparent zu testen. Viele Erweiterungen und eine aktive Community garantieren die Einsetzbarkeit für nahezu jeden Anwendungsfall. Die einfache Implementierung von Testfällen ermöglicht es auch Mitarbeitern aus den Fachbereichen unserer Kunden, Testfälle für ihre Systeme zu erstellen.

Autor: Kristopher Messerig

Quellen:
https://robotframework.org
https://github.com
https://stackoverflow.com
https://en.wikipedia.org
https://cucumber.io

Tags