我想为每个特定的功能文件指定某些安装和拆卸步骤。我见过允许代码在每个场景之前执行的钩子,以及在每个功能之前执行代码的钩子,但我想指定代码在所有场景运行之前和之后运行一次。这可能吗?
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(){ ... } }
yrwegjxp2#
你用cucumber-jvm吗?我找到了符合你要求的文章。http://zsoltfabok.com/blog/2012/09/cucumber-jvm-hooks/基本上,不要使用JUnit @BeforeClass和@AfterClass,因为它们不知道Cucumber Hook标签。你希望Init和Teardown方法只在特定的场景下运行,对吗?
n3schb8v3#
试试这个:功能文件中:
@tagToIdentifyThatBeginAfterShouldRunForThisFeatureOnly Feature : My new feature ....
在Stepdefinitions.java:
@Before("@tagToIdentifyThatBeginAfterShouldRunForThisFeatureOnly") public void testStart() throws Throwable { } @After("@tagToIdentifyThatBeginAfterShouldRunForThisFeatureOnly") public void testStart() throws Throwable { }
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的时候。这也大大减少了执行时间。
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条件只运行一次
5条答案
按热度按时间13z8s7eq1#
如果您使用junit运行测试,则是如此。我们使用注解来创建一个单元测试类和一个单独的步骤类。标准的@Before在steps类中,但@BeforeClass注解可以在主要的单元测试类中使用:
yrwegjxp2#
你用cucumber-jvm吗?我找到了符合你要求的文章。
http://zsoltfabok.com/blog/2012/09/cucumber-jvm-hooks/
基本上,不要使用JUnit @BeforeClass和@AfterClass,因为它们不知道Cucumber Hook标签。你希望Init和Teardown方法只在特定的场景下运行,对吗?
n3schb8v3#
试试这个:
功能文件中:
在Stepdefinitions.java:
i7uaboj44#
我的要求和你的一样。根据cucumber-jvm文档- Cucumber-JVM不支持只运行一次钩子。
因此,我对一个特定的变量进行了空检查,该变量是cucumber step hook中@Before的结果。像下面的东西。
在上面的例子中,让我们假设getToken()方法在任何场景可以运行之前给了你一些所需的令牌,而你只需要一次令牌。这种方法只会在第一次执行你的方法,也就是说,在任何场景开始执行之前,当它为null的时候。这也大大减少了执行时间。
afdcj2ne5#
这里是一个小编程黑客。参考以下代码
}
在上面的例子中,setRunOnlyOnce()方法中的if条件只运行一次