Selenium-Jobs mit Timern

Funktion

Dieses Plugin dient zum Testen von Webanwendungen mithilfe des Selenium-Frameworks. Es führt RobotFramework- oder Python-basierte Tests auf einem Headless-Chrome-Browser aus, der sich auf einem Kollektor befindet, wartet auf den Abschluss der Ausführung, ruft anschließend die generierten Protokolldateien ab und zeigt sie auf einer Übersichtsseite an.

Alarmierung

Laufzeit, Antwortcode, Ergebniscode

Allgemeine Informationen zum Selenium-Job

Selenium-Projekte können entweder mit RobotFramework oder in Python erstellt werden.

Um Selenium-Projektdateien auf externen Kollektoren verfügbar zu machen, müssen die SKOOR-SyncFS-Dienste konfiguriert und in Betrieb sein. Der Benutzer „reranger“ muss so konfiguriert sein, dass er sich ohne Passwort anmeldet, wie im Replikationshandbuch beschrieben.

RobotFramework

Eine Robot-Datei wird unter Verwendung des Headers aus /opt/eranger/Kollektor/robot.robot generiert und um die in der Engine bereitgestellte Datei ergänzt. Nur in besonderen Fällen möchte der Benutzer möglicherweise eine vollständige Robot-Datei bereitstellen. Eine gute Informationsquelle zu den Möglichkeiten ist das RobotFramework-Benutzerhandbuch. Robot-Dateien werden im Verzeichnis /opt/eranger/Kollektor/upload/ abgelegt

Abschnitt „Informationen“ in der Jobkonfiguration:

Die Chrome- oder Firefox-Erweiterung „Katalon Recorder“ kann verwendet werden, um einen Testablauf aufzuzeichnen und den Testfall-Teil zu exportieren (Format: Robot Framework).

Beispielskripte:

Eine einfache Robot-Datei könnte dann wie folgt aussehen:

    [Teardown]    Run Keyword If Test Failed    Capture Page Screenshot
    Set Window Size    ${1920}    ${1200}
	Start Timer		totalTime
	Start Timer		Open
	Goto    https://my.great.business.com/
	Stop Timer 		Open
	click	link=Business
	sleep	3s
    Stop Timer		totalTime

Ein fortgeschritteneres Skript mit mehreren Timern und TRY/EXCEPT-Blöcken:

    Start Timer    TotalTime

    Start Timer    Open
    TRY
        Goto    https://my.great.business.com/
        Stop Timer    Open
    EXCEPT
        Capture Page Screenshot
        Error Timer     Website unavailable
        ErrorCode Timer    11
        Stop Timer    Open
    END
    
    Start Timer    Contact
    TRY
        click    link=Contact
        Stop Timer    Contact
    EXCEPT
        Capture Page Screenshot
        Error Timer     Contact link failed
        ErrorCode Timer    22
        Stop Timer    Contact
    END	
    sleep    2s

    Start Timer    Home
    TRY
        click    link=Home
        Stop Timer    Home
    EXCEPT
        Capture Page Screenshot
        Error Timer     Home link failed
        ErrorCode Timer    33
        Stop Timer    Home
    END
    sleep    2s

    Stop Timer    TotalTime

Python

Die Python-Module „Selenium“ und „SKOOR“ für Selenium-Webtests sind auf den SKOOR Collectors vorinstalliert. Python-Skripte können entwickelt und direkt mit dem Plugin verwendet werden, sobald sie fertiggestellt sind. Zusätzlich kann die Selenium-IDE zum Aufzeichnen von Anwendungsfällen verwendet werden. 

Informationsbereich in der Jobkonfiguration:

Beispielskript: Zunächst werden die erforderlichen Module importiert und die Browserparameter festgelegt. Anschließend wird der SKOOR-Timer „totalTime“ gestartet und ein Testschritt in einem try/except-Block mit einem zweiten Timer, „step1“, ausgeführt. Auf diese Weise können Timer konfiguriert und später in der SKOOR Engine verwendet werden.

#!/usr/bin/python3
import sys, time, skoor, traceback
from skoor import SkoorTimer, Variables, SkoorScreenshot

from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

opts = ChromeOptions()
opts.add_argument("--headless=new")
opts.add_argument("--no-sandbox")
opts.add_argument("--disable-setuid-sandbox")
opts.add_argument("--disable-gpu")
opts.add_argument("--allow-running-insecure-content")
opts.add_argument("--disable-extensions")
opts.add_argument("--ignore-certificate-errors")
opts.binary_location = os.getenv("SKOOR_PUPPETEER_CHROME_EXECUTABLE")

cap = DesiredCapabilities().CHROME
cap["marionette"] = True

driver = webdriver.Chrome(chrome_options=opts)

skoor.setLogLevel(skoor.INFO)
driver.set_window_size(1920,1200)

totalTime = SkoorTimer("TotalTime")
step1 = SkoorTimer("Step 1")

totalTime.start()

try:
    step1.start()
    skoor.log(skoor.INFO, "Search started")
    driver.get("https://xyz.com")
    driver.find_element_by_id("html-element1")
    skoor.log(skoor.INFO, "Step 1 done")
    step1.stop()
        
except:
    skoor.log(skoor.ERROR, traceback.format_exc())
    SkoorScreenshot().capture(driver)
    step1.error(-2, "Step 1 failed")

totalTime.stop()
driver.quit()

skoor.log(skoor.INFO, "Script done")

Wurde die Selenium-IDE zur Aufzeichnung eines Testfalls verwendet, kann der Inhalt der Funktion „test_<NAME>“ in einen „try“-Block des Python-3-Skripts kopiert werden:

  def test_dict(self):
    self.driver.get("https://dict.leo.org/englisch-deutsch/")
    self.driver.set_window_size(1515, 948)
    self.driver.find_element(By.LINK_TEXT, "Forum").click()

 Falls von der Selenium IDE zusätzliche Python-Module wie „by“ oder „key“ verwendet wurden, müssen diese Module ebenfalls in den Import-Abschnitt des endgültigen Skripts aufgenommen werden:

#!/usr/bin/python3
import sys, time, skoor, traceback
from skoor import SkoorTimer, Variables, SkoorScreenshot

from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
 
...


Es ist wichtig, dass der Befehl `driver.quit()` in jedem Fall ausgeführt wird. Andernfalls kommt es zu einem Ressourcenleck!

Selenium-Gerät

Beim Erstellen eines Selenium-Geräts wird der folgende Bildschirm mit den Konfigurationsoptionen angezeigt:


Das Selenium-Plugin wird in einem Headless-Browser direkt auf dem ausgewählten Kollektor ausgeführt. 

Selenium-Job-Parameter

Parameter

Beschreibung

Laufzeitlimit

Geben Sie die Zeit an, die für die Ausführung des Projekts zur Verfügung stehen soll. Dies hängt davon ab, was das Projekt tut. Dieser Parameter ist optional; ein Wert von 0 oder ein leeres Feld bedeutet, dass überhaupt kein Zeitlimit festgelegt wird.

Suite-Name

Wenn eine vollständige Robot-Datei mit „Einstellungen“ usw. bereitgestellt wird, wird diese unverändert ausgeführt. In der Regel ist nur der Teil „Testfall“ erforderlich. In einem solchen Fall wird der Header aus /opt/eranger/Kollektor/robot.robot übernommen.

Selenium-Eigenschaften

Parameter

Beschreibung

Selenium-Option

Über diese Eigenschaft können Escape-Sequenzen und andere Optionen festgelegt werden.

Selenium-Variable

In dieser Eigenschaft können Variablen für die Robot-Datei definiert werden, z. B. INFO:info oder TIMEOUT:0

Details zum Selenium-Timer

Genauso wie Timer-Jobs zu EEM-Projekt-Jobs hinzugefügt werden, können Timer-Jobs unterhalb eines Selenium-Jobs hinzugefügt werden. Der einzige Parameter ist der Name des Timers. 

Timer, die einen Start- und einen Stopp-Eintrag enthalten (generiert entweder durch „Timer stoppen“ oder „Timer pausieren“), gelten als erfolgreich.

Die folgenden Schlüsselwörter stehen für die Verwendung von Timern in der Robot-Datei zur Verfügung

  • Start Timer $name

  • Timer anhalten $name

  • Timer fortsetzen $name

  • Timer stoppen $name

Selenium-Timer-Parameter

Parameter

Beschreibung

Timer-Name

Bei einem Selenium-Timer-Job können nur der Jobname und der Timer-Name konfiguriert werden. Der Name des Jobs kann sich vom Timer-Namen unterscheiden, aber der Timer-Name muss mit dem in der Robot-Datei angegebenen Timer-Namen übereinstimmen.

Selenium-Timer-Werte und Alarm Limits

Wert / Alarm Limit

Beschreibung

Laufzeit

Die Laufzeit dieses bestimmten Timers

Ergebniscode

 0 = OK – 1
= Nicht ausgeführt – 2
=
Fehlgeschlagen – 3 = Beendet, aber nicht gestartet – 4
= Timer-Name leer – 5
= Selenium-Fehler

Fehlercode

Allgemeiner Job-Fehlercode (siehe Abschnitt „Job-Fehlercodes“)

Selenium-Ergebnisse

Nach einem Lauf des Plugins sieht der Abschnitt „Werte“ des Selenium-Jobs wie folgt aus:

oder im Falle eines Fehlers während der Ausführung:

Ein Klick auf den Link „Ergebnisdateien“ im Abschnitt „Werte“ öffnet den folgenden neuen Browser-Tab:

Diese Seite bietet einen Überblick über die durchgeführten Tests und deren Ergebnisse. Für jeden Durchlauf, bei dem von der SKOOR Engine Protokolle erfasst wurden, gibt es eine Zeile mit einem Zeitstempel und einem Link zur entsprechenden Ergebnisdatei. Wenn während eines Durchlaufs Fehler aufgetreten sind, wird der Link in der Spalte „Fehlgeschlagene Tests“ angezeigt, zusammen mit einem Screenshot (sofern vom Skript erstellt) und den fehlgeschlagenen Timern. Dies gibt in der Regel einen guten Einblick, warum ein Testdurchlauf fehlgeschlagen ist. 

Ein Klick auf die „Berichtsdatei“ im Abschnitt „Werte“ öffnet eine HTML-Seite, die eine Übersicht über die Ausführungsergebnisse sowie einen Link zu einer detaillierteren HTML-Berichtsdatei enthält (dieselbe Datei, auf die auch direkt im Abschnitt „Werte“ zugegriffen werden kann).

Selenium-Werte und Alarm Limits

Wert / Alarm Limit

Beschreibung

Laufzeit

Die Laufzeit des Plugins

Ergebniscode

 0 = OK – 1
= Allgemeiner Fehler – 10
= Ausführung fehlgeschlagen – 11
= Parameter fehlt – 12
= Robot-Datei nicht gefunden – 13
= Selenium fehlgeschlagen

Fehlercode

Generischer Job-Fehlercode (siehe Abschnitt „Job-Fehlercodes“)