在特定功能之前/之后执行Cucumber步骤

时间:2013-09-17 17:43:19

标签: java cucumber cucumber-jvm

我想为每个特定功能文件指定某些设置和拆除步骤。我已经看到了允许代码在每个场景之前执行的钩子,并且钩子在每个功能之前执行代码,但我想指定在一个特定功能运行所有场景之前和之后运行一次的代码。

这可能吗?

4 个答案:

答案 0 :(得分:15)

如果您使用junit来运行测试。我们使用注释来创建单元测试类和单独的步骤类。标准@Before的内容在steps类中,但@BeforeClass注释可以在主单元测试类中使用:

@RunWith(Cucumber.class)
@Cucumber.Options(format = {"json", "<the report file"},
    features = {"<the feature file>"},
    strict = false,
    glue = {"<package with steps classes"})
public class SomeTestIT {
    @BeforeClass
    public static void setUp(){
       ...
    }

    @AfterClass
    public static void tearDown(){
       ...
    }
}

答案 1 :(得分:13)

你使用cucumber-jvm吗?我发现了一篇符合您要求的文章。

http://zsoltfabok.com/blog/2012/09/cucumber-jvm-hooks/

基本上,不要使用JUnit @BeforeClass和@AfterClass,因为他们不知道Cucumber Hook标签。您是否希望Init和Teardown方法仅适用于某些场景?

答案 2 :(得分:1)

试试这个:

在功能文件中:

@tagToIdentifyThatBeginAfterShouldRunForThisFeatureOnly
Feature : My new feature ....

在Stepdefinitions.java

@Before("@tagToIdentifyThatBeginAfterShouldRunForThisFeatureOnly")
public void testStart() throws Throwable {
}

@After("@tagToIdentifyThatBeginAfterShouldRunForThisFeatureOnly")
public void testStart() throws Throwable {
}

答案 3 :(得分:0)

嗯,我和你的要求一样。根据黄瓜 jvm 文档 - Cucumber-JVM does not support running a hook only once.

因此,我对特定变量采用了空检查方法,该变量是黄瓜步骤钩子中 @Before 的结果。类似于下面的内容。

private String token;
public String getToken(){
     if (token == null) {
        token = CucumberClass.executeMethod();
      }
return token;
}

在上面的示例中,让我们假设 getToken() 方法为您提供了一些在任何场景运行之前所需的令牌,并且您只需要一次令牌。这种方法只会在第一次执行您的方法时,即在任何场景开始执行之前它为空。它还显着减少了执行时间。