如何使用 TestNG 注释执行 Cucumber Step 定义
how to execute Cucumber Step defination with TestNG annotation
我应该在 Cucumber 上迁移。我确实有使用 Selenium 的项目框架、使用数据驱动框架的 TestNG、Maven。我正在使用 TestNG 注释探索 Cucumber 的可行性。
我的问题是,我们如何在 @Test 方法和 Cucumber 的 Step 定义之间创建连接。举个例子,我们的代码是用@BeforeClass、@Test、@AfterClass 方法编写的。那么我们如何使用 Step 定义进行迁移。
专题文件:
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");
}
Class 执行:
@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
绑定到上述数据提供者的方法,该方法检索特征文件中的所有场景,然后一个接一个地运行它们。
您可以构建自己的 AbstractTestNGCucumberTests
变体来做各种不同的事情(例如支持并发场景执行,这在 Cucumber JVM 绑定中目前不可用)。
作为示例,您可以查看我构建的 Cucumber-roadrunner 库,它使用上述概念支持并行场景执行,还提供线程安全报告。
关于您面临的错误,You can implement missing steps with the snippets below:
基本上是因为黄瓜 jvm 绑定可能无法使用胶水代码(这是您通过@CucumberOptions
注释)。您或许应该仔细查看 cucumber jvm 绑定文档以了解如何提供正确的值。
您还可以查看 gherkin with QAF,它是 gherkin 的纯 TestNG 实现。它使用 TestNG(不是黄瓜 运行ner) 并为您提供 testNG 的所有功能,包括并行执行、侦听器、分组、优先级等...
每个场景都转换为 TestNG 测试,您可以 运行 个场景作为并行。此外,您还可以使用您正在使用的 inbuilt or custom data-providers while authoring BDD. No need additional runner just configure as usual using appropriate factory class for the BDD syntax。
我应该在 Cucumber 上迁移。我确实有使用 Selenium 的项目框架、使用数据驱动框架的 TestNG、Maven。我正在使用 TestNG 注释探索 Cucumber 的可行性。
我的问题是,我们如何在 @Test 方法和 Cucumber 的 Step 定义之间创建连接。举个例子,我们的代码是用@BeforeClass、@Test、@AfterClass 方法编写的。那么我们如何使用 Step 定义进行迁移。
专题文件:
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");
}
Class 执行:
@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
绑定到上述数据提供者的方法,该方法检索特征文件中的所有场景,然后一个接一个地运行它们。
您可以构建自己的 AbstractTestNGCucumberTests
变体来做各种不同的事情(例如支持并发场景执行,这在 Cucumber JVM 绑定中目前不可用)。
作为示例,您可以查看我构建的 Cucumber-roadrunner 库,它使用上述概念支持并行场景执行,还提供线程安全报告。
关于您面临的错误,You can implement missing steps with the snippets below:
基本上是因为黄瓜 jvm 绑定可能无法使用胶水代码(这是您通过@CucumberOptions
注释)。您或许应该仔细查看 cucumber jvm 绑定文档以了解如何提供正确的值。
您还可以查看 gherkin with QAF,它是 gherkin 的纯 TestNG 实现。它使用 TestNG(不是黄瓜 运行ner) 并为您提供 testNG 的所有功能,包括并行执行、侦听器、分组、优先级等...
每个场景都转换为 TestNG 测试,您可以 运行 个场景作为并行。此外,您还可以使用您正在使用的 inbuilt or custom data-providers while authoring BDD. No need additional runner just configure as usual using appropriate factory class for the BDD syntax。