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

vwkv1x7d  于 2023-05-15  发布在  Java
关注(0)|答案(5)|浏览(173)

我想为每个特定的功能文件指定某些安装和拆卸步骤。我见过允许代码在每个场景之前执行的钩子,以及在每个功能之前执行代码的钩子,但我想指定代码在所有场景运行之前和之后运行一次。
这可能吗?

13z8s7eq

13z8s7eq1#

如果您使用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(){
       ...
    }
}
yrwegjxp

yrwegjxp2#

你用cucumber-jvm吗?我找到了符合你要求的文章。
http://zsoltfabok.com/blog/2012/09/cucumber-jvm-hooks/
基本上,不要使用JUnit @BeforeClass和@AfterClass,因为它们不知道Cucumber Hook标签。你希望Init和Teardown方法只在特定的场景下运行,对吗?

n3schb8v

n3schb8v3#

试试这个:
功能文件中:

@tagToIdentifyThatBeginAfterShouldRunForThisFeatureOnly
Feature : My new feature ....

在Stepdefinitions.java

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

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

i7uaboj44#

我的要求和你的一样。根据cucumber-jvm文档- Cucumber-JVM不支持只运行一次钩子。
因此,我对一个特定的变量进行了空检查,该变量是cucumber step hook中@Before的结果。像下面的东西。

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

在上面的例子中,让我们假设getToken()方法在任何场景可以运行之前给了你一些所需的令牌,而你只需要一次令牌。这种方法只会在第一次执行你的方法,也就是说,在任何场景开始执行之前,当它为null的时候。这也大大减少了执行时间。

afdcj2ne

afdcj2ne5#

这里是一个小编程黑客。参考以下代码

public class DemoSteps {

static boolean runOnlyOnce = true;

@Before("@home")
public static void setRunOnlyOnce() {
    if (runOnlyOnce) {
        System.out.println("Execute here");
    }
    runOnlyOnce = false;
}

}

@home
Business Need: home page

Scenario: test 1
 Given test 1

Scenario: test 2
 Given test 2

在上面的例子中,setRunOnlyOnce()方法中的if条件只运行一次

相关问题