Skip to main content
Skip table of contents

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:

CODE
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.

CODE
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

CODE
@Shared
def myIdentifier = generate unique identifier

@Shared
def myName = "myName $myIdentifier"

generate unique IBAN

>=24.3

Generiert eine eindeutige IBAN.

Beispiel

CODE
@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

CODE
@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

CODE
@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 month

  • last of current month

  • first of next month

  • last of next month

  • first of current year

  • last of current year

  • first of next year

  • last of next year

Beispiel

CODE
@Shared
def fiCuMo = resolve first of current month
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.