如何使用 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 中的特征文件。
  • @TestTestNG中的方法可以形象化为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