Verwendung von Variablen in Testfällen
Motivation
Bei der Erstellung automatisierter Tests kann es notwendig werden, Werte für eingetragene Daten aus Variablen zu beziehen statt sie fest in den Test einzutragen. Außerdem kann es die Lesbarkeit erhöhen, wenn beim Umgang mit mehreren verknüpften Datensätzen etwa deren Kurzname über eine Variable referenziert statt überall dupliziert wird.
Definition einer Variable
Variablen müssen vor ihrer Verwendung im Test deklariert und definiert werden. Dies ist auf Ebene des Testfalls möglich. Die Syntax dazu lässt sich am einfachsten mit folgendem Beispiel erklären:
class MyTestWithVariables extends BaseWebClientSpec {
@Shared
def myCustomerName = "Testkunde für meine Tests"
@Shared def myActivityName = "Name meiner Testaktivität"
// Hier folgen die Testschritte
}
Dabei ist die Angabe von @Shared erforderlich, damit der Wert der Variable in allen Testschritten ordnungsgemäß verfügbar ist. Die Angabe von @Shared kann wie im Beispiel gezeigt eine Zeile über der Variablendeklaration oder in der gleichen Zeile erfolgen. In diesem Beispiel sind in der Testklasse dadurch die Variablen myCustomerName mit dem Wert "Testkunde für meine Tests" und myActivityName mit dem Wert "Name meiner Testaktivität" verfügbar.
Nutzung einer Variable
Variablen können an allen Stellen im Test genutzt werden, wo normalerweise feste Zeichenketten erwartet werden. Beispiele dafür sind etwa erwartete Werte für Feldwertprüfungen oder Werte, die in Felder eingetragen werden sollen.
Die Verwendung erfolgt dabei durch die Eingabe von ${variablenName}-Platzhaltern innerhalb der Anführungszeichen der Zeichenkette. Dabei wird dann der Platzhalter durch den Wert der angegebenen Variable ersetzt. Auch eine Kombination aus festen Werten und Variablenplatzhaltern ist möglich, wie das nächste Beispiel zeigt.
class MyTestWithVariables extends BaseWebClientSpec {
@Shared def activityName = "Testaktivität"
def "Demonstrate variable usage on Activity mask"() {
given:
open entity "Activity"
create dataset
set field "Subject.Activity" to "${activityName}"
field "Subject.Activity" should be "Testaktivität"
set field "Subject.Activity" to "Meine ${activityName}"
field "Subject.Activity" should be "Meine Testaktivität"
close level
pick dialog option NO
}
}
Bei der Verwendung von Variablen muss darauf geachtet werden, dass sie stets mit einem Kleinbuchstaben beginnen, wie in dem vorherigen Beispiel "activityName".
Anwender mit Scripting-Erfahrung, etwa durch die Arbeit mit BPM-Scripting oder Maskenscripting fragen sich möglicherweise, ob die Variablen auch "direkt" im Test-Script verwendet werden können, statt immer über die String-Ersetzung verwendet werden zu müssen.
Leider ist dies aufgrund der technischen Basis der Test-Studio "Programmiersprache" beziehungsweise Domain Specific Language (DSL) nicht zuverlässig möglich. In den meisten Fällen wird die Verwendung von Variablen außerhalb von Strings in Verbindung mit Test-Studio Keywords zu Fehlern beziehungsweise unerwartetem Verhalten führen und wird daher nicht unterstützt.
Besondere Variablen
Generierende Variablen
generate unique identifier
>=24.3
Generiert einen eindeutigen Bezeichner, um diesen Variable anschließend in den Testschritten verwenden zu können.
Beispiel
@Shared
def myIdentifier = generate unique identifier
@Shared
def myName = "myName $myIdentifier"
generate unique IBAN
>=24.3
Generiert eine eindeutige IBAN.
Beispiel
@Shared
def myIban = generate unique IBAN
Datumsvariablen
resolve current date
>=24.3
Ermittelt das aktuelle Datum des Systems.
Dies kann zu einem Fehler führen, wenn die Variable um 11:59:50 ermittelt wird, der Testfall jedoch z. B. eine neue Aktivität um 12.01:10 erstellt und dann versucht das Erstelldatum der Aktivität mit der Variable zu vergleichen. Darüber hinaus wird das Datum des Systems ermittelt, wo das Test-Studio gestartet wurde. Wenn ein Server in einer anderen Zeitzone zum Testen genutzt wird, kann es ebenfalls zu Fehlern kommen. (Sehr unwahrscheinlich)
Ab >=25.1 gibt es weitere Datumskonstanten (Details siehe unten).
Beispiel
@Shared
def currentDate = resolve current date
resolve "dateConstant" adding "relativeDate"
>=25.1
Ermöglicht die Verwendung von dynamischen Datumsangaben.
Fährt man mit der Maus im Editor über das Datumskonstrukt, wird der daraus berechnete Datumswert angezeigt.
Beispiel
@Shared
def myDATE = resolve "08.02.2024" adding "4d"
set field "TestDate.TestEntity" to "${myDATE}"
field "TestDate.TestEntity" should be "12.02.2024"
Datumskonstanten
Möglichkeit zur dynamischen Abbildung von häufig genutzten Datumswerten in Abhängigkeit zum Systemdatum, wie beispielsweise dem ersten Tag eines aktuellen Monats. Sie werden mit dem Keyword “resolve” eingeleitet. Folgende Datumskonstanten sind ab 25.1 verfügbar:
first of current monthlast of current monthfirst of next monthlast of next monthfirst of current yearlast of current yearfirst of next yearlast of next year
Beispiel
@Shared
def fiCuMo = resolve first of current month