Die folgende Auflistung beschreibt die Funktionen der einzelnen Komponenten, die benötigt werden, um m23-Funktionen automatisiert mit autoTest durchzuführen. Bis auf den Virtualisierungsserver können die Komponenten in VMs installiert werden. Prinzipiell könnten z.B. Virtualisierungsserver, HTTP2SeleniumBridge und der autoTest-Steuersystem auf derselben (physikalischen) Maschine laufen.
Ein m23-Server, der autoTest ausführt und die anderen Systeme (Virtualisierungsserver, HTTP2SeleniumBridge und (indirekt) den zu testenden m23-Server) steuert.
settings.m23test
anpassenVBoxManage
virtuelle Maschinen anlegen und starten kann. Dazu den Benutzer in die Gruppe vboxusers
aufnehmen. Den SSH-Schlüssel des autoTest-Skript-Benutzers importieren.m23-Server: paßwortloser Zugriff vom autoTest-ausführenden Benutzer auf root per SSH oder sudo?
echo /usr/sbin/nodm > /etc/X11/default-display-manager
apt install -y HTTP2SeleniumBridge_*_all.deb
reboot
Ein m23-Server, der verwendet wird, um einen m23-Client zu installieren. Wird von der HTTP2SeleniumBridge über die m23-Weboberfläche gesteuert.
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<testcase>
<constant>
<TEST_TYPE>VM</TEST_TYPE>
<VM_RAM>1024</VM_RAM>
<VM_HDSIZE>8192</VM_HDSIZE>
</constant>
<cli>
<VM_NAME description="Name der VM"></VM_NAME>
<OS_PACKAGESOURCE description="Paketquellenliste"></OS_PACKAGESOURCE>
<OS_DESKTOP description="Desktop"></OS_DESKTOP>
</cli>
<sequence>
<test timeout="180" description="Client anlegen">
<trigger type="sel_hostReady"></trigger>
<action type="sel_open">${TEST_M23_BASE_URL}/index.php?page=addclient%26clearSession=1</action>
<action type="sel_typeInto" ID="ED_login">test</action>
<action type="sel_selectFrom" ID="SEL_boottype">pxe</action>
<action type="sel_setCheck" name="CB_getSystemtimeByNTP">0</action>
<action type="sel_selectRadio" name="SEL_ldaptype">read</action>
<action type="sel_clickButton" name="BUT_submit"></action>
<good type="sel_sourcecontains">$I18N_client_added</good>
<warn type="sel_sourcecontains">unwichtig</warn>
<bad type="sel_sourcecontains">$I18N_addNewLoginToUCSLDAPError</bad>
</test>
<test timeout="600" description="VM erstellen und starten">
<trigger type="true"></trigger>
<action type="fkt">AUTOTEST_VM_create</action>
<action type="fkt">AUTOTEST_VM_start</action>
<good type="ocr">|{Warte|minutes}</good>
</test>
</sequence>
</testcase>
Die einzelnen Zeilen sind folgendermaßen aufgebaut, wobei die Begriffe Tag, Attribut und Parameter verwendet werden:
`<Tag Attribut1="..." Attribut2="...">Parameter</Tag>`
Die Konstanten und weitere Einstellungen stehen in der globalen Datei settings.m23test
sowie der aktuellen m23test-Datei. settings.m23test
wird zuerst im Heimatverzeichnis und dann im aktuellen Verzeichnis gesucht.
http://192.168.1.153:23080
tuxedo
vboxmanage
zum Erstellen, Starten, etc. aufruft.enp3s0f1
/media/vms/
https://god:m23@192.168.1.143/m23admin
TEST_M23_BASE_URL
extrahierte IP-Adresse.aa:bb:cc:dd:ee:ff:00:11
aabbccddeeff0011
Beispiel:
<constant>
<TEST_TYPE>VM</TEST_TYPE>
<VM_RAM>1024</VM_RAM>
<VM_HDSIZE>8192</VM_HDSIZE>
</constant>
Ein Testblock umfaßt immer alle Teile eines Tests. timeout
(in Sekunden) gibt an, wie lange auf den Trigger und das Abschließen durch ein good-Tag gewartet werden soll. Nach Überschreiten um mehr als zwei Minuten wird eine Warnung ausgegeben, nach mehr als 5 Minuten wird das Skript mit einem Fehler abgebrochen.
description
ist die Beschreibung, die in den Logdateien vermerkt wird.
Die einzelnen Teile werden folgendermaßen abgearbeitet:
Die good/warn/bad-Tags werden immer wieder durchlaufen, bis eine Bedingung zutrifft. bad
führt zum Abbruch, die anderen (nur) zu einem Eintrag in die Logdatei und Ausführen des nächsten Testblocks.
Die im cli
-Block definierten Tags müssen in derselben Reihenfolge auf der Kommandozeile angegeben werden. Der jeweilige Tag-Name wird als Konstante gespeichert und kann in den Ersetzungen verwendet werden. VM_NAME
wird intern für die Aufrufe von einige Funktionen z.B. AUTOTEST_VM_keyboardWrite
oder AUTOTEST_sshTunnelOverServer
verwendet und muß in den meisten Fällen angegebn werden.
Das Attribut description
ist die Beschreibung des jeweiligen Tags/Kommandozeilenparameters, die ausgegeben wird, wenn nicht die korrekte Anzahl an Parametern übergeben wird.
Beispiel:
<cli>
<VM_NAME description="Name der VM"></VM_NAME>
<OS_PACKAGESOURCE description="Paketquellenliste"></OS_PACKAGESOURCE>
<OS_DESKTOP description="Desktop"></OS_DESKTOP>
</cli>
Innerhalb des Parameters können Teile ersetzt oder für Suchen verwendet werden:
${...}
: "..." wird durch den Wert einer vorher definierte Konstante ersetzt.|{str1|str2|str3}
: str1 ... str3 sind alternative Zeichenketten, von denen beim Vergleichen nur eine übereinstimmen muß.$I18N_...
: Wird nacheinander durch die Übersetzungen in allen Sprachen ersetzt und jeweils verglichen.Wird ausgelöst, wenn HTTP2SeleniumBridge unter der TEST_SELENIUM_URL
erreichbar ist
Wird ausgelöst bzw. sendet eine Nachricht, wenn der Parameter im aktuellen HTML-Quelltext des Selenium-Browsers gefunden wird.
Selenium-Aktionen benötigen (überwiegend) das Attribut ID
oder name
für die Identifikation des HTML-Element, auf das sie angewendet werden sollen.
Klickt auf einen Button.
Öffnet eine URL im Browser.
${TEST_M23_BASE_URL}/index.php?page=addclient%26clearSession=1
. Hierbei müssen einige Zeichen URL-kodiert angeben werden (z.B: '&' => '%26').Wählt ein Element aus einer Drop-Down-Liste.
Wählt ein Element eines Radiobuttons.
Setzt oder entfernt den Haken einer Checkbox.
, ...).
Führt über den Umweg über den m23-Server (Konstante: TEST_M23_IP
) auf der VM (Konstante: VM_NAME
) einen Befehl aus und überprüft, ob in der Ausgabe der gewünschte Text vorhanden ist.
cmd
: Kommando, das auf dem Zielsystem ausgeführt werden soll.Sendet eine Tastensequenz (Text) an die VM (Konstante: VM_NAME
). Nichtdruckbare Tasten (z.B. Enter
) werden in "°" eingeschlossen. z.B. °enter°.
Erstellt einen Screenshot der laufenden VM (Konstante: VM_NAME
) und versucht den Text mit verschiednene gocr
-Parametern zu erkennen. Wird im erkannten Text der Parameter gefunden, so wird der Trigger ausgelöst bzw. eine Nachricht gesendet.
Führt unter CAutoTest::executePHPFunction aufgelistete Funktionen aus.
Wird sofort ausgelöst.
In HTTP2SeleniumBridge.py sind zusätzlich folgende Kommandos implementiert, die aber nicht in CAutoTest.php verwendet werden: