运行所有黄瓜给定步骤然后步骤

时间:2014-12-16 15:30:47

标签: cucumber cucumber-jvm

我有以下几个功能来测试某些数据处理的结果。

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

有没有办法在幕后执行此操作并按照第一种情况显示报告?

我正在考虑某种方式告诉黄瓜先运行所有给定的场景,然后再运行所有场景。

3 个答案:

答案 0 :(得分:2)

Cucumber实际上并没有区分Given和Then关键字,所以你不能告诉黄瓜先运行所有的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

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

答案 1 :(得分:0)

您应该使用背景来设置测试的上下文。顺便说一下,你错过了你的例子中的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注释)中加载它之前所有的测试。

但要小心这最后一个选项,因为很容易误用它。要加载你的灯具,你应该使用常规给定,背景或前钩子,而不是@BeforeClass注释,以保持场景的清洁和独立。

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

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

希望这有帮助。

答案 2 :(得分:0)

黄瓜是这种东西的错误工具。而是为数据处理编写单元测试。

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

如果必须使用Cucumber来执行此操作,那么要将所有编程推送到步骤定义中。所以你最终得到了类似

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

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