【问题标题】:repeat steps in specflow在 specflow 中重复步骤
【发布时间】:2017-04-07 13:04:21
【问题描述】:

我的 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 个用户

【问题讨论】:

  • 不完全确定您需要做什么,使用场景大纲将重复您说要重复的所有步骤。你举的例子,这对你不起作用吗?我想说的是,对于一个场景,您似乎有很多步骤,如果您在自己的功能步骤类上继承“步骤”类,您实际上可以在一个步骤中执行其他步骤
  • 问题是我收到了 3 个不同的测试作为这段代码的结果,而我只需要 1 个测试,而不是重写相同的步骤,我需要重复我在长流程中的一部分.
  • 在一次执行中,我需要创建 3 个用户。如果用户创建是 1 个步骤,这将很容易,但是创建 1 个用户需要 5 个步骤,然后我需要再次重复这 5 个步骤,然后再一次。然后以正常方式继续执行。
  • 哦,好的,我会写一个可能有帮助的答案

标签: cucumber bdd specflow


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以从另一个步骤中调用步骤。在您的步骤类中继承 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 网站和其他地方的负载上都有记录。这个想法是,如果你需要更多,你应该拆分你的测试或者可以合并一些功能。

    希望以上内容有所帮助。

    【讨论】:

    • 我永远不会选择从另一个步骤调用一个步骤,即使可能。我要做的是将所需的功能提取到一个公共助手中,然后使用该助手。从步骤中调用步骤将导致您走上一团糟的道路,就个人而言,我会不惜一切代价避免它。
    • @ThomasSundberg 很公平,我发现它对我们很有效,我们的大部分功能都在辅助函数中,但我们希望通过在多个步骤中以相同的顺序调用相同的函数来减少重复代码,但是只有 1 个小改动,我们发现嵌入式步进方法对我们很有效。我认为downvote有点不公平,因为上面是一个合法的解决方案
    • 感谢大家的回答。那么@tags 呢,也许可以通过调用@tag 来重用场景?找不到明确的解释标签如何帮助我不重复场景
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2014-05-17
    • 2011-07-16
    相关资源
    最近更新 更多