2017-04-07 87 views
1

我有Specflow的長場景,我需要添加3個用戶,所有的步驟都是一樣的。我如何重複流程中的幾個步驟?在specflow中重複步驟

方案概述:與多個用戶註冊

Given Go to page 
#Login 
And Click on sign in button 
When Enter email '[email protected]' 
And Enter password '123456' 
And Click on Submit button 
And click on Events list button 
And Open Event 
And Go to new opened page  
And Click on Register to event button 

我需要重複

When Click on Person title '<title>'  
And Select ticket package 
And Select ticket quantity '15' 
And Click on submit registration button 
And Enter mail <email> to register to event 
And Enter first name <first name> to register to event 
And Enter last name <last name> to register to event 
And Click on submit registration button 
And Click on submit registration button 
Examples: 
| title | email   | first name | last name | 
| Person 1 | [email protected] | Person1 | Person1 | 
| Person 2 | [email protected] | Person2 | Person2 | 
| Person 3 | [email protected] | Person3 | Person3 | 

停止重複這些步驟和完成情況

當點擊Continue按鈕 然後3用戶應在列表中

+0

不能完全確定你需要做的,使用情況概要重複你說你想重複的所有步驟。你給的例子,這不適合你嗎? 我會說它看起來像你有一個單一的場景很多步驟的方式,如果你繼承了你自己的功能步驟類 – Sirk

+0

上的「steps」類,你實際上能夠在一個步驟內執行其他步驟我正在接受3個不同的測試,因爲這個代碼的結果是我只需要1次測試,而不是重寫相同的步驟,我需要重複只是我在長流程中。 –

+0

在一次執行中,我需要創建3個用戶。如果用戶創建步驟爲1步,則很容易,但創建1個用戶需要5個步驟,而我需要再次重複這5個步驟。而不是以正常的方式繼續執行。 –

回答

3

我做了什麼,而且似乎對我工作的罰款

當註冊多個用戶「3」事件點擊「人」

[When(@"Register multiple users '(.*)' to event click on '(.*)'")] 
     public void WhenRegisterMultipleUsersToEventClickOn(int userQty, string title) 
     { 
      for (int i = 1; i <= userQty; i++) 
      { 
       WhenClickOnPersonTitle(title + " " + i); 
       WhenSelectTicketPackage(); 
       WhenSelectTicketQuantity(10); 
       WhenClickOnSubmitRegistrationButton(); 
       WhenEnterMailToRegisterToEvent("mail" + i + "@mai.com"); 
       WhenEnterFirstNameToRegisterToEvent("Name" + i); 
       WhenEnterLastNameToRegisterToEvent("Lastname" + i); 
       WhenClickOnSubmitRegistrationButton(); 
       WhenClickOnSubmitRegistrationButton();    
      } 
     } 
0

您可以致電從另一個步驟開始。在你的步驟中,類繼承TechTalk.SpecFlow.Steps類;

public sealed class RegisterMultipleUsersSteps : Steps 
{ 
    ... 
} 

好吧,那爲什麼這對您有幫助?那麼你現在可以調用的5個步驟來創建一個用戶爲一個步驟,所以做類似下面

Scenario Outline: Register With Multiple Users 
Given Go to page 
... 
When i create user 'Person1' 'Last name 1' with email '[email protected]' 
When i create user 'Person2' 'Last name 2' with email '[email protected]' 
When i create user 'Person3' 'Last name 1' with email '[email protected]' 
... 
Then Some condition 

我假設你已經有了步驟來創建,因爲你上市已經創建的個人證書的用戶他們在你的問題。

在您使用此功能,您先前繼承了規範流程步驟類步驟類做類似下面

[When(@"I create user (.*) (.*) with email (.*)")] 
public void WhenICreateUserTitleNameSurnameWithEmailAddress(var firstName, var lastName, var emailAdd) 
{ 
    // Now because you inherited the specflow steps class 
    // you can call other steps that you already have  
    When(string.Format("Enter mail {0} to register to event", emailAdd)); 
    When(string.Format("Enter first name {0} to register to event", firstName)); 
    When(string.Format("last name {0} to register to event", lastName)); 
    When("Click on submit registration button"); 
} 

這使您可以更輕鬆地創建一個用戶沒有塞滿您的情況太多了。你也可以合併更多的步驟。

附註:我認爲用gerkhin語言編寫的普遍接受的標準是保持功能儘可能簡單,通常不超過5個步驟,這被記錄在specflows網站和其他地方的負載。這個想法是,如果你需要更多的東西,你應該分解你的測試或者可以合併一些功能。

我希望上面的幫助。

+0

即使可能,我也決不會選擇從另一步調用一步。我會做的是將所需的功能提取到一個通用的幫助器中,然後使用該幫助器。從步驟調用步驟會導致你陷入糾結混亂的路徑,並且我會避免不惜一切代價。 –

+1

@ThomasSundberg足夠公平,我發現它適合我們,我們大部分的功能都是在輔助函數中,但是我們希望通過多個步驟以相同的順序調用相同的函數來減少重複的代碼,但只有一個小的變化,我們發現嵌入式步驟方法對我們來說效果很好。我認爲downvote是一個有點不公平,因爲上述是一個合法的解決方案 – Sirk

+0

感謝球員的答案。那麼@tags怎麼樣,也許可以通過調用@tag來重用場景呢?無法找到清晰的解釋標籤如何幫助我不要公開場景 –

相關問題