我应该在 Cucumber 上迁移。我确实有 Selenium 的项目框架、带有数据驱动框架的 TestNG、Maven。我正在探索 Cucumber 使用 TestNG 注释的可行性。
我的问题是,我们如何在 @Test 方法和 Cucumber 的 Step 定义之间创建连接。举个例子,我们的代码是用@BeforeClass、@Test、@AfterClass方法编写的。那么我们如何使用步骤定义进行迁移。
功能文件:
Feature: Is it Friday yet?
Everybody wants to know when it's Friday
Scenario: Sunday isn't Friday
Given today is Sunday
When I ask whether it's Friday yet
步骤定义:
@Given("^today is Sunday$")
public void today_is_Sunday() {
// Write code here that turns the phrase above into concrete actions
System.out.println("this is demo1");
}
@When("^I ask whether it's Friday yet$")
public void i_ask_whether_is_s_Friday_yet() {
// Write code here that turns the phrase above into concrete actions
System.out.println("this is demo2");
}
类异常:
@CucumberOptions(features = "cfeature/firstDemo.feature", glue = { "mytest/Stepd" })
public class demo01 extends AbstractTestNGCucumberTests {
private TestNGCucumberRunner tcr;
@BeforeClass(alwaysRun = true)
public void beforeClass() throws Exception {
tcr = new TestNGCucumberRunner(this.getClass());
}
@Test(groups="cucumber", description="Runs CucumberFeature")
public void testdemo() {
System.out.println("Hello");
}
@AfterClass(alwaysRun = true)
public void afterClass() {
tcr.finish();
}
}
控制台:
Hello
[33mUndefined scenarios:[0m
[33mcfeature/firstDemo.feature:4 [0m# Sunday isn't Friday
1 Scenarios ([33m1 undefined[0m)
5 Steps ([33m5 undefined[0m)
0m0.073s
You can implement missing steps with the snippets below:
目前,@Test注解正在调用。但是,如何用步骤定义替换它。请帮忙。
最佳答案
不知道这里有什么困惑。以下是如何将 TestNG 和 Cucumber 术语联系起来。
-
<test>
TestNG中的标签可以可视化为cucumber中的特征文件。 -
@Test
TestNG 中的方法可以可视化为 Cucumber 中的场景。 - cucumber 中的步骤定义与 TestNG 中没有直接等效的内容,因为它是场景的一部分。但为了便于理解,您可以将其可视化为在 TestNG 中执行逻辑运算的一行代码。
AbstractTestNGCucumberTests
的默认实现如下:
- 它内部包含一个数据提供程序,一次提供一个功能文件。
- 它包含
@Test
方法,该方法绑定(bind)到上述数据提供程序,该方法检索特征文件中的所有场景,然后逐一运行它们。
您可以构建自己的 AbstractTestNGCucumberTests
变体做各种不同的事情(例如支持并发场景执行,这在 Cucumber JVM 绑定(bind)中目前不可用)。
作为示例,您可以查看 Cucumber-roadrunner我构建的库使用上述概念来支持并行场景执行,并提供线程安全报告。
关于您面临的错误,即 You can implement missing steps with the snippets below:
基本上是因为 Cucumber jvm 绑定(bind)可能无法使用粘合代码绑定(bind)您的功能文件(这是您通过 @CucumberOptions
注释提供的)。您也许应该仔细查看 Cucumber jvm 绑定(bind)文档,以了解如何提供正确的值。
关于selenium - 如何使用 TestNG 注释执行 Cucumber Step 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51325450/