2017-04-07 94 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来重用场景呢?无法找到清晰的解释标签如何帮助我不要公开场景 –

相关问题