Ich würde davon ausgehen, dass Sie nach dem obigen Szenario auf die PIN innerhalb der Datenbank zugreifen können. In diesem Fall würde ich dem Szenario, das die PIN tatsächlich generiert und bestätigt, einen weiteren Schritt hinzufügen. An diesem Punkt können Sie die PIN in einer lokalen Variablen speichern und sie dann im nächsten Szenario verwenden.
So Ihr erstes Szenario würde wie folgt aussehen:
Get generate PIN page
Enter user name
Enter password
Click on submit button
Confirm PIN number in database
Der letzte Schritt wäre nicht innerhalb von Selen, sondern über einen API-Aufruf oder andere Mittel erfolgen, um die PIN aus der Datenbank zu erwerben. Es würde die PIN (z. B. regex=/^\d{4}$/
) bestätigen und dann in einer lokalen Variablen speichern, sagen wir etwas wie @customer_pin
(vorausgesetzt, Sie verwenden Ruby).
Ihr nächstes Szenario wäre in etwa so beginnen:
Get generate login page
Enter customer ID
Enter customer PIN
etc
Wenn Sie die „Kunden-PIN eingeben“ Hit Schritt, ziehen Sie es aus dem lokal gespeicherten Variablen (@customer_pin
).
Mein Rat ist, dass Sie bei der Ausführung dieses zweiten Szenarios bestätigen, dass Sie eine gültige PIN in Ihrer lokal gespeicherten Variablen haben, falls jemand dieses Szenario nicht in der richtigen Reihenfolge ausführen sollte. Sie können dies tun, indem Sie eine globale Variable und einen „Vorher“ Haken in Ihrer features/support/env.rb
Datei wie folgt ausgeführt werden:
In diesem Fall
Before do
$dunit ||= false
return if $dunit
$customer_pin = nil
$dunit = true
end
, verwende ich $customer_pin
statt @customer_pin
, um die Variable global zugänglich zu machen. Dann würde nach dem Ausführen Ihres ersten Szenarios $customer_pin
einem legitimen Wert zugewiesen werden, damit es in beliebigen nachfolgenden Szenarios verwendet werden kann. Nachfolgende Szenarien würden den Regex-Ausdruck verwenden, um zu bestätigen, dass er einen legitimen Wert hat, und eine Ausnahme auslösen/werfen, falls dies nicht der Fall ist.
Ihr Vorschlag basiert auf der Ausführungsreihenfolge von Szenarien und basiert auf dem Erfolg eines Szenarios. Ich rate davon ab, eine Ausführungsorder anzunehmen und von anderen Szenarien einen Erfolg zu erwarten. Es ist ein bekanntes Anti-Muster. –
Im Allgemeinen stimme ich zu, aber wie die meisten Dinge im Leben ... es kommt darauf an. Der obige Fall kann ein schlechtes Beispiel für eine gute Ausrede sein, um ein Programmierungsmuster zu brechen, so dass Ihre Bedenken gut aufgenommen werden. Aber manchmal bremse ich Muster im Geiste des größeren Guten. Beispielsweise kann das Ausführen kleinerer Tests als Sprungbrett für größere Tests zweckmäßiger und weniger invasiv sein als das Wiederholen der Hintergrundeinstellungen für jeden Test. –