Der PowerShellagent wird für die Ausführung eines Testfalls mit PowerShell Skripten benötigt.
Um ein PowerShell-Skript zu einem Testfall hinzuzufügen, öffnen Sie den Bereich Testschritte im Testfall. Hier wechseln Sie auf den Reiter "Automatisierung".
Wenn Sie nun PowerShell auswählen, wird automatisch ein Beispiel PowerShell-Skript eingefügt. In dem Beisepielskript können Sie die Funktionalitäten, welche durch den PowerShell-Agenten zur Verfügung gestellt werden, nachvollziehen. Sie können das Skript dann weiter anpassen oder auch direkt durch andere Skripte ersetzen.
Im Folgenden werden alle Informationen zu den Objekten und Funktionen erläutert, welche durch den PowerShell-Agent für PowerShell-Skripte zur Verfügung gestellt werden:
variables - Array von Objekten, die Testfallvariablen (und ihre Werte) für die Ausführung beinhalten. Name und Value sind die wichtigsten Eigenschaften für VariableValue tempDir - String Variable, die den Pfad des temporären Verzeichnisses enthält, in dem Skriptanhänge gespeichert wurden (wenn vorhanden) aquaCallback - Verweis auf ein Hilfs-Objekt, dass genutzt werden kann, um mit aqua vom PowerShell-Skript zu kommunizieren. Die verfügbare Funktionalität beinhaltet: Senden von Log-Nachrichten nach aqua (auch mit Screenshots) Senden von Anhängen nach aqua (gespeichert als Anhänge im Ausführungsobjekt) Senden von Testausführungs Status über AddExecutionData
Abfragen der Testausführungsinformationen (Ids von Projekt, Testfall, Testausführung, Testszenario, Testszenarioausführung) StopRequest Eigenschaft - wird bei Abbruchanfragen, die von aqua erhalten werden, vom Agenten gesetzt. Lang laufende Skripte sollten dieses Flag periodisch überprüfen und das Skript stoppen, wenn es gesetzt ist. Wenn nicht nach 5 Sekunden gestoppt wird, nachdem dieses Flag gesetzt wurde, terminiert der Agent das laufende Skript selbstständig.
Zum Aufrufen von nunit aus PowerShell können Sie einen Befehl nutzen wie:
$output = & $nunitLocation $testDll --test=$testCaseName 2>&1
Um exponierte Objekte zu nutzen, muss das PowerShell-Skript ihre Benutzung deklarieren, indem der folgende Befehl eingegeben wird:
param($variables, $tempDir, $aquaCallback)
Beachten Sie, dass alle genutzten Variablen in einem einzelnen "param"-Befehl deklariert werden müssen. Ein Beispielskript, dass diese Objekte benutzt:
# Beispiel PowerShell Skript, dass .Net Objekte und Testfallvariablen von aqua benutzt
param($variables, $tempDir, $aquaCallback)
$text = new-object System.Text.StringBuilder
$date = [System.DateTime]::Now
$text.AppendLine($date.ToLongDateString())
$text.AppendLine($date.ToLongTimeString())
echo "$text" > script-sample.log
foreach ($var in $variables)
{
$varName = $var.Name
$varValue = $var.Value
echo "Variable: $varName : $varValue" >> script-sample.log
}
#Abfragen der Testausführungsinformationen über $aquaCallback.GetExecutionInfo()
#Es wird dabei ein Objekt zurückgegeben mit ProjectId, TestCaseId, TestExecutionId, [TestScenarioId and TestScenarioExecutionId]
$executionInfo = $aquaCallback.GetExecutionInfo()
Write-Output "Project ID: $($executionInfo.ProjectId)" >> script-sample.log
Write-Output "TestCase ID: $($executionInfo.TestCaseId)" >> script-sample.log
Write-Output "Execution ID $($executionInfo.TestExecutionId)" >> script-sample.log
Write-Output "Scenario ID (when run in scenario): $($executionInfo.TestScenarioId)" >> script-sample.log
Write-Output "Scenario Execution ID (when run in scenario): $($executionInfo.TestScenarioExecutionId)" >> script-sample.log
# Mögliche Typen von [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]
# SUTError, ScriptExecutionError, PreparationError, ExecutionError, InformationalInfo, InformationalDebug, InformationalWarn, InformationalSuccess
$aquaCallback.SendMessage("hello, I was sent from script", [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalWarn, "my category");
$aquaCallback.SendMessageWithScreenshot("and this is Screenshot", "c:\sample.jpg", [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalWarn, "my category");
dir $tempDir >> script-sample.log
$aquaCallback.AddExecutionAttachment("script-sample.log");
while ($true)
{
if ($aquaCallback.StopRequest)
{
$aquaCallback.SendMessage("Aborting on StopRequest", [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalWarn, "my category");
return "Aborted"
}
Start-Sleep -s 10
aquaCallback.SendMessage("Looping in PowerShell…", [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalWarn, "my category");
}
# Gibt den Status der Testausführung zurück. Mögliche Werte sind: Ready, Blocked, Fail, Aborted
return "Ready"
Datei hochladen
Über den Button Datei hochladen können Sie Dateien zu dem automatisierten PowerShell Schritt hinzufügen, welche dann bei der Ausführung automatisch heruntergeladen und in dem Temp Ordner des Agenten, in dem auch das Skript ausgeführt wird, abgelegt werden. Damit können Sie ganz einfach diese Dateien innerhalb des Skriptes verwenden.
Außerdem können auch Dateien bei der Skriptausführung hochgeladen werden und an die Ausführung angehängt werden. Dies geht über den folgenden Call: $aquaCallback.AddExecutionAttachment("Dateipfad")
Execution Status
In PowerShell haben Sie zusätzlich die Möglichkeit, einen Ausführungsstatus in Form einer Liste von Parametern nach aqua zu senden. Dies hilft in Situationen, wenn die Testausführung sehr lange dauert und Sie einen Zwischenstand in aqua geben möchten, zum Beispiel einen Testfortschritt als Prozent-Wert oder die Anzahl der bereits abgearbeiteten Prüfschritte. Folgender Beispiel-Code zeigt, wie Sie diesen Ausführungsstatus senden können:
# mehrere Werte als Ausführungsstatus auf einmal senden
$attributes = @()
$attribute = New-Object aqua.ProcessEngine.WebServiceProxy.ExecutionDataAttribute
$attribute.AttrName = "dummy"
$attribute.AttrType = [aqua.ProcessEngine.WebServiceProxy.ExecutionDataAttributeType] "Integer"
$attribute.AttrValue = "14"
$attributes += $attribute
$attribute = New-Object aqua.ProcessEngine.WebServiceProxy.ExecutionDataAttribute
$attribute.AttrName = "dummy2"
$attribute.AttrType = [aqua.ProcessEngine.WebServiceProxy.ExecutionDataAttributeType] "String"
$attribute.AttrValue = "HelloWorld"
$attributes += $attribute
# ist der zweite Paramater true, dann wird der komplette Ausführungsstatus ersetzt, andernfalls werden existierende Werte überschrieben oder noch nicht vorhandene Werte ergänzt
$aquaCallback.AddExecutionData($attributes, $true)
# einzelnen Wert als Ausführungsstatus senden
# $aquaCallback.AddExecutionDataString(string name, string value)
$aquaCallback.AddExecutionDataString("Progress", "50%")
# $aquaCallback.AddExecutionDataInteger(string name, int value)
$aquaCallback.AddExecutionDataInteger("No. of Checks", 50)
Übertragung von Informationen zwischen Schritten
Zwei PowerShell-Skripte in unterschiedlichen Testschritten sind zunächst unabhängig voneinander und es können keine Daten aus dem einem Schritt ohne weiteres in einem nachfolgenden Schritt aufgegriffen und weiter verwendet werden. Um dieses Problem zu lösen kann der Ausführungsstatus auch dazu benutzt werden, um Daten aus einem automatisierten Schritt in den nächsten automatisierten Schritt zu überführen und wiederzuverwenden. Die benötigten Methoden sind im Folgenden beschrieben:
# $aquaCallback.GetAllExecutionAttributesInExecution()
$allAttributes = $aquaCallback.GetAllExecutionAttributesInExecution()
# $aquaCallback.GetExecutionAttributeInExecution(string attributeName)
$progress = $aquaCallback.GetExecutionAttributeInExecution("Progress")
# $aquaCallback.GetExecutionAttributeValueInExecution(string attributeName)
$noOfChecks = $aquaCallback.GetExecutionAttributeValueInExecution("No. of Checks")
Hier ein Minimalbeispiel für die Übertragung und Ausgabe von einem String zwischen zwei Schritten:
In Schritt 1:
$aquaCallback.AddExecutionDataString("GeteilteStringVariable","dies ist der Inhalt der String Variable aus Schritt 1")
In Schritt 2:
$aquaCallback.SendMessage($aquaCallback.GetExecutionAttributeValueInExecution("GeteilteStringVariable"),[aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalInfo, "my category");
Der UnixShell-Agent erlaubt es Ihnen, ein Shell-Skript auf einer Remote- Unix (Linux)-Maschine auszuführen. Um den UnixShell-Agenten aufzusetzen, folgen Sie bitte den nächsten Schritten.
Setup
Die folgenden Schritte benötigen grundlegendes Wissen über UnixShell. Für die angegebenen Befehle kann nicht garantiert werden, dass sie auf jeder Unix (Linux) Distribution funktionieren und müssen daher eventuell an Ihre Distribution angepasst werden.
1. Erstellen Sie einen Automatisierungsagenten in aqua und schreiben Sie den Zugriffscode auf (auch bekannt als Agentencode)
2. Überprüfen Sie, ob Java auf Ihrer Unix (Linux)-Maschine installiert ist, z.B. in dem Sie den folgenden Befehl ausführen:
java -version
Das Ergebnis sollte so ähnlich wie im folgenden Screenshot sein:
Wenn Java nicht auf Ihrer Maschine installiert ist, können Sie es installieren, indem Sie dem folgenden Leitfaden für Ihre Unix (Linux) Distribution folgen. Als Alternative können Sie eine Java Laufzeit-Umgebung (JRE) als *.tar.gz Paket herunterladen und dies in einen Ordner Ihrer Wahl entpacken (untar). Die folgenden Befehle sind Beispiele für eine Ubuntu Distribution:
mkdir /usr/java
cd /usr/java
tar zxvf <path-to-your-java-tar.gz>
3. Laden Sie den aqua UnixShell-Agenten auf Ihre Unix (Linux)-Maschine hoch und entpacken Sie diesen in einen Ordner Ihrer Wahl (z.B. indem Sie den Befehl unzip in Ubuntu benutzen, der über sudo apt-get install unzip installiert werden kann).
cd /usr
unzip <path-to-UnixShell-agent-zip-file>
4. Bearbeiten Sie die Datei agent.properties (z.B. mit dem Befehl nano) und ändern die Zeile agentCode (siehe Schritt 1) sowie aquaServiceUrl, sodass der Agent mit Ihrerm aqua Server kommunizieren kann.
cd <path to agent folder>
nano ./agent.properties
Ein Beispiel können Sie hier sehen:
5. Falls Sie java gemäß der Anleitung in Schritt 2 installiert haben oder eine konkrete java-Version benutzen möchten, bearbeiten Sie die Datei agent.sh und passen Sie den Pfad an den Java-Befehl an. Bitte beachten Sie die Option, den Agenten im Fenstermodus laufen zu lassen. Dies kann für Unix (Linux)-Maschinen geeignet sein, die eine GUI installiert haben.
6. Machen Sie die Datei agent.sh ausführbar.
sudo chmod +x ./agent.sh
7. Starten Sie den Agenten, indem Sie agent.sh ausführen.
cd <Pfad zum Agenten-Ordner>
./agent.sh
Wenn eine Exception ausgegeben wird, prüfen Sie bitte noch einmal in der Datei agent.properties, ob agentCode und aquaServiceUrl richtig gesetzt sind.
In aqua sollten Sie einen grünen Indikator für Ihren Agenten sehen.
Shell-Skripte schreiben, die das Ergebnis nach aqua zurückschicken
Um ein UnixShell-Skript in ALM auszuführen, erstellen Sie einen neuen Testfall, öffnen den Schrittplaner und wählen den Tab Automatisierung. Wählen Sie den Testschritt (Klick in das leere Feld des Schritts) und fügen ein neuen UnixShell-Skript hinzu.
Im Skriptbereich des Schritts können Sie nun ein Skript einfügen, welches auf der Remote-Maschine ausgeführt werden soll. Beispiel:
##################
#!/bin/bash
# Einfaches Bash Skript
# Alles, was in die Konsole geschrieben wird, wird zurück an aqua geschickt
echo "Das Skript läuft"
# Zugriff auf die Variable VAR1
echo "$AQUA_VAR1"
# Dateien, die im Unterordner toAttach gespeichert wurden, werden an aqua geschickt (unten sind zwei Beispiele)
# Beispiel 1: Hängen Sie eine Datei test.txt an die Ausführung (touch erstellt eine neue Datei im Unterordner toAttach)
touch ./toAttach/test.txt
# Beispiel 2: Um Dateien hochzuladen, können Sie diese auch in den Unterordner kopieren
# Syntax: cp <Dateipfad> ./toAttach
cp /tmp/screnshot.png ./toAttach
# Geben Sie das Ergebnis der Ausführung zurück: 0 bedeutet Bestanden. Alles andere bedeutet Gescheitert
exit 0
##################
Wenn Sie mit Ihrem Skript fertig sind, können Sie Ihren Testfall speichern und ausführen.
Für die Ausführung wird ein neuer Unterordner im temp-Ordner des Agenten erstellt. In diesem Unterordner wird automatisch ein weiterer Unterordner toAttach erstellt, sodass Sie Anhänge, wie im Beispiel beschrieben, hochladen können. Wenn Sie den temp-Folder nach der Ausführung öffnen wollen, setzen Sie bitte in der Datei agent.properties deleteTempFiles=false und starten Ihren Agenten neu.
Datei hochladen
Über den Button Datei hochladen können Sie Dateien zu dem automatisierten UnixShell Schritt hinzufügen, welche dann bei der Ausführung automatisch heruntergeladen und in dem Temp Ordner des Agenten, in dem auch das Skript ausgeführt wird, abgelegt werden. Damit können Sie ganz einfach diese Dateien innerhalb des Skriptes verwenden.
Außerdem können auch Dateien bei der Skriptausführung hochgeladen und an die Ausführung angehängt werden, wie oben bereits beschrieben.
Einschränkungen
1. Bilder können als Anhänge hochgeladen werden. Es ist jedoch nicht möglich, Bilder so hochzuladen, dass die Bilder direkt im aqua Ausführungs-Log angezeigt werden.
2. Die komplette Ausgabe der Konsole wird in den letzten Schritt des Ausführungs-Logs geschrieben und nicht als mehrere Ausführungs-Logeinträge.
3. Als Konsequenz der Einschränkung 2, können Sie das Log-Level einer einzelnen Ausführungs-Log-Nachricht nicht bestimmen.
Für Interaktionen zwischen aqua und Jenkins, dem bekannten OpenSource-Tool für Continous Integration, hat andagon ein Plugin entwickelt, dass auf Jenkins installiert werden kann und dass es Ihnen erlaubt, Jenkins Jobs von aqua anzusteuern und umgekehrt, Testszenarien in aqua von einem Jenkins Job anzusteuern. Unit Testergebnisse können ebenfalls zurück nach aqua geschickt werden, sodass Sie von der mächtigen Reportfunktion in aqua profitieren. Außerdem können aqua Links von den Kommentaren eines Repository (z.B. Subversion oder Git) geparst und in Jenkins angezeigt werden. Dieses Kapitel beschreibt im Detail, welche notwendigen Schritte erstellt und wie die Integration mit Jenkins konfiguriert werden müssen.
Installation
Hinweis 1: Bevor Sie die Installation des Jenkin-Plugins starten, stellen Sie sicher, dass Sie das richtige Jenkins-Plugin, entsprechend Ihrer aqua und Ihrer Jenkins Installationsnummer haben. Wenn Sie nicht sicher sind, kontaktieren Sie bitte das aqua Support Team.
Hinweis 2: Diese Installationsbeschreibung basiert auf der Jenkins Version 2.73.3 und aqua 18.
Installation des aqua Jenkins Plugins
Das aqua Jenkins Plugins wird nicht über den Jenkins Plugin Store angeboten. Das Jenkins Plugin wird als Datei mit dem Namen "aquaJenkinsPlugin.hpi" geliefert und kann auf der aqua Einstiegsseite heruntergeladen werden. Um dieses Plugin in Jenkins zu installieren, öffnen Sie bitte das Jenkins Dashboard und wählen Jenkins verwalten auf der linken Seite. Dann wählen Sie Plugins verwalten in der Mitte des Fensters.
Auf der Webseite, die sich nun öffnet, wählen Sie bitte den Tab Erweitert und laden das Plugin manuell hoch.
Nach der erfolgreichen Installation, sollten Sie unter dem Installations-Tab einen Eintrag mit dem Namen aquaJenkinsPlugin sehen.
Konfiguration des Jenkins Plugins
Um das Jenkins Plugin von aqua zu konfigurieren, öffnen Sie bitte das Jenkins Dashboard und wählen Jenkins verwalten auf der linken Seite. Dann wählen Sie System konfigurieren in der Mitte des Fensters.
Scrollen Sie zum folgenden Bereich namens aqua Plugin:
Wie Sie im Screenshot sehen können, braucht das Plugin die folgenden Informationen:
Agent code | Ein Agentencode, der das Plugin in Ihrer aqua Installation identifiziert. Erhalten Sie diesen Code, indem Sie aqua öffnen. Machen Sie einen Rechtsklick auf das entsprechende Projekt und wählen Projektkonfiguration -> Automatisierungsagenten. Im sich öffnenden Fenster fügen Sie einen neuen Agenten hinzu, nennen Sie ihn Jenkins (oder ähnlich) und speichern Ihre Einstellungen. |
Agent Webservice URL | Die Webservice URL für aqua Agenten. Sie bekommen diese Informationen von Ihrem Administrator. Sie können diese URL überprüfen, indem Sie sie im Browser öffnen. Sie sollten die Webseite aquaAgentWebservice sehen. |
Agent aktiviert | Dies aktiviert Ihr Jenkins Plugin. |
Main Webservice URL | Die geläufige Webservice URL, um Testfälle zu erhalten. Sie bekommen diese Information von Ihrem Administrator. Sie können die URL überprüfen, indem Sie sie im Browser öffnen. Sie sollten die Webseite MainService sehen. |
aqua Benutzername | Ein gültiger aqua Benutzername, der für die Authentifizierung genutzt wird. |
Passwort | Das entsprechende Passwort für die Authentifizierung. |
Name Ihrer aqua Instanz | Den Namen Ihrer aqua Instanz können Sie herausfinden, indem Sie Ihren aqua Client öffnen. Der Footer zeigt die entsprechende Information, in unserem Fall "aqua". |
Wenn Sie die Einstellungen abgeschlossen haben, speichern Sie diese, indem Sie in Jenkins auf Speichern klicken. Sie können überprüfen, ob Ihre Einstellungen erfolgreich waren, indem Sie den aqua Client öffnen. Machen Sie einen Rechtsklick auf das entsprechende Projekt und wählen Projektkonfiguration -> Automatisierung. Im sich öffnenden Fenster sollte Ihr neu erstellter Agent einen grünen Punkt haben. Bitte vergessen Sie nicht auf den Aktualisieren Button in der Ribbon Bar zu klicken, falls das Agenten-Fenster noch offen war.
Jenkins Jobs von aqua ansteuern
Um einen Job in Jenkins von aqua anzusteuern, erstellen Sie bitte einen neuen Testfall in aqua. Geben Sie Ihrem neuen Testfall einen Namen und öffnen den Schrittplaner über die Ribbon Bar. Nun wählen Sie den Tab Automatisierung und fügen ein neues Jenkins-Skript in den entsprechenden Testschritt ein. Im Eingabefeld namens Skript geben Sie einfach den Namen des Jobs in Jenkins ein.
Wenn Sie fertig sind, speichern Sie Ihren Testfall und führen ihn aus, indem Sie Ihren Jenkins Agenten auswählen.
Hinweis: Wenn Sie Ihren Jenkins-Job parametrisiert haben, dann können Sie Werte von aqua nach Jenkins übergeben, indem Sie den Testfall in aqua ebenfalls parametrisieren. Der Wert wird automatisch an Jenkins übergeben, sofern die Variable den gleichen Namen hat. Im Bild oben wurde der Jenkins-Parameter Environment parametrisiert.
aqua Testjob Trigger: Ausführung von Testszenarien von Jenkins ansteuern
aqua Testszenarien können von Jenkins angesteuert werden. Dies ist ein geeigneter Weg, um Ihre automatisierten Tests in aqua nach einem erfolgreichen Build in Jenkins auszuführen. Um diesen Trigger hinzuzufügen, fügen Sie einen Buildschritt namens aqua Testjob Trigger hinzu. Dieser fügt Ihrem Jenkins Job die folgende Form hinzu:
Wie Sie im Screenshot sehen können, braucht der aqua Testjob Trigger die folgenden Informationen:
TestScenario Id | Die aqua Id des Testszenarios, das Sie ausführen wollen |
Agent Name | Den Standard-Automatisierungsagenten, den das Testszenario benutzen soll (kann leer bleiben, aber stellen Sie sicher, dass jeder Testfall in Ihrem Testszenario einem entsprechenden Agenten für die Ausführung zugewiesen ist, andernfalls wird er scheitern) |
Execute Sequentially | Führt Testfälle Ihres Testszenarios der Reihe nach aus |
Output Path | Ein Jenkins Ausgabepfad für Ihre Testergebnisse, in dem Ergebnisse im Unit-Test-Format gespeichert sind, sodass Jenkins diese ebenfalls anzeigen kann |
aqua Notifier: Schreiben von Unittest-Ergebnissen in aqua
Unittest-Ergebnisse werden in Jenkins angezeigt. Um jedoch Zugriff auf diese Information in aqua zu bekommen, haben Sie die Möglichkeit die Ergebnisse in einen Vorlage-Testfall in aqua zu schreiben.
Der erste Schritt ist es, diesen Testfall in aqua zu erstellen. Öffnen Sie einen neuen Testfall, geben Sie einen Namen ein (z.B. Unit Test Ergebnisse), dann speichern und schließen Sie den Testfall.
Dann öffnen Sie Ihren Jenkins Job, fügen eine neue Postbuild-Aktion namens aqua Notifier ein und geben die Id Ihres aqua Testfalls ein.
Wenn Sie diesen Jenkins Job jetzt ausführen, werden Ihre Unittest-Ergebnisse in Ihren aqua Testfall geschrieben und als neue Ausführung in diesem Testfall gespeichert. Bitte beachten Sie, dass zusätzlich zur Erstellung einer neuen Testausführung die Testbeschreibung und alle Testschritte mit den Informationen aus Jenkins ersetzt werden, und zwar jedes Mal, wenn der Jenkins-Auftrag ausgeführt wird. Folglich werden alle in der Testfallbeschreibung oder den Testschritten gespeicherten Informationen ersetzt. Speichern Sie deshalb die Unit-Testergebnisse nicht in demselben Testfall, der einen Jenkinsjob auslöst!
Sie können außerdem auch den Testfall variabel mitgeben (also z.B. $Testfallvariable), wenn Sie einen parametrisierten Jenkinsjob haben und die Ergebnisse in unterschiedlichen Testfällen in aqua speichern wollen. Hierfür müssen dann natürlich auch alle Testfälle aus den Variabelwerten in aqua existieren.
aqua Links: Anzeige von aqua Links in Jenkins
Das Jenkins Plugin kann commit-Nachrichten von Subversion oder Git analysieren. Wenn der Kommentar einen Link zu einem Element in aqua enthält, wird dieser geparst und in Jenkins angezeigt.
Um aqua Links zu konfigurieren, öffnen Sie Ihren Jenkins Job und fügen eine neue Postbuild-Aktion namens aqua Links hinzu.
Ein Beispiel Jenkins Job, der alle aqua Elemente enthält
Der folgende Screenshot enthält einen Beispiel Jenkins Job mit der Konfiguration von aqua Testjob Trigger, aqua Notifier und aqua Links: