2016-12-14 126 views

回答

0

我會假設你可以在上述場景之後訪問數據庫中的PIN碼。既然如此,我會在獲得並確認PIN確實生成的場景中增加一步。此時,您可以將PIN存儲在本地變量中,然後在下一個場景中使用它。

所以,你的第一個場景是這樣的:

Get generate PIN page 
Enter user name 
Enter password 
Click on submit button 
Confirm PIN number in database 

最後一步不會被內硒完成,但通過API調用或一些其他手段獲取從數據庫中的PIN碼。它會確認PIN(例如:regex=/^\d{4}$/),然後將其存儲在局部變量中,比如@customer_pin(假設您使用的是Ruby)。

你的下一個情景就開始是這樣的:

Get generate login page 
Enter customer ID 
Enter customer PIN 
etc 

當你點擊「輸入客戶PIN」的步驟,你在本地存儲的變量(@customer_pin)拉出。

我的建議是,在執行第二種情況時,您確認在本地存儲的變量中有合法的PIN,以防某人按順序運行此場景。您可以通過使用全局變量,並在您features/support/env.rb文件中運行「前」掛鉤這樣做:

Before do 
    $dunit ||= false 
    return if $dunit 
    $customer_pin = nil 
    $dunit = true 
end 

在這種情況下,我爲了使全局變量來訪問使用$customer_pin代替@customer_pin。然後,在運行第一個場景後,$customer_pin將被分配到一個合法值,以便可以在任何後續場景中使用它。後續場景將使用正則表達式來確認它具有合法值,如果不是,則引發/拋出異常。

+0

您的建議是基於場景的執行順序並依賴於場景的成功。我會建議不要假設執行順序,並期望從其他場景獲得成功。這是衆所周知的反模式。 –

+0

總的來說,我同意,但像生活中的大多數事情一樣......這取決於。上述案例可能是打破編程模式的良好藉口的糟糕例子,因此您的關注很受歡迎。但有時候我會本着大好事的精神破除模式。例如,將較小的測試作爲墊腳石進行較大的測試可能比爲每個測試重複背景設置更有利並且侵入性更小。 –

0

我會將你的問題分成兩部分。

因爲這可能對您的利益相關者非常重要。

一個實現後門以支持需要有效PIN的其他情況。也許一個能夠生成或檢索有效PIN碼的API。也許可以在不接觸外部系統的情況下創建PIN並將其存儲在數據庫中。我會用這種方式來檢索PIN碼,只要我需要一個有效的PIN碼用於其他場景。

關於如何獲取有效PIN碼的技術解決方案並不太重要。重要的是分離場景的執行順序。場景的執行順序未定義。每個場景都必須能夠以獨立和隨機的順序執行。

耦合場景是衆所周知的反模式herehere