2013-01-10 21 views
1

我已經設置了SpecFlow來執行一些Selenium測試來測試網站。這一切工作正常!在SpecFlow和Selenium的功能設置中指定登錄

我只是在考慮是否有可能在SpecFlow功能的結構化方面進行一些優化。

特定功能中的所有場景都應使用相同的登錄名。這是我現在在StepDefinition中使用[BeforeScenario()]鉤子硬編碼的東西,因爲我並不真正想用登錄信息污染場景。這與測試無關。

但與此同時,我想刪除硬編碼部分,並將其移入我的功能。

我的問題是兩部分。

  1. 我可以在我的功能說明中指定登錄憑證嗎?有點像一個給定:

    Feature: As a user I want to be able to see my ongoing orders, and interact with them. 
    Given I am logged in with username abc and password xyz 
    
    Scenario: See list of ongoing order 
    Given I place an order 
    When I navigate to MyOrders page 
    Then I can see at least one order in the list 
    
  2. 這是好的做法?

    在我的意思是在功能級別上這樣做是否有意義。這些場景不依賴於特定的順序,如果我不需要登錄每個場景,它們的執行速度會更快。

感謝您的輸入。

回答

2

當我第一次看了你的帖子,我想到了Dan North: Who's domain is it anyway?以及影響我認爲我們應該嘗試寫我們的測試之前發生了什麼以便他們堅持一個單一的知識領域。當你在列表中討論特定的用戶和導航以及訂單時,就像他給出的例子一樣,你的規範正在跨域。這種導致我幾乎不會使您的規範更具體,即不是關於導航和檢查列表,您是否有訂單!

方案:請參見鑑於我在登錄時的用戶名ABC和密碼XYZ 我下定單 那麼至少應該有一個順序

我想給你舉個例子鏈接正在進行爲了 的名單,到一個我找不到的帖子,通過實際定義一些示例用戶和提供測試的價值來討論團隊獲得的好處。因此,在您的業務領域,您可能會有一位名爲Jack的用戶在系統中下了一個大訂單,另一個潛在客戶Jill沒有訂單。通過這種方式測試,如

Given I am Jack 
When I search for my orders 
Then I will find 1 

Given I am Jill 
When I search for my orders 
Then I will find 0 

可以保證你只測試你的搜索功能,而不是關於如何獲得設置。

我還建議你看看Liz Keogh: Acceptance Criteria vs Scenarios誰斷言更一般的寬泛的定義比非常具體的例子不值錢。 (這是規格按例所有:-)後)

因此,要回答你的問題,我認爲有指定的用戶是個好東西,但做起來它是如何你正在做標題非常複雜的路由。

+0

感謝AlSki, 這正是我在想什麼,但不知道如何用語言表達......,正如你所知道的,我不知道如何把這個變成場景。 我們實際上有大約12個不同的示例用戶,其名稱與您的建議相同。他們沒有登錄,但他們是我們用來討論不同場景的。當你提到這件事時,這些碎片就會落到位! 當然這是我應該使用的。我可能必須發明更多的用戶,以考慮我想測試的所有不同場景。但這是有道理的! 謝謝! –

+0

Liz的博文也很棒!我喜歡這種區別。 –

2

對於所共有的一個功能,您可以使用背景的所有場景步驟:

Feature: As a user I want to be able to see my ongoing orders, and interact with them. 

    Background: 
    Given I am logged in with username abc and password xyz 

    Scenario: See list of ongoing order 
    Given I place an order 
    When I navigate to MyOrders page 
    Then I can see at least one order in the list 

的背景步驟太多的濫用是一種不好的習慣,因爲它引入了您的場景之間的耦合。

另一種解決方案是將登錄部分直接放入您的「我下單」步驟。 這將刪除所有關於登錄信息的噪音,因爲它暗示您需要登錄才能下訂單。

我也建議稱之爲「我下了訂單」而不是「我下了訂單」。 給出的步驟是一般先決條件描述使用functionnality時(步驟)

+0

曙光網絡您好,感謝您的回覆!雖然這在技術上是我要求的,但我選擇標記AlSki的答案是正確的,因爲它描述了我應該做的事情。它完美匹配我的需求。 –