.st0{fill:#FFFFFF;}

RobotFramework

Kompakt: die Robot Framework Online Konferenz 2020

 August 4, 2020

By  Simon Meggle

Die Agenda der 1. "Robot Framework Online-Konferenz" war vielversprechend und die Teilnehmer wurden am 30. Juli nicht enttäuscht. Zusammenfassung eines informativen und spannenden Nachmittags.

More...

Am 30. Juli 2020 lud die Imbus AG zur 1. Online-Konferenz rund um "Robot Framework" ein, die Rene Rohner souverän moderierte. Rene ist neben seiner Tätigkeit als Software Testing Consultant bei Imbus auch Mitglied im Vorstand der Robot Foundation, welche das Ziel hat, die Entwicklung von Robot voranzutreiben.
Zum Konferenzbeginn um 14 Uhr waren ca. 140 GotoMeeting-Slots besetzt, was angesichts 145 angemeldeter Teilnehmer ein durchaus gutes Ergebnis ist. Der erste Block bot vier Vorträge, bevor sich die Teilnehmer dann auf verschiedene virtuelle Räume verteilten, um dort in Workshops unterschiedliche Themen zu diskutieren:

  • Webautomatisierung mit Robot Framework (Christoph Singer, imbus AG) - "Alles rund um das Thema Webautomatisierung mit der Selenium Library und News zur Anbindung von Playwright and Robot Framework."
  • Robot Framework Core (Andrej Nod, imbus Rheinland GmbH) - "Alles Rund um Robot Framework selbst. Bedienung, Syntax und Funktionen."
  • Robot Framework APIs (René Rohner, imbus AG) - "Entwicklung von Bibliotheken, Listener API, PreRunModifier, ResultVisitors und Co. Anbindungen an die APIs von Robot Framework und Erweiterung dessen mit Python."
  • Keyword-Driven Testmanagement (Frank Blechschmidt, imbus Rhein-Main GmbH) - "Keyword-Driven Testing mit dem Testmanagementsystem imbus TestBench und Robot Framework. Demo und Diskussionen."
  • Security-Testing mit Robot Framework (Tobias Esser, imbus AG) - "Wie können Security-Tests mit Python und Robot Framework automatisiert werden? Welche Tests sind empfehlenswert und helfen in der Automatisierung?"

Pekka Klärck: News From Robot Framework / Roadmap

Den Anfang machte Pekka Klärck, der "geistige Vater" und Hauptentwickler von Robot Framework. Er stellte die Release-Roadmap von Robot vor und stellte sich Fragen der Teilnehmer.

RF 3.2.2 - das kommende Release

Version 3.2.2 wird Anfang September als das letzte Release in der 3.2 Serie veröffentlicht und hauptsächlich kleine Verbesserungen enthalten. Das nächste größere Release 4.0 ist bereits für Dezember eingeplant. Ein guter Grund, Version 3.2 jetzt noch zu testen und Fehler und Verbesserungsvorschläge zeitnah einzureichen.

RF 4.0 

Mit Version RF 4.0 halten einige neue Features Einzug in das beliebte Framework:

Listener API: In diesem Release wird das listener API ordentlich erweitert. Listener werden als Python- oder Java-Klassen von Robot beim Start mitgeladen und klinken sich in vordefinierte sog. "Hooks" ein - auf diese Weise erhalten sie Benachrichtigungen über alle möglichen internen Ereignisse vor, während und nach der Testausführung.

Ein prominentes Beispiel dafür sind Debugger, mit denen der Test an beliger Stelle angehalten und inspiziert werden kann (siehe FIXME). Konkret wird Version 4 neue Events für "Keyword start/end" bereitstellen, sowie die Ausgabe der aktuellen Zeilennummer erlauben.

Alea iacta sunt: "SKIP": Der Hauptgrund für eine Erhöhung der Major-Release-Number auf 4 ist aber sicherlich die Tatsache, dass das Konzept der "criticality" ab dieser Version nicht mehr existieren wird und durch den Status SKIP abgelöst werden wird.

Zur Erklärung: Bisher werden in Robot alle Testcases per default als critical betrachtet; sie bestimmen deshalb am Ende einer Suite den Status. Beim Aufruf von Robot kann dieses Verhalten aber verändert werden, indem mit den Schaltern --critical bzw. --noncritical die Tags der Tests als Pattern angegeben werden, die als kritisch bzw. nicht-kritisch gelten sollen. Und damit kein Missverständnis auftaucht: es wird damit nicht etwa ein "critical"-Status gesetzt, sondern lediglich genauer bestimmt, welche Tests überhaupt die Erlaubnis haben, ggf. den Gesamtstatus zu verändern.

Ob nun SKIP einen Ersatz für die Kritikalität darstellt, wurde im Robot-Slack-Channel und auf GitHub rege diskutiert. Pekka entschied genau dies und begründet das m.E. sehr ausführlich und nachvollziehbar im eigens dafür angelegten Issue #3624. Als einer der Hauptgründe nennt Pekka, dass die "criticality" immer ein "special feature" von Robot war und die Zusammenarbeit mit anderen Tools dadurch nicht gerade erleichtert wurde.

In Kürze: um zukünftig das gleiche Verhalten von --noncritical [tagpattern] zu erreichen, reicht --skiponfailure [tagpattern]. Entsprechend getaggte Tests werden ausgeführt, jedoch als "skipped" markiert, sollten sie fehlschlagen; sie haben keinen Einfluss auf das Gemsamtergebnis. Um die Migration zu erleichtern, enthält RF 4.0 Aliase für critical und noncritical, die auf das neue skiponfailure verweisen. (Ich rate allerdings dazu, solche Workarounds gar nicht erst zu benutzen. Spätestens ab Version 5 wird ein Umstieg sicher zwingend notwendig sein.)

Interessant an dieser Stelle der in Issue 3625 beschriebene Ansatz, weitere "custom Status" zu bilden:

--addstatus NON-CRITICAL:SKIP:non-critical:pink --skiponfailure non-critical
--addstatus KNOWN_ISSUE:FAIL:bug-id-*:purple

RF 5.0 

Sie sieht schon sehr befremdlich aus, die Robot-Implementierung von Kontrollstrukturen wie IF/ELSE und TRY/EXCEPT. RF Version 5.0 soll das endlich glattziehen und es auch erlauben, solche Strukturen zu verschachteln (was aktuell leider nicht erlaubt ist). Bis dieses Release erscheint, wird allerdings noch Zeit vergehen - Pekka rechnet frühestens mit Juni 2021. Ab diesem Release ist dann übrigens auch definitiv Schluss mit dem Support für Python 2.x.

Wer arbeitet an Robot Framework?

Ein Teilnehmer fragte, wer hauptsächlich an Robot Framework arbeitet. Diese Frage bekomme ich auch immer wieder von Kunden gestellt. Im wesentlichen arbeitet tatsächlich nur Pekka am Robot Core, er möchte allerdings mit den kommenden Major Releases 4/5 ein Team aufbauen, welches den Code zusammen pflegen kann. Sicher keine schlechte Idee, um den Bus Factor zu senken. Dass Robot immer noch so aktiv weiterentwickelt wird, ist übrigens großer Verdienst der Robot Foundation. Rene Rohner hat die Bedeutung der Foundation für das Framework übrigens sowohl während der Konferenz, als auch sehr gut und ausführlich im Robot-Forum im Thread "Robot Framework Foundation unfolded" erklärt.

Robocon 2021

Die Frage, ob denn eine Robocon 2021 geplant sei, musste Pekka leider verneinen. Die aktuelle Lage bzw. die nicht vorhersehbare Entwicklung der COVID19-Pandemie lasse dies nicht zu; immerhin müssten dafür jetzt schon Verträge für Location etc. geschlossen werden. Denkbar hingegen sei stattdessen eine Online-Version der Robocon z.B. im Mai/Juni 2021.


Mikko Korpela: Playwright / Robot Framework Browser Library

Nach Pekka Klärck übernahm Mikko Korpela und zeigte, was sich hinter der Library "Robot Framework Browser" verbirgt.

Hier muss man vielleicht etwas ausholen... Selenium ist ja so etwa wie der Dinosaurier unter den Web-Testing-Tools, es existiert seit 2005 und hat sich immer weiter entwickelt. Und dank Tatu Aalto gibt es auch immer eine top gepflegte Robot Selenium-Library dazu.

Trotzdem blieben immer einige "pain points", die sich jeder kennt: es gibt z.B. keine impliziten "waits", denn Selenium weiß nicht wirklich, wann das Laden einer Seite beendet ist. Fast unvermeidbar ist es also, z.B. einem Klick immer noch eine entsprechende Assertion voranzustellen, die sicherstellt, dass der zu klickende Button auch tatsächlich da ist -  auch wenn es hier oft nur um Sekundenbruchteile geht, die das menschliche Auge nicht wahrnimmt. Auch muss der Webdriver, über den Selenium den Browser fernsteuert, genau zum Browser passen und die entsprechende Version z.B. für Firefox (Geckodriver), Chrome (Chromedriver) oder Edge (Edgedriver) installiert sein.

Damit räumte Google vor einigen Jahren auf und veröffentlichte Puppeteer - eine Lösung zur Automatisierung von Chrome und Chromium-basierten Browsern. Batteries included: die Browser bringt Puppeteer schon mit. Anfang 2020 kam es, dass die beiden Entwickler, die Puppeteer maßgeblich vorantrieben, zu Microsoft überwechselten und auf dieser Basis an Playwright schraubten.

Playwright erlaubt die Fernsteuerung von Chromium-, Webkit-, und Firefox-basierten Browsern über eine gemeinsame API und verspricht cross-browser und cross-OS-support. Es ist also möglich, z.B. mit einer Safari-Instanz auf Windows zu testen.

Weiterhin wurde das API modernisiert, sodass ein click auf ein Element implizit vorher auf das Erscheinen des Elements wartet.
Playwright kann außerdem mit Webcomponents umgehen, d.h. in sich geschlossene DOM-Bäume innerhalb eines anderen DOMs erkennen und ansprechen. Killerfeature in meinen Augen: die Selector engine erlaubt die gemischte Verwendung von Text-, CSS- und XPath-Selektoren - und das in einer Zeile:

# find span css selector inside xpath selector:  xpath=//html/body/div >> css=span 

Anstatt vollwertige Instanzen von Browsern zu starten, kann Playwright sog. Contexte innerhalb des Browsers erstellen. Es ist damit also möglich, mehrere Tabs in einem Browserfenster zu öffnen, die jeweils z.B. unterschiedliche Geolocation- oder Sprach-Settings in ihrem Context haben. Das ist deutlich komfortabler und schneller, als dies einzelnen Browser-Instanzen als Kommandozeilenargument mitzugeben.

Playwright kann Tastatur- und Maus-Events nativ absetzen. Warum das wichtig ist? Auf manchen Webseiten kann es passieren, dass das bloße Setzen von Werten in einem Formular nicht funktioniert, die Anwendung also nicht darauf reagiert. Die Eingabe "von Hand" hingegen funktioniert, weil hierbei Tastatur-Aktivität im Spiel ist. 

Unter der Federführung von Mikko entstand nun die "Robot Framework Browser Library", welche auf Playwright aufsetzt. Mikka ist kein unbeschriebenes Blatt, sondern war vier Jahre Mitglied des Robot Core Developer Teams und wirkte an der Entwicklung des RIDE-Editors für Robot mit. Die Robot-Library "Pabot" zur parallelen Ausführung von Robot-Tests stammt ebenfalls von ihm. 


Nils Balkow-Tychsen: Testautomatisierung mit Kubernetes

Nils von Humanitec GmbH führte anschließend in das Thema Kubernetes ein und erklärte die Vorzüge einer containerbasierten Testausführung. Argument Nr. 1 ist natürlich die Skalierbarkeit, um Tests auch voneinander isoliert und parallel ausführen zu können. Aber auch die optimale Nutzung der Ressourcen und volle Kontrolle über eine einzige API sind nicht weniger interessant. Auf Testebene betrachtet punkten Container vor allem auch darin, dass sie einfach immer, immer, IMMER mit exakt gleichen Ausgangsbedingungen starten.

Nils spannte einen schönen Bogen von einfachen Container-Starts bis hin zum Start eines kompletten Deployments in Kubernetes.
Er sparte auch nicht mit Tipps für die Praxis, darunter k9s, ein CLI-Interface zur Administration von Kubernetes-Clustern. Ich kannte bisher nur ctop und habe für alles andere die Kommandozeile malträtiert. Mit k9s macht die Verwaltung eines Kubernetes richtig Spaß:

k9s in Aktion (Quelle: gitlab.com)

Ans Eingemachte ging es dann, als Nils zeigte, wie die von ihm vor ca. zwei Jahren bei Humanitec entworfene Test-Infrastruktur aussieht und arbeitet. 


Rene Rohner: Debuggen von Robot Framework

Dann übernahm der Moderator selbst das Steuer und zeigte den Teilnehmern die verschiedenen Möglichkeiten, Robot Framework zu debuggen. Dabei ging er quasi "von außen nach innen" vor, zeigte nämlich zunächst die Verwendung der DebugLibrary, die mit dem Keyword Debug den einen Robot-Test einfach anhält. Auf der Kommandozeile kann dann interaktiv debugged werden. Wer ipython kennt bzw. mit ipdb debugged, ist hier sofort heimisch.

Weil das nicht genug für Rene war, programmierte er vor einiger Zeit seine eigene Debugger-Library - und die kann sich sehen lassen.

Anders als die DebugLibrary wartet die Debugger-Library nicht auf ein Keyword für den Einstiegspunkt, sondern sucht diesen selbst - nämlich, sobald ein Keyword fehlschlägt (welchen besseren Zeitpunkt zum Debuggen gibt es wohl...? 🙂 ). Wichtig ist nur, die Library als "Listener" zu starten, d.h. direkt beim Aufruf von Robot:

robot --listener Debugger path/to/test.robot 

Debuggen im Editor: Obwohl ich bekennender Fan von VS Studio Code bin, hatte es mir bisher der RED-Editor angetan. Rene zeigte aber, dass der Robot Framework Language Server aber mindestens die gleichen Möglichkeiten für Code-Completion und Debugging bietet. Werde ich mir definitiv nochmal ansehen. Spätestens mit den Debug-Möglichkeiten des RFLS kann man dann so richtig im Code wühlen und beim Debuggen bis in den Python-Code von Robot selbst hinabsteigen. Manchmal ist gerade das extrem hilfreich, um zu sehen, mit welchen Daten Robot eigentlich arbeitet.

All diese Debug-Möglichkeiten demonstrierte Rene live und sehr anschaulich. Da war sicher für jeden noch was dabei.


Workgroup: Christoph Singer, SeleniumLibrary/Playwright

Anschließend ging es dann in die Workgroups; ich entschied mich für den Slot von Christoph Singer, in dem er noch einmal genauer auf die Vorzüge von Playwright bzw. der Browser Library einging, die Mikko zuvor schon vorgestellt hatte. Besonders das Konzept von Browser, Context und Page brachte er gut rüber:

Playwright: Zusammenhang von Browser, Context und Page

Playwright: Zusammenhang von Browser, Context und Page

Sehr spannend war sein Demo-Teil: er hatte hierfür einen Test aufgebaut, der einen Dummy-Carconfigurator bedient. Hier konnte man sehen, wie nützlich die Keywords von Robot sein können, wenn man sie richtig strukturiert:
Christoph hatte den eigentlichen Testablauf (Login, select engine etc.) von den Library-spezifischen Keywords getrennt; letztere waren ausgelagert in jeweils ein separates Resource-File, in welchem dann die Selenium- bzw. Playwright-Bibliothek importiert wurde. Alleine durch Kommentieren der entsprechenden Zeile mit dem Resource-Include konnte er also die Tests einmal mit Selenium und einmal mit der Robot Browser Library starten.
Der Geschwindigkeits-Vorteil durch Playwright im Vergleich zu Selenium war hier sehr schön zu sehen. 

Es ist schon etwas abgefahren, den Safari-Browser unter Windows zu sehen - denn der macht nämlich keinen Hehl daraus, dass seine inneren Werte (WebKit) zählen - die UI lässt keine Schlüsse auf den Apple-Browser zu.

Mit einem ausführlichen Frageteil schloss Christophs Workshop ab.


Fazit

Es lohnt sich definitiv, solche Online-Events weiter im Auge zu behalten. Es geht natürlich z.B. nichts über eine Robocon in Helsinki (und finnisches Bier) - aber besondere Zeiten erfordern besondere Maßnahmen, und die hat Imbus sehr gut gewählt. Die Konferenz funktionierte unter GotoMeeting auch mit annähernd 150 Teilnehmern ruckelfrei. 

Schön, dass Pekka Klärck das Event mit seinem Vortrag zur Roadmap bereichert und damit auch quasi "höchst offiziell" gemacht hat. Der Vortrag von Nils kam mir gerade recht, weil ich meine CheckMK-Monitoring-Erweiterung "RobotMK" auch mit der Möglichkeit ausstatten möchte, Robot-Tests in Kubernetes zu triggern.

Besonders hängen geblieben sind bei mir die Vortrgäge von Mikko und Christoph über die neue Browser Library für das Playwright-Framework. Ich bin überzeugt, dass Playwright auf lange Sicht die Web-Test-Methode Nr. 1 bei Robot werden wird, auch wenn die Browserversionen (anscheinend?) nicht vorgewählt werden können und man an die mitgelieferten Browser gebunden ist, also keinen im OS installierten Browser verwenden kann. 

Und jetzt werfe ich doch gleich mal VS Studio Code an und nehme den Robot Framework Language Server unter die Lupe...

Simon Meggle


Selbständiger und unabhängiger Spezialist für die Themen IT-Monitoring (CheckMK), End2End-Testing/Testautomatisierung (RobotFramework) und Datacenter-Automatision/Ansible. Maintainer des RobotMK-Projekts (robotmk.org).

  • Hey Simon,

    Danke für das tolle Feedback.
    War schön dich dort mit dabei zu haben!

    Ich hoffe wirk können spätestens 2022 uns wieder in Helsinki treffen und etwas finnisches Bier genießen.

    Vielleicht ja demnächst dann wieder Online!

    Gruß
    René

  • {"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}
    >