1

我有一个黄瓜功能文件'A',用作设置环境(数据清理和初始化)。我想在所有其他功能文件可以运行之前执行它。

这有点像http://zsoltfabok.com/blog/2012/09/cucumber-jvm-hooks/中的@before hook 。但是,这不起作用,因为我的功能文件“A”包含数百个黄瓜步骤,它并不像以下那样简单:

@Before
public void beforeScenario() {
    tomcat.start();
    tomcat.deploy("munger");
    browser = new FirefoxDriver();
}

相反,最好能够将“A”作为一个整体文件运行。

我四处寻找,但没有找到答案。我很惊讶以前没有人有这种要求。

我发现最接近的是“背景”。但这意味着我只能有一个巨大的功能文件,其内容为“A”作为顶部的“背景”,而我的其余测试则在同一个文件中。我真的不想那样做。

有什么建议么?

4

2 回答 2

0

默认情况下,Cucumber 功能按以下顺序单线程运行:

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

然后在功能文件中按顺序执行场景。

因此,在第一个目录(按字母顺序)中使用您的初始化功能,文件名在该目录中首先(按字母顺序)排序。

话虽如此,在功能文件中要求执行顺序通常是一种不好的做法。我们并行运行我们的功能文件,因此顺序毫无意义。对于 Jenkins 或 TeamCity,您可以添加执行一个功能文件的构建步骤,然后添加执行其余功能文件的第二个构建步骤。

于 2016-12-10T23:09:58.903 回答
0

我还有一个项目,我们有一个功能文件,其中包含一个非常长的场景,其中包含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 ... 

我们认为这个较长的 SystemKnows 场景非常有价值,因此我们的测试人员、产品负责人和开发人员对系统中的数据有一个基线。我们的领域非常复杂,我们需要这个参考数据基线,以便每个人都能理解测试。(这些参考数据变得几乎像众所周知的角色,并且是共享团队的隐喻)

一开始,我们依赖字母命名约定,首先运行 AAA.feature。

后来,我们发现这个设置很脆弱,并决定使用以下技巧,受 PageObject 模式的启发:

  • 用单行添加背景Given(~'^I set test data for all feature files$')

  • 在步骤定义中,有一个工厂来创建测试数据,并确保在 factore 方法中,它只创建一次,比如testFactory.createTestData()

这样,您既可以方便地将参考设置表达为场景,从而增强团队沟通,又可以拥有稳定的测试设置。

希望这有帮助!阿加塔

于 2016-12-15T01:13:10.567 回答