RobotMK: ImageHorizonLibrary headless

Hi,

Ich habe eine Frage zu RobotMK in Kombination mit der Image Horizon Library:

Ich habe mir einen Debian-11-Client mit Gnome für meine Robot-Tests aufgesetzt.
Mein robot-File für den Image-Check ist schon fertig und es funktioniert auch schon, aber das Problem ist, dass mit ImageHorizon tatsächliche Screenshots der X11-Oberfläche gemacht werden und die Robot-eigene Screenshot-Funktion, die auch Bilder von headless Browsern machen kann, hier nicht funktioniert.

Das an sich wäre gar kein Problem, weil ich statt
robot tsplus.robot
den Test auch mit einer virtuellen X11-Umgebung laufen lassen kann:
xvfb-run robot tsplus.robot

Damit läuft das Ganze dann doch wieder headless.
Nur wie kann ich RobotMK nun dazu überreden, dass es diesen veränderten Aufruf durchführt?

Vielleicht kann mir @simonm oder jemand anderer dabei helfen?

LG,
Roland.

PS: ich möchte hier ein Tool namens TS-Plus prüfen, was ähnlich wie Citrix einen Desktop im Browser präsentiert und somit keine HTML-Elemente abgefragt werden können. Nur falls jemand wissen will, warum ich diese Library verwende.

Hi @rolandg ,

das Problem ist, dass mit ImageHorizon tatsächliche Screenshots der X11-Oberfläche gemacht werden

Jupp, das ist korrekt. Es braucht ein Anzeigedevice, von der die Library (genauer gesagt: pyautogui/openCV) einen Abzug macht und dort das Referenzbild sucht.

und die Robot-eigene Screenshot-Funktion, die auch Bilder von headless Browsern machen kann, hier nicht funktioniert.

Falls Du diese hier meinst - auch die hängt von einer Anzeigekonsole ab.
Was Du meinst, sind vermutlich die Screenshot-Funktionen der Selenium/Browser(playwright)-Libraries. Das sind keine “echten” Screenshots, sondern nur ein gerendertes Bild des Browsers. Das ist nicht exakt das, was man sehen wurde, aber kommt dem sehr nahe.

Zu Deinem Problem: das lässt sich denke ich lösen:

  • Erstell eine Bakery-Regel und setze den Modus auf “external”. Damit wird Robotmk nicht mehr vom Agenten aus gestartet.
  • Backen, deployen/updaten
  • Das Starten von robotmk-runner.py ist jetzt Aufgabe eines cronjobs, den Du anlegen musst. Was der startet, kannst Du frei bestimmen, z.b. xvfb-run /usr/bin/python3 /usr/lib/checkmk-agent/bin/robotmk-runner.py.
  • Der Runner liest aus der robotmk.yml-Datei, welche Suites ausgeführt werden sollen und startet sie in der XVFB-Session.
  • Das robotmk.py-Plugin ist der “Kurzläufer” - der holt nur die JSON-Files mit den Ergebnissen ab und liefert sie agenten-kompatibel aus.

Untested :slight_smile:

Ich hoffe, das hilft!
vg
Simon

2 Likes

Danke das hat funktioniert.

Tatsächlich habe ich die interne Browser(playwright)-Library-Funktion gemeint, die Browser-Bilder rendert.

Für alle Leser, die das vielleicht auch umsetzen möchten:
Der korrekte Pfad zum Runner ist:
/usr/bin/robotmk-runner.py

Und für alle, die ImageHorizon unter Linux nicht zum Laufen bringen: Nutzt eine aktuelle Distribution, die noch X11 verwendet (z.B. Debian 11), damit scrot funktioniert und installiert zusätzlich mit pip3 das Paket pillow. Hier eine vollständige Liste an Paketen, die ich installiert habe:

apt install task-gnome-desktop python3-dev python3-pip nodejs npm python3-xlib python3-tk scrot xvfb python3-opencv
pip3 install robotframework robotframework-playwright robotframework-browser playwright mergedeep robotframework-imagehorizonlibrary eel mock pillow
rfbrowser init

:slight_smile:

Ach ja, noch ein Tipp für angehende ImageHorizon-Nutzer:

Bei mir wurden die Referenz-Bilder einfach nicht gefunden, weil ich diese auf meinem eigenen Client erstellt hatte. Ich habe dann stattdessen die “failed screenshots” benutzt und dort den Teil, der mich interessiert hat, ausgeschnitten. So habe ich ein pixel-identisches Referenz-Bild bekommen.

1 Like

Hi Roland,
danke fürs Feedback und die Doku.
Frage: Warum führst Du playwright install aus? rfbrowser init reicht meines Wissens für die komplette Installation.
vg
Simon

Stimmt, rfbrowser init reicht.
Ich habe das in meinem Post korrigiert.

1 Like