我有一个黄瓜特征文件'A',用作设置环境(数据清理和初始化)。我希望在所有其他功能文件可以运行之前执行它。
就像http://zsoltfabok.com/blog/2012/09/cucumber-jvm-hooks/中的@before一样。但是,这不起作用,因为我的功能文件'A'包含数百个黄瓜步骤,并不像以下那样简单:
@Before
public void beforeScenario() {
tomcat.start();
tomcat.deploy("munger");
browser = new FirefoxDriver();
}
相反,最好能够将“A”作为整体运行作为特征文件。
我已经四处寻找但没有找到答案。我很惊讶以前没有人有这种要求。我发现最接近的是'背景'。但这意味着我只能有一个巨大的功能文件,其顶部是“A”的内容,而我的测试的其余部分位于同一个文件中。我真的不想这样做。
有什么建议吗?
答案 0 :(得分:0)
默认情况下,Cucumber功能按顺序运行单线程:
然后在特征文件中按顺序执行场景。
所以在第一个目录(alhpabetically)中有一个初始化功能,其文件名首先(按字母顺序)在该目录中排序。
话虽如此,要求在功能文件中执行订单通常是一种不好的做法。我们并行运行我们的功能文件,因此顺序毫无意义。对于Jenkins或TeamCity,您可以添加一个构建步骤来执行一个功能文件,然后执行第二个构建步骤来执行其余的功能文件。
答案 1 :(得分: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()
通过这种方式,您可以方便地将参考设置表示为场景,增强团队沟通,但您也可以获得稳定的测试设置。
希望这有用! 阿形