Cucumber 重复specflow中的步骤

Cucumber 重复specflow中的步骤,cucumber,bdd,specflow,Cucumber,Bdd,Specflow,我有一个关于Specflow的长场景,我需要添加3个用户,所有步骤都是一样的。如何在流程中重复几个步骤 场景大纲:向多个用户注册 我需要重复这些步骤 停止重复并完成场景 单击“继续”按钮时 然后3个用户应该在列表中您可以从另一个步骤中调用步骤。在steps类中继承TechTalk.SpecFlow.steps类,如下所示 public sealed class RegisterMultipleUsersSteps : Steps { ... } 好的,那么为什么这有帮助呢?现在,您可以将创

我有一个关于Specflow的长场景,我需要添加3个用户,所有步骤都是一样的。如何在流程中重复几个步骤

场景大纲:向多个用户注册 我需要重复这些步骤 停止重复并完成场景 单击“继续”按钮时
然后3个用户应该在列表中

您可以从另一个步骤中调用步骤。在steps类中继承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 '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
我假设您已经完成了创建具有已创建的个人凭据的用户的步骤,因为您在问题中列出了这些凭据

在该功能的步骤类中,您以前继承了等级库流步骤类,请执行以下操作

[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网站的某个地方和其他地方都有记录。其想法是,如果您需要的不仅仅是这些,那么您应该拆分您的测试,或者可以合并一些功能


我希望以上内容有所帮助。

您可以从另一个步骤中调用步骤。在steps类中继承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 '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
我假设您已经完成了创建具有已创建的个人凭据的用户的步骤,因为您在问题中列出了这些凭据

在该功能的步骤类中,您以前继承了等级库流步骤类,请执行以下操作

[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”注册到事件时,单击“个人”

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

我所做的一切似乎对我来说都很好

将多个用户“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();             
            }
        }

不完全确定您需要做什么,使用场景大纲将重复您说过要重复的所有步骤。你举的例子,对你不适用吗?我想说的是,对于一个场景,您似乎有很多步骤,如果您在自己的feature steps类上继承了steps类,那么您实际上可以在一个步骤中执行其他步骤。问题是,作为此代码的结果,我收到了3个不同的测试,而我只需要1个测试,而不需要重写相同的步骤,我需要在长流程中重复我的工作。在一次执行中,我需要创建3个用户。如果用户创建只需要一个步骤,那就很容易了,但是创建一个用户需要5个步骤,我需要再次重复这5个步骤。而不是以正常方式继续执行。哦,好的,我会写一个答案,可能有助于不完全确定您需要做什么,使用场景大纲将重复您说过要重复的所有步骤。你举的例子,对你不适用吗?我想说的是,对于一个场景,您似乎有很多步骤,如果您在自己的feature steps类上继承了steps类,那么您实际上可以在一个步骤中执行其他步骤。问题是,作为此代码的结果,我收到了3个不同的测试,而我只需要1个测试,而不需要重写相同的步骤,我需要在长流程中重复我的工作。在一次执行中,我需要创建3个用户。如果用户创建只需要一个步骤,那就很容易了,但是创建一个用户需要5个步骤,我需要再次重复这5个步骤。然后以正常的方式继续执行。哦,好的,我会写一个答案,可能会有帮助。我永远不会选择从另一个步骤调用一个步骤,即使可能。我要做的是将所需的功能提取到一个公共助手中,并使用该助手。从台阶上喊台阶会让你走上一条混乱的道路,就我个人而言,我会不惜一切代价避免它。@ThomasSundberg够公平的,我发现它对我们很有效,我们在helper函数中拥有大部分功能,但是我们希望通过在多个步骤中以相同的顺序调用相同的函数来减少重复代码,但是只有一个小的更改,我们发现嵌入的步骤a
这种方法对我们很有效。我认为否决票有点不公平,因为以上是一个合法的解决方案。谢谢大家的回答。那么@tags呢,也许通过调用@tag可以重用场景?找不到标签如何帮助我避免混淆场景的清晰解释,我永远不会选择从另一个步骤调用一个步骤,即使可能。我要做的是将所需的功能提取到一个公共助手中,并使用该助手。从台阶上喊台阶会让你走上一条混乱的道路,就我个人而言,我会不惜一切代价避免它。@ThomasSundberg够公平的,我发现它对我们很有效,我们在helper函数中使用了大部分功能,但是我们希望通过在多个步骤中以相同顺序调用相同的函数来减少重复代码,但是只有一个小的更改,我们发现嵌入式步骤方法对我们很有效。我认为否决票有点不公平,因为以上是一个合法的解决方案。谢谢大家的回答。那么@tags呢,也许通过调用@tag可以重用场景?找不到标签如何帮助我避免混淆场景的清晰解释