Robot Framework ist ein generisches Open-Source-Automatisierungs-Framework, das sowohl für Testautomatisierung als auch für Robotic Process Automation genutzt werden kannRobot Framework Homepage (englisch).

Robot Framework ist eines der bekanntesten Frameworks für Keyword-Driven Testing, unterstützt aber auch Behavior Driven Development mittels Gherkin Notation (Angenommen/Wenn/Dann).

Es setzt dabei auf eine einfache prozedurale Skriptsprache, die darauf ausgelegt ist, möglichst einfach menschenlesbar und erlernbar zu sein. Die Robot-Framework-Skriptsprache wird über Erweiterungen von vielen IDEs und Texteditoren unterstützt, um beispielsweise Syntaxhervorhebung, Debugging, Refactoring und Autovervollständigung zu ermöglichen.

Robot Framework ist in Python implementiert und kann mit beliebigen Bibliotheken zu Steuerung des Testobjektes oder der zu automatisierenden Software erweitert werden. Mehrere hundert Bibliotheken wurden von der Open-Source-Gemeinschaft zur freien Verwendung veröffentlicht.

Die Weiterentwicklung des Frameworks wird von der Robot Framework Foundation finanziert, die auch Rechteinhaber der Wortmarke Robot Framework ist.

Geschichte Die grundlegende Idee zum Robot Framework wurde 2004 entwickelt und 2006 in der Masterarbeit von Pekka Klärck (damals Pekka Laukkanen)Laukkanen, Pekka: „Data-Driven and Keyword-Driven Test Automation Frameworks“, 2006 veröffentlicht. Im Jahr 2005 wurde mit der Entwicklung einer ersten Version bei Nokia Siemens Networks (heute Nokia Solutions and Networks) begonnen. Aufgrund der wachsenden Verbreitung des Frameworks bei Nokia entstand im Entwicklungsteam um Robot Framework, das aus Pekka Klärck und weiteren externen Mitarbeitern bestand, die Idee, Robot Framework unter einer Open-Source-Lizenz zu veröffentlichen.

Die Version 2.0 wurde am 24. Juni 2008 als Open Source unter der Apache-Lizenz 2.0 veröffentlicht. alt=Robot Framework Downloads pro Monat seit 2016, starkes Wachstung seit 2018. Bis 2018 ca. 100.000 Downloads monatlich, Q3 2023 im ca. 1,8 Millionen Downloads pro Monat.|links|mini|Downloads pro Monat Seit der Veröffentlichung wuchs die Anzahl der Nutzer außerhalb von Nokia hauptsächlich im finnischen Markt. Mit der Reduktion der finanziellen Mittel durch Nokia und aufgrund der in Helsinki verbreiteten Nutzung von Robot Framework gründeten 7 Firmen im Juni 2015 den eingetragenen Verein Robot Framework ry, der hauptsächlich unter dem Namen Robot Framework Foundation bekannt ist, um die Weiterentwicklung von Robot Framework durch Pekka Klärck finanzieren zu können.

Im Januar 2018 fand die erste, seitdem jährlich stattfindende, Robot Framework Konferenz RoboCon in Helsinki (ausgenommen 2021) statt. Seit der COVID-19-Pandemie gibt es auch eine Online RoboCon, die 2021 das erste Mal organisiert wurde. Alle Vorträge aller RoboCon Konferenzen sind online frei verfügbar.

Seit 2018 sind nicht nur die weltweite Verbreitung von Robot Framework, sondern auch die Mitgliederzahl und somit die finanziellen Mittel der Robot Framework Foundation stark gestiegen.

Robot Framework konnte somit seit 2018 (Version 3.0) stark weiterentwickelt werden und die Verbreitung des Frameworks hat international stark zugenommen. Mit über 1,8 Millionen Downloads pro Monat zählt Robot Framework zu den 1 % als kritisch eingestuften Projekten auf PyPI.org.

Syntax Robot-Framework-Testspezifikation ist in Dateien und Ordnerstrukturen organisiert. Die standardmäßige Dateiendung ist *.robot und eine .robot-Datei bildet eine Test-Suite, die mehrere Testfälle enthalten kann. Jeder Ordner, der direkt oder indirekt eine oder mehrere .robot-Dateien enthält, ist wiederum eine Test-Suite.

Da Robot Framework selbst in Python implementiert ist, finden sich auch viele Konzepte aus Python wieder. So werden beispielsweise ähnlich wie bei einem Block in Python einzelnen Keyword-Aufrufe eines Testfalls in Robot Framework durch Einrückung mit mehreren Leerzeichen spezifiziert.

Die Syntax von Robot Framework ist optimiert auf Lesbarkeit und einfache Erlernbarkeit. Sie basiert meist auf einem durch mehrere Leerzeichen getrennten Format oder seltener anzutreffen auf einer Trennung der Anweisungen mittels senkrechtem Strich. Das bedeutet, dass Keyword-Aufrufe und deren Argumente nicht wie beispielsweise in Python durch Klammern und Kommata getrennt werden wie hier login_user("User1", "123456") sondern durch zwei oder mehr Leerzeichen wie hier Login User User1 123456 . Somit sind einfache Leerzeichen valide Zeichen innerhalb eines Keywords oder Wertes.

Des Weiteren sind alle Argumente standardmäßig Zeichenketten (Stings) und müssen nicht wie sonst üblich mit Anführungszeichen begrenzt werden. Durch diese Bevorzugung von Zeichenketten müssen im Gegensatz dazu Variablen sonderbehandelt werden und mit Dollar und geschweiften Klammern geschrieben werden. (bsp. ${my_variable})

Der Code ist in Sektionen aufgeteilt, die mit *** Sektionsname *** definiert werden. Erlaubte Sektionen sind u. a. Settings, Variables, Test Cases und Keywords.

Beispiel (test.robot) In dem folgenden Beispiel sind zwei Testfälle zu sehen, die jeweils vier Keywords aufrufen, die aus der Resource keywords.resource importiert wurden.

Das Keyword Login User hat in diesem Beispiel zwei Argumente, login und password, welche mit der Variablen ${user} und dem Wert 1234567890 besetzt werden. *** Settings *** Documentation A test suite for valid login. ... ... Keywords are imported from the resource file Resource keywords.resource Default Tags positive

*** Variables *** ${user} max0815

*** Test Cases *** Login User with Password Connect To Server Login User ${user} 1234567890 Verify Valid Login Max Mustermann [Teardown] Close Server Connection

Denied Login with Wrong Password [Tags] negative Connect To Server Run Keyword And Expect Error *Invalid Password Login User ${user} 123 Verify Unauthorised Access [Teardown] Close Server Connection

Keyword Beispiel (keywords.resource) In Robot Framework können eigene zusammengesetzte Keywords erstellt werden, ohne in eine andere Programmiersprache wechseln zu müssen. Diese zusammengesetzten Keywords können entweder in eigenen Resource-Dateien oder in der Test-Suite selbst abgelegt werden.

Im folgenden Beispiel werden zwei Keywords definiert: Login User und Verify Valid Login. *** Settings *** Library MyServerAPI

*** Keywords *** Login User [Arguments] ${login} ${password} Set Login Name ${login} Set Password ${password} Execute Login

Verify Valid Login [Arguments] ${exp_full_name} ${version}= Get Server Version Should Not Be Empty ${version} ${name}= Get User Name Should Be Equal ${name} ${exp_full_name} Der hier zu sehende Programmcode würde in Python, wie folgt aussehen: from MyServerAPI import *

def login_user(login, password): set_login_name(login, password) set_password(password) execute_login()

def verify_valid_login(exp_full_name): version = get_server_version() assert len(version) != 0 name = get_user_name() assert name == exp_full_name

Gherkin Notation (Behavior Driven) Robot Framework kann neben der hauptsächlich in der Community verwendeten Keyword-Driven Testing-Methode auch Tests in Gherkin Notation verstehen. Diese Notation wird hauptsächlich zum Zwecke des Behavior Driven Development verwendet. *** Settings *** Documentation Feature: Login shall only be granted for authenticated users. Resource keywords.resource Test Teardown Close Server Connection

*** Test Cases *** Login User with valid Password Given the server is connected When the user "max0815" with the password "1234567890" is logged in Then the user "Max Mustermann" should be logged in

*** Keywords *** the server is connected Connect To Server

the user "${login}" with the password "${pwd}" is logged in Login User ${login} ${pwd}

the user "${full_name}" should be logged in Verify Valid Login ${full_name}

Übersetzungen Aufgrund des hohen internationalen Interesses and vor allem der starken Verbreitung von Robot Framework auf dem deutschen Markt wurde mit Version 6.0 Unterstützung für weitere Sprachen neben Englisch eingebaut.

Derzeit sind die folgenden Sprachen unterstützt: Bulgarian (bg), Bosnian (bs), Czech (cs), German (de), Spanish (es), Finnish (fi), French (fr), Hindi (hi), Italian (it), Dutch (nl), Polish (pl), Portuguese (pt), Brazilian Portuguese (pt-BR), Romanian (ro), Russian (ru), Swedish (sv), Thai (th), Turkish (tr), Ukrainian (uk), Chinese Simplified (zh-CN), Chinese Traditional (zh-TW)Das vorherige Gherkin-Beispiel würde dann so aussehen: language:de *** Einstellungen *** Dokumentation Feature: Login soll nur für authentifizierte Benutzer erlaubt sein. Ressource keywords.resource Testnachbereitung Close Server Connection

*** Testfälle *** Anmelden eines Benutzers mit validen Benutzerdaten Angenommen der Server ist verbunden Wenn der Benutzer "max0815" sich mit dem Passwort "1234567890" anmeldet Dann soll der Benutzer "Max Mustermann" angemeldet sein

Erweiterungen Für Robot Framework stehen hunderte Bibliotheken zur Verfügung, beispielsweise die Selenium basierte SeleniumLibrary oder die Playwright-basierte Browser-Bibliothek zum Testen von Webanwendungen.

Bibliotheken können nativ in Python implementiert werden. Hierbei ist die einfachste mögliche Bibliothek ein Python-Modul oder eine Python-Klasse und alle Funktionen in dem Modul oder der Klasse bilden die Keywords für Robot Framework: from TestObject import TestObject from robot.api.logger import info, debug, trace, console

class MyServerAPI:

def __init__(self) -> None: self.session = None self.login = '' self.password = '' self.connection: TestObject = None

def connect(self, ip): self.connection = TestObject(ip)

def disconnect(self): self.connection = None

def set_login_name(self, login): '''Sets the users login name and stores it for authentication.''' self.login = login info(f'User login set to: {login}')

def set_password(self, password): '''Sets the users login name and stores it for authentication.''' self.password = password info(f'Password set.')

def execute_login(self): '''Triggers the authentication process at the backend and stores the session token.''' self.session = self.connection.authenticate(self.login, self.password) if self.session: info(f'User session successfully set.') debug(f'Session token is: {self.session}') self.login = self.password = ''

def get_username(self, user_id=None): '''Returns the users full name of the given user_id or if None the own user data.''' return self.connection.get_user_name(self.session, user_id)

def get_server_version(self): return self.connection.get_version(self.session) Auch andere Programmiersprachen sind möglich, wenn sie einen RemoteServer auf Basis des sogenannten RemoteInterface implementieren. Der RemoteServer stellt mittels XML-RPC die Keywords zur Verfügung, damit in Testfällen auch Bibliotheken verwendet werden können, die zum Beispiel in Java implementiert sind.

Während der Robocon 2020 wurde die sogenannte MarketSquare-Organisation auf Github gegründet, unter der Bibliotheken der Community gesammelt und gemeinsam weiter entwickelt werden können.

Finanzierung und Organisation Rechteinhaber von Robot Framework ist heute die 2015 gegründete Robot Framework Foundation (Robot Framework ry), ein eingetragener Verein mit Sitz in Helsinki. Diese hat den Zweck, Robot Framework und dessen Community weiterzuentwickeln.

Zitat aus der Vereinssatzung (übersetzt aus dem Englischen, Stand Dezember 2023):2. Zweck und Form der Aktivitäten

Zweck des Vereins ist, die Nutzung des Open-Source-Tools Robot Framework zu fördern und die Wartung und Weiterentwicklung des Tools zu ermöglichen und zu finanzieren. Der Verein hält das Tool für jeden im Internet frei verfügbar. Der Verein stellt sicher, dass das Robot Framework jetzt und in Zukunft für Testautomatisierung und Robotic Process Automation verwendet werden kann.