我有一个Cucumber功能文件'A',它是设置环境(数据清理和初始化)。我想在所有其他功能文件运行之前执行它。
就像@before的挂钩一样,如http://zsoltfabok.com/blog/2012/09/cucumber-jvm-hooks/。但是,这不起作用,因为我的功能文件" a"包含数百个黄瓜步骤,并且不像:
那样简单。@Before
public void beforeScenario() {
tomcat.start();
tomcat.deploy("munger");
browser = new FirefoxDriver();
}
相反,最好能够将" A"作为一个整体运行。
我已经四处搜索,但没有找到答案。我很惊讶,以前没有人有这种要求。
我发现的最接近的是"背景"。但这意味着我只能拥有一个巨大的功能文件,其中顶部的内容为" A"为"背景",然后在同一文件中的其余测试。我真的不想那样做。
有什么建议?
默认情况下,cucumber功能是按顺序运行的单线线程:
- 按功能文件目录按字母顺序排列
- 按目录中的功能文件名按字母顺序排列
场景执行是在功能文件中按顺序执行的。
因此,您的初始化功能在第一个目录中(算法)在该目录中首先(字母内)对文件名进行了。
。说,在您的功能文件中需要执行订单通常是不好的做法。我们并行运行功能文件,因此顺序是毫无意义的。对于Jenkins或TeamCity,您可以添加一个构建步骤,该步骤执行一个功能文件,然后是第二个构建步骤,该步骤执行您的其余功能文件。
我也有一个项目,其中有一个单个功能文件,其中包含一个非常长的Scenario: Test data
场景,具有许多很长的方案,例如:
Given the system knows about the following employees
|uuid|user-key|name|nickname|
|1|0101140000|Anna|annie|
... hundreds of lines like this follow ...
我们认为,这种长系统的方案是非常有价值的,因此我们的测试人员,产品所有者和开发人员具有系统中数据的基线。我们的域非常复杂,我们需要参考数据的基线,以便每个人都能够理解测试。(这些参考数据几乎像众所周知的角色一样,是一个共同的团队隐喻)
一开始,我们依靠字母命名约定,首先运行AAA。
。稍后,我们发现此设置很脆弱,并决定使用以下技巧,灵感来自PageObject模式:
与单行
Given(~'^I set test data for all feature files$')
添加背景在步骤定义中,有一个工厂来创建测试数据,并确保在Factore方法内,仅创建一次,例如
testFactory.createTestData()
以这种方式,您既有将参考设置作为方案表示的便利,从而增强了团队交流,但是您也具有稳定的测试设置。
希望这有帮助!agata