【问题标题】:Run all Cucumber Given steps before Then steps在 Then 步骤之前运行所有 Cucumber Given 步骤
【发布时间】:2014-12-24 09:07:27
【问题描述】:

我有几个像下面这样的功能来测试一些数据处理的结果。

Feature: A
Scenario: A1 Given I load data A2 Then output is for A1 is output_A1
Scenario A2 Given I load data A2 Then output is for A2 is output_A2

我想先加载所有数据,然后再检查输出,如下所示,因为它要快得多。

Given I load data A2 Given I load data A2
Then output is for A1 is output_A1 Then output is for A2 is output_A2

有没有办法在幕后执行此操作并像第一种情况一样呈现报告?

我在想办法告诉 cucumber 先运行所有 Given 场景,然后再运行所有 Then 场景。

【问题讨论】:

    标签: cucumber cucumber-jvm


    【解决方案1】:

    Cucumber 实际上并不区分 Given 和 Then 关键字,因此您不能告诉 cucumber 先运行所有 Givens。

    您可以设置一个场景在所有其他人之前运行:

    Scenario: Load data
      Given the Data Exists
      Then I load all the Data
    

    您在其中加载以下场景的所有数据

    Scenario: A1
      Given the A1 data is loaded
      Then the output for A1 is output_A1
    

    给定的步骤只是检查数据是否正在加载

    【讨论】:

    • 感谢凯尔的回答,但我想像第一个功能一样明确显示报告。
    【解决方案2】:

    您应该使用背景来为您的测试设置上下文。顺便说一下,你错过了示例中的 When 步骤。在When是你的行动发生的地方。

    Feature: A
    
    Backgroud:
      Given I load data A
    
    Scenario: A1
      When whatever A1
      Then output is for A1 is output_A1
    
    Scenario: A2
      When whatever A2
      Then output is for A2 is output_A2
    

    虽然你描述的行为可以在@Before(黄瓜注释)钩子中完成,如果你想在每个场景之前加载数据,或者在你的Runner类中,在@BeforeClass(JUnit注释)之前加载它所有的测试。

    但要小心最后一个选项,因为它很容易被误用。为了加载您的固定装置,您应该使用常规给定、背景或前钩子,而不是 @BeforeClass 注释,以保持您的场景干净和独立。

    @RunWith(Cucumber.class)
    @CucumberOptions(format = "pretty")
    public class RunCukesTest {
    
      @BeforeClass
      public void setUp(){
        // Load data A2
      }
    }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      Cucumber 是这种事情的错误工具。而是为数据处理编写一个单元测试。

      因为单元测试是用编程语言实现的,所以很容易预加载所有数据,按特定顺序运行等等。

      如果您必须使用 Cucumber 来执行此操作,则要做的是将所有编程向下推到步骤定义中。所以你最终会得到一个类似于

      的场景
      Scenario: Run the A tests
        When I run the A tests
        Then I should get no errors
      

      现在您可以在 When 步骤中进行数据加载和循环,并在 Then 步骤中查询保存的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-20
        • 2019-11-19
        • 1970-01-01
        • 1970-01-01
        • 2019-08-11
        相关资源
        最近更新 更多