如何在Cucumber-JVM中运行一个功能文件作为初始化(即在所有其他功能文件之前)



我有一个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功能是按顺序运行的单线线程:

  1. 按功能文件目录按字母顺序排列
  2. 按目录中的功能文件名按字母顺序排列

场景执行是在功能文件中按顺序执行的。

因此,您的初始化功能在第一个目录中(算法)在该目录中首先(字母内)对文件名进行了。

说,在您的功能文件中需要执行订单通常是不好的做法。我们并行运行功能文件,因此顺序是毫无意义的。对于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

最新更新