我有以下几个功能来测试某些数据处理的结果。
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
有没有办法在幕后执行此操作并按照第一种情况显示报告?
我正在考虑某种方式告诉黄瓜先运行所有给定的场景,然后再运行所有场景。
答案 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步骤中查询保存的结果。