Cucumber 先运行所有给定步骤,然后再运行步骤

Cucumber 先运行所有给定步骤,然后再运行步骤,cucumber,cucumber-jvm,Cucumber,Cucumber Jvm,我有如下几个特性来测试一些数据处理的结果 功能:A 情景:A1 给定我加载数据A2 那么A1的输出是输出\u A1 情景A2 给定我加载数据A2 那么A2的输出是输出_A2 我想先加载所有数据,然后像下面那样检查输出,因为这样速度更快 给定我加载数据A2 给定我加载数据A2 那么A1的输出是输出_A1 那么A2的输出是输出_A2 有没有办法在幕后完成这项工作,并像第一个案例那样提交报告 我在想办法告诉cucumber先运行所有给定的场景,然后再运行所有场景。cucumber实际上没有区分

我有如下几个特性来测试一些数据处理的结果


功能:A
情景:A1 给定我加载数据A2 那么A1的输出是输出\u A1
情景A2 给定我加载数据A2 那么A2的输出是输出_A2

我想先加载所有数据,然后像下面那样检查输出,因为这样速度更快


给定我加载数据A2
给定我加载数据A2
那么A1的输出是输出_A1 那么A2的输出是输出_A2

有没有办法在幕后完成这项工作,并像第一个案例那样提交报告


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

cucumber实际上没有区分给定的关键字和Then关键字,所以你不能告诉cucumber先运行所有给定的场景

您可以将场景设置为在所有其他场景之前运行:

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

如果给定步骤只是检查数据是否正在加载,则应使用背景设置测试的上下文。顺便说一下,您缺少示例中的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(Cucumber注释)钩子中完成,如果您希望在每个场景之前加载数据,或者在您的Runner类中,在@BeforeClass(JUnit注释)中完成,以便在所有测试之前加载数据

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

@RunWith(Cucumber.class)
@CucumberOptions(format = "pretty")
public class RunCukesTest {

  @BeforeClass
  public void setUp(){
    // Load data A2
  }
}

希望这能有所帮助。

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

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

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

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

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

谢谢你的回答,Kyle,但是我想像第一个特性那样显式地显示报告。