.st0{fill:#FFFFFF;}

RobotFramework, checkMK

Tutorial: RobotMK Schnellstart – Teil 1

 Oktober 10, 2020

By  Simon Meggle

Mit diesem Tutorial erhältst Du in ca. 1h eine Windows-VM, in der End2End-Tests mit Robot Framework ausführt werden. Mit Hilfe des Moduls "RobotMK" werden die Test-Ergebnisse von Checkmk überwacht. 

More...

(Direktlink zu Teil 2 des Tutorials)

Einleitung

Als "Durchstich" bezeichne ich eine erste lauffähige Version von etwas, die mit Sicherheit noch keinen Preis für Schönheit oder Vollkommenheit bekommt. Aber sie bildet einen Lösungsweg komplett ab - so wie Du mit der Machete zunächst einen Pfad durch den Dschungel schlägst, wenn Du eine Straße hindurch bauen möchtest. Du rumpelst ja auch nicht direkt mit einer Teermaschine dort hinein.

Ist der Pfad geschlagen, hast Du einen guten Überblick darüber...

  • ...ob der Weg überhaupt machbar ist
  • ...wo man am anderen Ende herauskommt
  • ...welche Fallstricke lauern

(Solltest Du mitten im Dschungel merken, dass jemand mit Ortskunde doch gut wäre, dann melde Dich bei mir - entweder per Kommentarfunktion am Ende des Artikels, per E-Mail oder das Kontaktformular.)

Fangen wir an... 

Vorbereitungen

Bitte stelle sicher, dass Du über folgende Voraussetzungen verfügst:

  • einen Windows-10-Host mit folgenden Eigenschaften:
    • ideal ist eine VM (um regelmäßig Snapshots machen zu können)
    • einem Windows-User, der Admin-Rechte besitzt
    • funktionierendem Internetzugriff
    • idealerweise mit statischer IPv4-Adresse
    • ein Checkmk-Agent kann, muss aber nicht installiert sein (das holen wir an entsprechender Stelle nach)
  • Checkmk in Version 1.6.x
    • Berechtigung, dort MKPs zu installieren
    • Berechtigung, dort Hosts und Regeln anzulegen

Installation und Konfiguration des Windows-Clients

Python für Windows

Eine der wichtigsten Voraussetzungen, um Tests mit Robot Framework ausführen zu können, ist die Installation der Script-Sprache Python, denn Robot selbst ist zu 100% in Python programmiert.

Wir richten im folgenden Abschnitt Python für Windows ein.

Deaktivieren der Windows-Aliase für Python

Windows 10 bringt per default einen Ausführungs-Alias für python.exe mit, der ggf. das Microsoft App Store öffnet und anbietet, hierüber Python zu installieren.

Dieser Ausführungsmodus ist nicht kompatibel mit vielen anderen Anwendungen und lässt diese sang- und klanglos abstürzen, wenn sie versuchen, ein Python-Script mit dem Interpreter "python" aufzurufen. Der Checkmk-Agent ist hier leider keine Ausnahme und verweigert die Ausführung von Python-Scripts dann mit einer wüsten Fehlermeldung im Log, die keinerlei Rückschlüsse auf die Ursache zulässt.

Die Lösung besteht darin, diesen Windows-eigenen App-Alias für python.exe zu deaktivieren. Klicke auf das Startmenü und tippe alias ein - so kannst Du am schnellsten die Einstellung Manage app execution aliases aufrufen:

Am Ende der Liste wirst Du drei Schalter finden, die sich auf Python beziehen:

Setze nun diese drei Schalter auf "Off":

Python-Installation

Nun müssen wir die aktuellste Version des Python-Installers direkt von www.python.org/downloads laden.

Entscheidung mit Folgen: 32 oder 64 Bit? Nun, so tragisch ist es nicht, aber Du musst wissen, Konsequenzen die Wahl der Python-"Bittigkeit" für den weiteren Verlauf hat.

Wenn Dein Windows-System auf 32 Bit fußt, ist die Entscheidung klar: nimm die 32-Bit-Variante. Basiert es auf 64 Bit, kannst Du rein technisch sowohl die 32- als auch die 64-Bit-Version von Python installieren - beide werden korrekt funktionieren (Disclaimer: nur mit der 64-Bit-Version wird es möglich sein, dass Python mehr als 2GB RAM allokiert, aber das spielt für Robot keine Rolle).

Ich empfehle Dir aber, die 64-Bit-Version einzusetzen. Der Grund dafür ist der webdrivermanager, den wir später kennenlernen.

Starte die heruntergeladene Datei, z.b. python-3.8.4-amd64.exe. Folge den Screenshots, um die richtigen Einstellungen zu treffen:

Git für Windows, Clonen des Repositorys

Git für Windows ist alleine schon der Git-Bash (einer GNU-Bash-Portierung für Windows) wegen äußerst praktisch. 

Lade die Installationsdatei von Git for Windows hier herunter und starte sie. 

Der Installations-Assistent von Git for Windows ist zwar sehr umfangreich, aber so gestaltet, dass die empfohlenen Einstellungen bereits vorgewählt sind. Es reicht, den Installer mit "weiter" bis zum Ende durchzuklicken.

Nun wird das Repository geclont, mit dem wir in diese Anleitung arbeiten werden.

Navigiere im Arbeitsplatz auf den Ordner "Dokumente" und rufe mit einem Rechtsklick die Git Bash auf:

In der geöffneten Bash kannst Du nun mit dem folgenden Git-Command die Dateien herunterladen: 

git clone https://github.com/simonmeggle/robotmk-quickstart-windows

Installation der Python-Module

Robot Framework ist, wie oben bereits erwähnt, in Python geschrieben und kann deshalb ganz bequem über den Python-eigenen Mechanismus pip installiert werden. Da wir noch einige andere Python-Module brauchen, habe ich eine Liste davon erstellt und im Repository hinterlegt: sie heißt requirements.txt und befindet sich im Ordner robotmk-quickstart-windows unterhalb des Ordners "Dokumente".

Anstatt pip nun für jedes einzelne Modul auszuführen, geben wir ihm die Datei und pip kümmert sich um den Rest. Die folgenden Befehle führst Du am besten in einem cmd.exe-Kommandozeilenfenster aus, welches Du mit Adminrechten startest:

cd c:\Users\vagrant\Documents\robotmk-quickstart-windows\
## Installiert alle Module in requirements.txt
pip install -r requirements.txt

Warum Adminrechte? Es ist durchaus möglich, die Installation auch mit der cmd.exe des aktuell angemeldeten Users zu starten. Dann landen alle Module aber in Deinem aktuellen Profilpfad. Damit Robot später aufgerufen werden kann, muss dieser Pfad in die Variable %PATH% aufgenommen werden. Die Ausführung von Robot-Tests ist dann auf Deinen User beschränkt, der Checkmk-Agent hingegen läuft im SYSTEM-Kontext. Es wäre nicht sauber, hier mit unterschiedlichen Privilegien zu arbeiten. Deshalb installieren wir die Module in den systemweiten Kontext, der auch der des Checkmk-Agenten ist.

Pro-Tipp "Offline-Installation": Diese eben beschriebene Art der Installation erfordert Internetzugriff. Sollte dieser nicht vorhanden sein, dann kannst Du das auf einer Maschine mit Zugriff ins Netz super vorbereiten. Zunächst lässt Du pip alle Installationsdateien nur herunterladen (anstatt sie zu installieren):

pip download -d offline_files -r requirements.txt

Den Ordner offline_files bringst Du (zusammen mit all den anderen Dateien, z.b. den Python-Installer) auf die Zielmaschine aus. Dort reicht dann folgender Aufruf:

pip install --no-index --find-links offline_files -r requirements.txt

pip sucht alle Dateien, die es herunterladen würde, im Ordner offline_files und installiert die Module von dort. 

Browser

Installiere jetzt die aktuellste version der Browser Firefox und Chrome.

Selenium Webdriver / webdrivermanager

Es wird allmählich konkret: damit der erste Robot-Testcase einen Browser öffnen und steuern kann, muss Robot noch wissen, wie der Browser überhaupt anzusprechen ist. Jeder Browser "tickt" da anders, und deshalb gibt es hierfür spezifische sog. "webdriver". Das sind ausführbare Programme, die zwischen Robot und dem Browser sitzen und die Befehle von Robot (z.B. "go to page") für "ihren" Browser dolmetschen.

Browser

Name des Webdrivers

Firefox

geckodriver

Chrome

chromedriver

Safari

webkit

Internet Explorer

iedriver

Edge

chromiumdriver

Man kann sich diese Webdriver händisch suchen und herunterladen; leichter von der Hand geht das dank des Python-Moduls webdrivermanager.

Es benötigt nur die Angabe, für welchen Browser der Webdriver installiert werden soll und installiert im einfachsten Fall dessen aktuellste Version.

Kleiner Haken: der Pfad, in dem die Webdriver abgelegt werden, ist immer in den Untiefen des User-Profiles versteckt. Wie schon für die Python-Module (s.o.) empfehle ich hier die systemweite Installation, d.h. gleich einen separaten Ordner (z.B. C:\webdriver) für die Webdriver anzulegen und diesen beim Aufruf des webdrivermanagers anzugeben:

## Installation des Webdrivers für Firefox
C:\webdrivermanager --linkpath c:\webdriver firefox
Downloading WebDriver for browser: "firefox"
Driver binary downloaded to: "C:\Users\vagrant\AppData\Local\salabs_\WebDriverManager\gecko\v0.27.0\geckodriver-v0.27.0-win32\geckodriver.exe"
Driver copied to: c:\webdriver\geckodriver.exe
WARNING: Path "c:\webdriver" is not in the PATH environment variable.

Wie die letzte Zeile der Ausgabe schon sagt, muss dieser Pfad zur Systemvariable %PATH% hinzugefügt werden:

  • Rechtsklick auf "Computer" in "Arbeitsplatz" => "Eigenschaften"
  • "Erweiterte Eigenschaften" => "Umgebungsvariablen"

Info: Webdrivermanager ist bei der Prüfung, ob das Installationsverzeichnis in PATH enthalten ist, leider etwas zimperlich und beachtet nicht die Groß-/Kleinschreibung. Achte darauf, dass beides übereinstimmt!

Die Webdriver für Firefox und Chrome benötigten zusätzlich vc_redist.x64.exe, eine Visual C++ Erwieterungsbibliothek. Lade sie bitte direkt von Microsoft (und nur von dort!) herunter:

Microsoft Visual C++ Redistributable für Visual Studio 2015, 2017 und 2019

Reboote die VM nun, damit die Änderung wirksam wird. Dann öffne ein cmd.exe-Fenster und teste wie im folgenden Bild, ob der eben installierte geckodriver.exe von beliebiger Stelle aus startbar ist. Wenn Du die Zeile "Listening on" siehst, funktioniert der Webdriver:

CheckMK Agent

Sofern nicht schon geschehen, kannst Du jetzt von Deinem Checkmk-Server den für das Testsystem passenden Agenten installieren.

Pro-Tipp: An die Installationsdateien Deiner Checkmk-Site kommst Du übrigens auch ganz ohne Authentifizierung über die URL https://cmkserver/sitename/check_mk/agents

Leg die VM spätestens jetzt in WATO als neuen Host an, starte die Inventarisierung und speichere die Änderung. Fahre erst fort, wenn Du siehst, dass die VM mit ihren default-Checks überwacht wird:

Editoren für Robot Framework

Wir nähern uns jetzt Schritt für Schritt der Ausführung von Robot - müssen allerdins noch einen Ausflug in das Thema "Editoren" machen. Du wirst sehen, dass sich dieser Exkurs lohnt!

Überblick

Bei der Wahl des Editors, mit dem Du Robot-Tests schreiben und bearbeiten wirst, bist Du vollkommen frei. Es reicht prinzipiell schon der Windows-Editor.

Ich bin ansonsten zwar auch großer Fan der Kommandozeile, aber in diesem Fall macht ein vernünftiger Editor die Arbeit mit Robot deutlich angenehmer. Meine Empfehlungen hierfür sind:

  • Visual Studio Code - universeller und extrem leistungsfähiger Editor von Microsoft, der mit Plugins erweitert wird.
  • RED - von NOKIA^[(der "Geburtsstätte" von Robot übrigens)] gepflegter, auf Eclipse basierender Editor

Beide nehmen sich nichts und ich empfehle Dir dringend, auch beide auszutesten, denn die Geschmäcker sind verschieden. Im folgenden richten wir VS Code ein.^[Ich habe im RED-Editor einige Keybindings geändert, die das Debuggen angenehmer machen; kontaktiere mich, wenn Du daran Interesse hast.]

Visual Studio Code installieren

Lade Dir also die Installationsdatei von VS Code von dieser Seite herunter: und starte sie.

Am Ende des Installers hast Du die Möglichkeit, VS Code direkt zu starten - tu dies, denn wir installieren jetzt den Robot Framework Language Server - ein Plugin, welches u.a. Syntax-Highlighting, Debugging etc. für Robot-Files anbietet.

Klicke in der linken Seitenleiste auf das "Plugin"-Symbol. Wenn Du nach "robot" suchst, wird der Language Server direkt angeboten. Installiere ihn:

Pro-Tipp: Früher oder später wirst Du unter Robot sowieso einmal mit Python-Files arbeiten; installiere deshalb am besten auch gleich die offizielle "Python"-Erweiterung von Microsoft.

Visual Studio Code einrichten

Füge zunächst das vorhin geclonte Git-Repository in VS Code über "File -> Add Folder to Workspace" hinzu. Die Verzeichnisstruktur links sollte nun etwa so aussehen:

Wenn Du nun doppelt auf die Datei test1/faketest.robot klickst, wirst Du feststellen, dass der Code bereits im Robot-Style eingefärbt ist - die vorhin installierte Erweiterung scheint also den Robot-Code erkannt zu haben und färbt ihn für uns ein.

Auch die Code-Vervollständigung kannst Du jetzt testen: schreibe in einer neuen Zeile slee und drücke anschließend CTRL+SPACE - es öffnet sich daraufhin eine Liste mit Keyword-Vorschlägen:

Natürlich möchten wir auch Robot-Tests ausführen und debuggen. Wie das geschieht, wird in VS Code immer über eine spezielle Datei launch.json geregelt, die wir jetzt anlegen:

  • Öffne links die Debugger-Ansicht
  • Der Text "...create a launch.json file..." zeigt an, dass wir eine solche Datei anlegen können - klicke darauf.
  • Wie Du siehst, ist die Datei noch relativ leer.
  • Platziere den Cursor wie im folgenden Bild gezeigt zwischen die beiden eckigen Klammern und drücke CTRL+SPACE
  • Es sollte sich nun eine Liste an Vorschlägen für Start/Debug-Konfigurationen öffnen - suche nach einem Eintrag {} Robot: Launch .robot file (geht auch über die Eingabe eines Suchstrings)
  • Sobald Du diesen Eintrag auswählst, ergänzt VSC den Rest:

Erste Tests: Run & Debug

Jetzt ist VSC bereit, um den ersten "Fake-Test" zu starten: stelle sicher, dass die Datei faketest.robot im Editor geöffnet ist und drücke den Button mit dem grünen Pfeil oben links:

In der "Debug Console" kannst Du jetzt dem Test bei der Ausführung zusehen: 

Das ging jetzt natürlich sehr schnell; beim Entwickeln von Test möchte man die Ausführung natürlich an bestimmten Stellen anhalten und debuggen; setze jetzt einen Haltepunkt (auch Breakpoint genannt), indem Du in einer beliebigen Zeile links neben die Zeilennummer klickst. Der Breakpoint wird durch einen roten Punkt dargestellt.

Starte den Debugger erneut.

Pro-Tipp: Haltpunkte sind nur in Zeilen mit Keywords (=konkreten Handlungen) zulässig. Ein Haltepunkt in einer "Test"-Zeile ist wirkungslos.

Jetzt wirst Du sehen, dass die Ausführung am Breakpoint anhält und Dir die Gelegenheit gibt, Dich in Ruhe umzusehen. Du kannst nun z.B. unter VARIABLES im Debugger-Fenster links oben sehen, wie die Variablen im Test, aber auch Robot-intern gesetzt sind. Das ist super praktisch und wird Dir in Zukunft viel Zeit sparen!

Folge diesem Link, um zu Teil 2 dieses Tutorials zu gelangen: 

FIXME 

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).

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