robot-frame-blog

Automation mit dem Robot Framework

Ein Fachbeitrag von Dennis Teering und Nils Bergmann aus dem Segment Finance & Public

Die Software-Entwicklung ist seither bestrebt, durch die Schaffung von Automationen den Umfang von menschlicher Unterstützung bei der Entwicklung und Qualitätssicherung zu reduzieren. Aber wie kann eine Automation in der Software-Entwicklung unterstützen? Neben Low-Code und KI befassen sich bereits seit Jahren die Robotic Process Automation (RPA) und die UI-Automation mit diesem Thema.

Keyword-Driven Testing und Robotic Process Automation mit Robot

Automationen zur Qualitätssicherung sind inzwischen ein fester Bestandteil bei der Durchführung von Softwareprojekten. In diesem Bereich ist das Robot Framework ein interessantes Open Source-Werkzeug. Aber auch werkzeugunabhängig gilt: Nur Automationen sorgen für eine beständige Qualität und Stabilität und tragen zum langfristigen Erfolg der Software-Entwicklung bei. Sie reduzieren den notwendigen Umfang von manueller Qualitätssicherung, ohne dass das Qualitätsniveau der Software sinkt.

In Zeiten von agiler Software-Entwicklung samt Continuous Developments ermöglichen Automationen das Veröffentlichen von Softwareständen in kürzeren zeitlichen Abständen, um beispielsweise Releases mit einzelnen Funktionen iterativ bereitzustellen. Durch den Einsatz von Automationen können entstehende Wartungsaufwände reduziert werden. Das vorhandene Budget lässt sich somit verstärkt für die Weiterentwicklung anstelle von Wartung einsetzen.

Ein wichtiges Instrument bei der UI-Automation sind die UI-Integrationstests, welche das funktionale Zusammenwirken einzelner UI-Komponenten und Schnittstellen testen und das zuvor definierte Verhalten absichern. Das Ziel solcher UI-Integrationstests ist es, dass durchgeführte Anpassungen im Laufe des Softwareprojektes nicht zu ungewollten Auswirkungen auf bestehende UI-Komponenten, Schnittstellen und Funktionalitäten führen.

Neben der UI-Automation reiht sich in diesem Kontext auch die Robotic Process Automation ein. Bei dieser werden manuelle Aufgaben und Prozesse automatisiert, um so die notwendigen menschlichen Interaktionen zu reduzieren. Die Automation geschieht hier durch „Bots“, welche Bedienung von Benutzerschnittstellen imitieren. Beide Automationen unterscheiden sich in ihrem jeweiligen Anwendungsgebiet und den damit verbundenen Zielen, haben allerdings Überschneidungen in der Methodik, mit welcher die Automationen umgesetzt werden.

Beide Automationen können mittels des Robot Frameworks realisiert werden.

Testautomationen mit dem Robot Framework

Das Robot Framework ist ein Open-Source Framework zur Testautomatisierung sowie zur Robotic Process Automation. Es ist in Python implementiert und wurde initial im Jahr 2008 durch Nokia veröffentlicht. Robot Framework verwendet Keyword-Driven Testing, um eine einfache Definition von Testszenarien zu ermöglichen. Es bietet eine Vielzahl an Integrationen, die es ermöglichen, unkompliziert verschiedene Systeme zu testen. Im Folgenden stellen wir drei übliche Techniken zur Testautomation vor:

Keyword-Driven Testing (KDT): Die im zu testenden System durchführbaren Aktionen werden durch Keywords repräsentiert. Diese Keywords werden dann implementiert und zur Definition der Testfälle verwendet.
Die Implementierung der Keywords kann also separat von der Definition der Testfälle durchgeführt werden. Diese Trennung ermöglicht es auch Personen ohne Programmierkenntnissen, Tests zu definieren.

Ein typischer Test könnte wie folgt definiert werden:
1) Öffne die Homepage.
2) Gib „XYZ“ in der Suche ein.
3) Überprüfe, ob mindestens ein Ergebnis vorhanden ist.

Der Testautor bewegt sich hier auf einer rein fachlichen Ebene und muss weder eine Programmiersprache lernen noch wissen, wie die einzelnen Schritte implementiert werden würden. Die tatsächliche Implementierung findet bei der Definition der Keywords statt, hinter „Öffne die Homepage“ stünde demnach das Starten eines Browsers mit einer sinnvollen Konfiguration und die Navigation zur Adresse. Durch diese Trennung kann der Design-Prozess der Tests unabhängig von der tatsächlichen Implementierung durchgeführt werden.

Data-Driven Testing (DDT): Beim Data-Driven Testing werden Testfälle anhand von Daten entworfen. Anstatt die Testdaten fest zu definieren, werden Datensätze verwendet. Ein klassischer Fall wäre ein Test, in dem die Ausgaben einer Funktion getestet werden. Eingabeparameter und das erwartete Ergebnis werden dabei mit dem tatsächlichen Ergebnis verglichen. Der Vorteil ist eine Trennung der Testlogik und Testdaten, was die Wartbarkeit und Wiederverwendbarkeit verbessert.

Robot Framework unterstützt das Laden von Testdaten aus verschiedenen Quellen, wodurch unkompliziert eine breite Testabdeckung erreicht und flexibel neue Testfälle ergänzt werden können − ohne die Testdefinition zu ändern.

Behaviour-Driven Testing (BDT) : Behaviour-Driven Testing ist eine Technik, bei welcher versucht wird die Zusammenarbeit zwischen Testern und Entwicklern zu verbessern. Hierfür werden die Anforderungen während der Spezifikationsphase in einer Art definiert, die später leicht automatisiert werden kann. Hierfür wird typischerweise eine natürlichsprachliche Syntax verwendet. Solch eine beliebte Sprache ist Gherkin, bei welcher Testszenarien nach dem Muster „Gegeben-Wenn-Dann“ definiert werden. Die Szenarien werden als Teil der Spezifikation aus Sicht eines Nutzers formuliert und dann später implementiert.

Robot Framework unterstützt die in der Gherkin-Syntax üblichen Begriffe, wodurch natürlichsprachliche Testdefinitionen erstellt werden können. Die einzelnen Schritte lassen sich dann als Keywords implementieren.

Die Vorteile von Robot Framework

Robot Framework bietet im Vergleich zu einer klassischen Programmiersprache verschiedene Vorteile:

Einfache Definition von Testfällen: Testszenarien können einfach und ohne Programmierkenntnisse definiert werden. Dadurch können Domänenexperten die Szenarien definieren, während Entwickler sich auf die Implementierung fokussieren.

Einfache Integrationen: Robot Framework funktioniert als eine einheitliche Schnittstelle für verschiedene Systeme, die getestet werden sollen. Es gibt Integrationen für verschiedene UI-Frameworks, Browser und vieles mehr.

Wiederverwendbarkeit: Keywords können importiert und extern definiert werden. Diese Keywords können dann in anderen Testszenarien wiederverwendet werden.

Erweiterbarkeit: Robot Framework ist in Python implementiert und ermöglicht, Python-Code als Library zu laden. So lassen sich komplexere Implementierungen in Python durchführen und einfach als Keyword importieren und verwenden.

Parallelisierung: Robot Framework unterstützt mit Pabot eine parallele Ausführung der Tests, womit die verfügbaren Ressourcen optimal genutzt werden können. So lassen sich bei einer Integration in CI/CD-Prozesse möglichst schnell Testergebnisse erhalten. Kombiniert mit der Fähigkeit, Browser auch „headless“ zu bedienen, erhält man so eine gute Performance auch bei einer großen Menge von Tests.

Anbindung in bestehende Prozesse: Da Robot Framework in Python implementiert ist, kann es auf allen gängigen Betriebssystemen ausgeführt und einfach in bestehende Prozesse integriert werden.

Nach der Installation lässt sich das Robot Framework mit dem Befehl robot ausführen. Mit Kommandozeilen-Argumenten können zum Beispiel zu erzeugende Logs und Reports konfiguriert sowie Variablen überschrieben werden. Auf diese Weise ist eine unkomplizierte Integration von Robot Framework in gängige CI/CD-Lösungen möglich ist.

Ein Testfall mit dem Robot Framework

In diesem Beispiel sieht man einen typischen Test, bei welchem die BrowserLibrary verwendet wird, um einen Browser zu automatisieren. In diesem Test wird die Suchfunktion unserer Webseite genutzt, um diesen Artikel zu finden. Der Test ist zunächst in der natürlichsprachlichen Behavior Driven Development-Syntax formuliert worden, im Anschluss wurden die Keywords implementiert.

Settings: In diesem Abschnitt werden Metadaten definiert, andere Dateien importiert oder Methoden festgelegt, die beim Start/Ende von Tests ausgeführt werden. Wir verwenden hier die BrowserLibrary, die einen Browser bedienen kann.

Variables: In diesem Abschnitt werden Variablen definiert, die später wiederverwendet werden können. Diese Variablen können zusätzlich bei der Ausführung überschrieben werden, um so Tests konfigurierbar zu machen. Würde man diesen Test zum Beispiel mit Firefox ausführen wollen, würde man „–variable browser:firefox“ als Argument übergeben.

Test Cases: Dieser Abschnitt enthält die Testfälle. Mit Hilfe der Keywords, die entweder aus einer der importierten Dateien oder aus dem Keyword-Abschnitt stammen, werden die Testszenarien definiert.

Keywords: Dieser Abschnitt enthält die Keywords, welche bei der Formulierung von Testfällen zur Verfügung stehen. In diesem Beispiel haben wir Keywords erstellt, welche die Argumente in den Bezeichnungen eingebettet haben, um eine möglichst natürlichsprachliche Testdefinition zu ermöglichen. Die Keywords implementieren die eigentliche Logik des Tests, wir verwenden verschiedene Keywords der BrowserLibrary, um Elemente auf der Webseite zu identifizieren und den Browser zu bedienen.

Anbindungen/Libraries

Robot Framework ist ein Open¬-Source-Projekt mit einer großen Community an Nutzern und Entwicklern. Dementsprechend groß ist auch die Anzahl der verfügbaren Libraries zur Automatisierung verschiedenster Prozesse und Systeme. Diese Libraries können unkompliziert importiert werden und stellen Keywords bereit, die in den Tests verwendet werden können.

Selbstverständlich lassen sich verschiedene Libraries kombinieren, um auf einfache Weise komplexe Integrationstests zu erstellen. Ein denkbarer Test wäre zum Beispiel die Durchführung eines Einkaufsvorgangs mit einem Browser, mit dem man die generierten Rechnungsdokumente auf Korrektheit überprüft und kontrolliert, ob ein entsprechender Datenbankeintrag erstellt wurde.

Hier eine beispielhafte Übersicht der verfügbaren Integrationen:

Webseiten: Mit Selenium oder Playwright können Browser automatisiert werden. Dadurch werden Nutzerinteraktionen mit einer Webseite in verschiedenen Browsern simuliert und reproduziert.

Schnittstellen und Protokolle: Es gibt Libraries für gängige Protokolle wie REST, HTTP, MQTT, FTP oder SSH. Dadurch lassen sich auch klassische Schnittstellen im Rahmen eines Tests verwenden.

Datenbanken: Die gängigen Datenbanksysteme (Oracle, MySQL, PostgreSQL, MS SQL, SQLite …) können angesprochen und die Ergebnisse von Anfragen ausgewertet werden.

Desktop-Anwendungen: Auch Desktop-Anwendungen lassen sich automatisieren. Für die verschiedenen Frameworks und Technologien (z.B. Swing, JavaFX, Win32, WPF, WinForms …) gibt es Libraries für die Steuerung der Anwendungen. Zusätzlich existieren Libraries für die Verwendung von Bilderkennung. Hierbei werden Screenshots der zu bedienenden UI-Elementen erstellt und über eine Bilderkennung lokalisiert. Dieses Vorgehen ist hilfreich, wenn die direkte Adressierung der UI-Elemente nicht möglich ist oder visuelle Änderungen verglichen werden sollen.

Mobile Anwendungen: Die Bedienung von mobilen Geräten kann automatisiert werden durch die Fernsteuerung eines echten oder simulierten Gerätes .

Dokumente: Der Inhalt von Dateien wie PDFs oder Excel-Dateien kann gelesen und überprüft werden.

    Zusätzlich zu den bereits existierenden Libraries ist es möglich, eigene Module zu implementieren.
    Diese können entweder in Robot Framework selbst oder über die API in der Form von Python-Code implementiert werden. Über Decorator werden Klassen und Methoden in für Robot Framework verwendbare Keywords umgewandelt und über das Listener-Interface können sich Module in die verschiedenen Schritte im Testablauf registrieren, um so Code zu bestimmten Zeitpunkten wie dem Start/Ende eines Tests auszuführen.

    Einsatz in der Robotic Process Automation (RPA)

    Robotic Process Automation ist die Automatisierung von Prozessen durch Programme, die menschliche Handlungen nachahmen, ähnlich zu den oben beschriebenen Testszenarien. Im Gegensatz zu einem Test ist das Ziel allerdings nicht die Validierung eines Systems, sondern die Optimierung von Prozessen.
    Ein typischer Anwendungsfall für die Verwendung von RPA ist die Automation von manuellen Prozessen wie Datenerfassung oder der Bedienung von Nutzeroberflächen und Formularen.

    Vorteile der RPA

    Der zentrale Vorteil ist die Tatsache, dass RPA nicht über APIs und andere Schnittstellen kommunizieren muss, sondern ohne Änderungen am System über die bestehenden Oberflächen arbeiten kann. Dadurch sind RPA-Lösungen schnell lauffähig und können kurzfristig implementiert werden, während klassische Automationslösungen ggf. komplexe Anpassungen an Schnittstellen benötigen, um die geforderten Interaktionen zu ermöglichen.

    Gerade bei Legacy-Systemen, wenn viele verschiedene Systeme im selben Prozess verwendet werden oder wenn es keine Möglichkeit gibt, eine klassische Schnittstelle zu ergänzen, ist RPA ein wertvolles Werkzeug für eine eine minimalinvasive Automation von Prozessen.

    Folgende Eigenschaften von Prozessen sind gute Indikatoren, ob eine Automation möglich und sinnvoll ist:

    Aufwand: Der Prozess wird regelmäßig und oft genug manuell wiederholt oder ist aufwändig genug, so dass sich eine Automation lohnt.

    Umsetzbarkeit: Der Ablauf variiert nicht stark und/oder kann in einem Wenn-Dann-Aufbau beschrieben werden.

    Digitalisierung: Der Prozess arbeitet mit Software und/oder Dateien und automatisiert die UI. Hierdurch können Schnittstellen zur Dunkelverarbeitung, z.B. mit OCR-Unterstützungen, geschaffen werden.

    Stabilität: Änderungen am Prozess verursachen Änderungen an der Automatisierung und somit Aufwand und Kosten. Ein stabiler Prozess eignet sich eher für eine Automation.

    Nachteile der RPA

    Allerdings hat RPA auch Schwächen im Vergleich zu einer klassischen Automatisierung über Schnittstellen.
    Zum einen bieten Schnittstellen und APIs im Vergleich zur Automation von Benutzeroberflächen eine breitere Funktionalität, bessere Performance und höhere Flexibilität. RPA wird in diesen Fällen von der Geschwindigkeit und dem Umfang der Benutzeroberfläche limitiert, während bei einem direktem API-Zugriff und der Möglichkeit, neue Schnittstellen zu ergänzen, solche Einschränkungen nicht existieren.

    Zum anderen ist die Stabilität von RPA stark abhängig von der Stabilität des zu automatisierenden Systems.
    Eine einfache Design-Änderung der Benutzeroberfläche kann eine Anpassung in der Automation erforderlich machen. Im Gegensatz dazu sind klassische Schnittstellen oft stabiler und Änderungen an diesen werden (im Idealfall) frühzeitig kommuniziert.

    RPA ist auch abhängig von dem zu automatisierenden System. Wenn z. B. Elemente einer Seite nicht eindeutig identifizierbar sind, wird die Bedienbarkeit erschwert. Eine typische Lösung ist die Ergänzung von einzigartigen Identifier- oder Locator-Attributen an den einzelnen Elementen.

    Selbstverständlich ist es möglich, verschiedene Automationswege zu kombinieren. Man könnte eine API in Anwendung A und B bereitstellen, Daten aus ihnen abrufen und dann in Anwendung C eintragen. Die Benutzeroberflächensteuerung würde hier lediglich die Lücke in der Anwendung C schließen. Es sollte also immer geprüft werden, welcher Automationsweg besser geeignet ist.

    Robot Framework kann zusätzlich zur Definition von Testfällen auch Tasks definieren. Die Syntax von Tasks ist identisch zu Tests und sie haben die gleichen Konfigurationsmöglichkeiten. Sie unterscheiden sich lediglich in der Semantik und in der verwendeten Terminologie. Somit kann Robot Framework mit allen Features verwendet werden, um Prozesse zu automatisieren

    Ein weiteres erwähnenswertes Projekt ist das RPA Framework, welches eine Sammlung von verschiedenen Libraries für Robot Framework entwickelt. Diese Libraries sollen die RPA-Entwicklung vereinfachen und die Kernfunktionalitäten bereitstellen, die typischerweise benötigt werden.


    Fazit

    Das Robot Framework ist ein leistungsstarkes und umfangreiches Test-Framework mit einer aktiven Community und einer Vielzahl zusätzlicher Erweiterungen (Libraries). Es stellt eine konsequente Umsetzung von Testszenarien nach dem Keyword-driven-Ansatz sicher. Dabei basieren die Testfälle auf in Python implementierte wiederverwendbare Schlüsselwörter-Logiken. Dies macht die Testfalldefinition zur Testfallimplementierung, ist dabei von Fachabteilungen lesbar und vermittelt die richtigen Informationen über die Absicht des Testszenarios.

    Robot ist aufgrund seiner umfangreichen Anbindungs- und Erweiterungsmöglichkeiten bestens für die gängigen Herausforderungen im Kontext von Automationen geeignet. Aufgrund der leicht verständlichen Syntax ermöglicht es einen anwenderfreundlichen Einstieg in die Thematik rund um die Automation.

    Der Mensch bleibt der entscheidende Faktor, der darüber bestimmt, inwieweit Automation einen Gewinn für die Qualität eines Softwareprojektes darstellt. Daher ist es wichtig, die Risiken, die durch Automation entstehen, zu erkennen und zu minimieren. Letztendlich ist Automation auch als Software zu betrachten und somit nach den Qualitätskriterien für eine gut Software-Architektur wie Wartbarkeit, Robustheit, Änderbarkeit und Performance zu konzipieren und zu realisieren.

    Richtig angewendet ist das Robot Framework ein mächtiges Werkzeug für die Transformation von manuellen Klickreihenfolgen hinzu automatisierte Dunkelverarbeitungen. Es sollte aufgrund seiner Vorteile auch gegenüber lizenzpflichtigen „Robotic Process Automation“-Tools als ein möglicher Lösungsansatz in Betracht gezogen werden.

    Bei weiteren Fragen rund um Testkonzepte, Testautomation oder testbaren Software-Architekturen kontaktieren Sie uns gern.


    Vereinbaren Sie eine kostenlose Beratung

    Phillip Conrad

    Segment Manager
    p.conrad@smf.de

      Pflicht für alle Anfragen zu unseren Angeboten. *


      Weiterführende Links