重复 specflow 中的步骤

repeat steps in specflow

我的 Specflow 场景很长,我需要添加 3 个用户,所有步骤都是一样的。我怎样才能重复流程中的几个步骤?

场景大纲:注册多个用户

Given Go to page
#Login
And Click on sign in button
When Enter email 'mail@gmail.com'
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 | mail1@mail.com | Person1    | Person1   |
| Person 2 | mail2@mail.com | Person2    | Person2   |
| Person 3 | mail3@mail.com | Person3    | Person3   |

停止重复并完成场景

当点击继续按钮时 那么3个用户应该在列表中

您可以从另一个步骤中调用步骤。在您的步骤中 class 像这样继承 TechTalk.SpecFlow.Steps class;

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 'mail1@mail.com'
 When i create user 'Person2' 'Last name 2' with email 'mail2@mail.com'
 When i create user 'Person3' 'Last name 1' with email 'mail3@mail.com'
 ...
 Then Some condition

我假设你已经有了创建用户的步骤,因为你已经在你的问题中列出了个人凭据。

在您为此功能执行的步骤 class 中,您之前继承了规范流程步骤 class 执行类似以下的操作

[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 网站和其他地方的负载上有记录。这个想法是,如果你需要的不止于此,你应该拆分你的测试或者可以合并一些功能。

希望以上内容对您有所帮助。

我所做的并且对我来说似乎工作正常

当注册多个用户 '3' 到活动点击 'Person'

[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();             
            }
        }