Robot Framework
Robot Framework | |
---|---|
Basisdaten | |
Hauptentwickler | Pekka Klärck, Janne Harkonen et al. |
Erscheinungsjahr | 24. Juni 2008[1] |
Aktuelle Version | 7.0[2] (11. Januar 2024) |
Betriebssystem | Plattformübergreifend |
Programmiersprache | Python |
Kategorie | Test-Framework |
Lizenz | Apache-Lizenz 2.0 |
robotframework.org |
Robot Framework ist ein generisches Open-Source-Automatisierungs-Framework, das sowohl für Testautomatisierung als auch für Robotic Process Automation genutzt werden kann[3].
Robot Framework ist eines der bekanntesten Frameworks[4] 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[5] 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.[6]
Die Weiterentwicklung des Frameworks wird von der Robot Framework Foundation[7] finanziert, die auch Rechteinhaber der Wortmarke Robot Framework[8][9] ist.
Geschichte
Die grundlegende Idee zum Robot Framework wurde 2004 entwickelt und 2006 in der Masterarbeit von Pekka Klärck (damals Pekka Laukkanen)[10] 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.[11]
Die Version 2.0 wurde am 24. Juni 2008 als Open Source unter der Apache-Lizenz 2.0 veröffentlicht.[12][13]
Seit der Veröffentlichung wuchs die Anzahl der Nutzer außerhalb von Nokia hauptsächlich im finnischen Markt.[14] 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,[15] 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[16] in Helsinki (ausgenommen 2021) statt. Seit der COVID-19-Pandemie gibe es auch eine Online RoboCon, die 2021 das erste Mal organisiert wurde. Alle Vorträge aller RoboCon Konferenzen sind online frei verfügbar.[17]
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.[7]
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[18].
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.[19] 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[20] wurde mit Version 6.0[21] Unterstützung für weitere Sprachen neben Englisch eingebaut.
Derzeit sind die folgenden Sprachen unterstützt:[22]
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[6], 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[23] 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[24].
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.
Darüber hinaus ist es das Ziel des Vereins, die Community der Anwender zu unterstützen und Wissen über Testautomatisierung und robotische Prozessautomatisierung und deren Entwicklung mit Robot Framework zu verbreiten.
Um den Einsatz des Tools zu fördern, ermöglicht und finanziert der Verein die Kernentwicklung und Wartung sowie Anwender- und Ökosystemprojekte. Darüber hinaus sind Community-Veranstaltungen und die Pflege und Unterstützung der Community-Plattformen sowie die Pflege der Dokumentation Arten der Aktivitäten.
2018 wurde der Verein für internationale Mitglieder geöffnet und ist seitdem stark gewachsen.
Als finanzielle Quellen dienen einerseits die Mitgliedsbeiträge der (Stand Dezember 2023) 65 Mitgliedsfirmen sowie die jährliche RoboCon. Aus den Mitteln wird hauptsächlich die Weiterentwicklung des Robot Framework Kerns finanziert sowie die Plattformen, wie Forum und Webseite und die Verwaltung des Vereins.
Der Vorstand des Vereins wird jährlich gebildet und besteht in den Jahren 2023 und 2024 aus acht Mitgliedern aus Finnland, Deutschland und Tschechien.[25]
Mit dieser Organisationsform ist Robot Framework eine Ausnahme unter den Open-Source-Test-Frameworks. Wesentlich häufiger anzutreffen sind Organisationsformen, bei denen kommerzielle Firmen im Besitz der Open-Source-Software und deren Namen und Infrastruktur sind (zum BeispielCucumber, das im Besitz von SmartBear ist) oder die Projekte werden von unabhängigen Organisationen, wie beispielsweise der Software Freedom Conservancy finanziell unterstützt oder müssen selbstständig auf Sponsorensuche gehen.
Der Vorteil des eigenen Vereins ist die demokratische Organisation und Vergabe der Gelder, die aufgrund rechtlich bindender Formulierung der Vereinssatzung ausschließlich im Interesse des Frameworks stattfinden kann. Es ist durch diese Organisationsform praktisch ausgeschlossen, dass aufgrund finanzieller Interessen Einzelner die Weiterentwicklung eingestellt oder die freie Verfügbarkeit in der Zukunft eingeschränkt wird. Negativbeispiele, wo durch Firmenentscheidungen, die Weiterentwicklung von verbreiteten Frameworks komplett in die Verantwortung privater Entwickler oder der Community gegeben wurden, sind u. a. Gauge[26] und Cucumber.[27]
RPA
Zwar wurde Robot Framework ursprünglich dazu entwickelt, die Abläufe bei manuellem Testen zu automatisieren, jedoch eignet sich das Framework auch zu Robotergesteuerter Prozessautomatisierung (RPA). Dazu wurde der Sprachgebrauch mit der Version 3.1[28] um sogenannte Tasks erweitert. Technisch verhalten sich Tasks wie Testfälle:
*** Settings ***
Library SeleniumLibrary
Task Teardown Close Browser
*** Tasks ***
Suche 'Robot Framework' mit Google
Open Browser https://www.google.de headlesschrome
Input Text lst-ib Robot Framework
Click Button Google-Suche
Capture Screenshot
Durch die nahe Verwandtschaft von RPA und Testautomatisierung gelingt es Teams, die bereits Robot Framework einsetzen, verhältnismäßig leicht RPA zu betreiben, indem sie auf ihrer bestehenden Infrastruktur aufbauen.[29]
Literatur
Robot Framework wird im Kontext des Keyword-Driven Testing in mehreren Veröffentlichungen erwähnt oder behandelt.
Buch Keyword-Driven Testing
René Rohner und Matthias Daigl behandeln Robot Framework umfangreich[30] in dem Buch Keyword-Driven Testing / Grundlage für effiziente Testspezifikation und Automatisierung.[31]
Im Openbook zu Keyword-Driven Testing Frameworks[32] werden die Kriterien der ISO 29119-5 auf Robot Framework und eine Auswahl von Erweiterungen angewendet. Robot Framework erfüllt dabei bis auf sehr wenige Ausnahmen, bsp. Manual Testing, die Kriterien.
Wissenschaftliche Arbeiten
Robot Framework wird mehrfach in wissenschaftlichen Arbeiten behandelt.
Beispiele:
- Comparative Study of Robot Framework and Cucumber as BDD Automated Testing Tools
- Robot Framework, A boon for Automation
- Low Cost Automated OS Security Audit Platform Using Robot Framework
- Spaceport Command and Control System
- Static code analysis in Robot Framework
Blogs und andere Beiträge
- André Rist, Markus Stahl (Deutsche Post Adress): Qualität komplexer Systeme mit Open-Source-Tools verifizieren.[29]
- Dmytro Borysov: Robot Framework vs Pytest.[33]
- Lisa Crispin: Team Commitment to Quality[34]
- Heise Online: Automatisierte Tests mit dem Robot-Framework[35]
- Christian Müller (Noser Engineering): Einfache Testautomatisierung mit Robot Framework[36]
- Joe Colantonio: Robot Framework Creator Pekka Klärck [PODCAST][37]
- Paul Laihonen (Eficode): ROBOT FRAMEWORK: PAST, PRESENT AND FUTURE[11]
- Katri Ordning (KONE): ROBOT FRAMEWORK AT KONE[38]
Weblinks
Einzelnachweise
- ↑ code.google.com. (abgerufen am 3. Dezember 2013).
- ↑ Release 7.0. 11. Januar 2024 (abgerufen am 19. Januar 2024).
- ↑ Robot Framework Homepage (englisch)
- ↑ heise online: Keyword-Driven Testing jenseits des Hypes: Eine kritische Bestandsaufnahme. 18. September 2015, abgerufen am 10. Dezember 2023.
- ↑ Robot Framework Tools. Abgerufen am 10. Dezember 2023 (englisch).
- ↑ a b Robot Framework Libraries on PyPi.org. Abgerufen am 10. Dezember 2023 (englisch).
- ↑ a b Robot Framework Foundation. 12. April 2016, abgerufen am 10. Dezember 2023 (englisch).
- ↑ EU Wortmarke - Robot Framework. European Union Intellectual Property Office, 29. Mai 2020, abgerufen am 10. Dezember 2023 (englisch).
- ↑ US Trademark - Robot Framework. United States Patent and Trademark Office (USPTO), 15. Juni 2021, abgerufen am 10. Dezember 2023 (englisch).
- ↑ Laukkanen, Pekka: „Data-Driven and Keyword-Driven Test Automation Frameworks“, 2006
- ↑ a b Eficode: Robot Framework: Past, Present and Future. Abgerufen am 10. Dezember 2023.
- ↑ Google Code Archive of Robot Framework. Abgerufen am 10. Dezember 2023 (englisch).
- ↑ Robot Framework Versionen auf PyPI.org. 26. Juni 2008, abgerufen am 10. Dezember 2023 (englisch).
- ↑ What is Robot Framework? The Story Behind a Robotic Testing Ecosystem. Abgerufen am 10. Dezember 2023.
- ↑ Vereinsanmeldung Robot Framework ry. Patentti- ja rekisterihallitus (Patent- und Registrierungsamt, Finnland), 17. Juli 2015, abgerufen am 10. Dezember 2023 (finnisch).
- ↑ Robocon. Robot Framework Foundation, abgerufen am 10. Dezember 2023 (englisch).
- ↑ Robot Framework - YouTube. Abgerufen am 10. Dezember 2023.
- ↑ PyPI 2FA Security Key Giveaway. Abgerufen am 10. Dezember 2023.
- ↑ Robot Framework User Guide. Abgerufen am 10. Dezember 2023.
- ↑ RoboCon 2022 - 1.01 Keynote: Robot Framework. Abgerufen am 13. Dezember 2023 (deutsch).
- ↑ robotframework/doc/releasenotes/rf-6.0.rst at master · robotframework/robotframework. Abgerufen am 10. Dezember 2023 (englisch).
- ↑ Pekka Klärck: Localization in RF 6.0. 8. Januar 2023, abgerufen am 10. Dezember 2023 (englisch).
- ↑ RemoteInterface. In: Github. Abgerufen am 16. Juni 2020 (englisch).
- ↑ Robot Framework Community's shared code repositories. In: Github. Abgerufen am 16. Juni 2020 (englisch).
- ↑ Your Robot Framework News November 2023! Abgerufen am 10. Dezember 2023.
- ↑ Gauge and Taiko in 2021 · Issue #1732 · getgauge/gauge. Abgerufen am 10. Dezember 2023 (englisch).
- ↑ Matt Wynne: Every ending is a new beginning. 23. Februar 2023, abgerufen am 10. Dezember 2023 (englisch).
- ↑ Pekka Klärck: Robot Framework 3.1 - Release Notes. Abgerufen am 16. Juni 2020 (englisch).
- ↑ a b André Rist, Markus Stahl: Qualität komplexer Systeme mit Open-Source-Tools verifizieren. In: German Testing Magazin. SIGS DATACOM GmbH, Mai 2019, S. 20–23, abgerufen am 10. Dezember 2023.
- ↑ René Rohner, Matthias Daigl: Keyword-Driven Testing. dpunkt.verlag, ISBN 978-3-86490-570-4, S. 145–206.
- ↑ René Rohner, Matthias Daigl. dpunkt.verlag, 2022, ISBN 978-3-86490-570-4.
- ↑ René Rohner, Matthias Daigl: Openbook zu Keyword-Driven Testing Frameworks. (PDF) dpunkt.verlag, abgerufen am 10. Dezember 2023.
- ↑ Dmytro Borysov: Robot Framework vs Pytest. tesena s.r.o., 29. November 2022, abgerufen am 14. Dezember 2023 (englisch).
- ↑ Lisa Crispin: Team Commitment to Quality. 29. März 2010, abgerufen am 10. Dezember 2023 (amerikanisches Englisch).
- ↑ heise online: Automatisierte Tests mit dem Robot-Framework. 5. April 2013, abgerufen am 10. Dezember 2023.
- ↑ Christian Mueller: Einfache Testautomatisierung mit Robot Framework. In: Noser Blog. 26. Juni 2018, abgerufen am 10. Dezember 2023 (deutsch).
- ↑ joecolantonio: Robot Framework Creator Pekka Klärck. 25. Februar 2016, abgerufen am 10. Dezember 2023 (amerikanisches Englisch).
- ↑ Robot Framework At Kone. Abgerufen am 10. Dezember 2023 (englisch).
Auf dieser Seite verwendete Medien
Autor/Urheber: Snooz6n, Lizenz: CC BY-SA 4.0
Diese Grafik visualisiert die Download-Zahlen von Robot Framework.
Quelle der Daten: Google BigQuery
SQL:
SELECT project AS project_name, COUNT(*) AS num_downloads, DATE_TRUNC(DATE(timestamp), MONTH) AS month FROM `bigquery-public-data.pypi.file_downloads` WHERE file.project = 'robotframework' AND DATE_TRUNC(DATE(timestamp), MONTH) >= DATE_TRUNC(DATE(2008, 1, 1), MONTH) GROUP BY month, project_nameORDER BY month DESC