selenium - 如何使用 TestNG 注释执行 Cucumber Step 定义

标签 selenium cucumber testng cucumber-java

我应该在 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/

相关文章:

java - Selenium WebDriver java 测试中的 StaleElementReferenceException

在 Selenium WebDriver 中拖放的 JavaScript 解决方法

variables - 如何在标题中获取 cucumber 场景变量?

java - 如何在 Cucumber 测试套件中订购功能文件?

java - Maven 运行 testNG 套件两次

java - Selenium Java WebDriverWait - 无法访问 java.util.function

ruby-on-rails - 如何从spork过渡到spring?

java - Maven命令行运行打包成jar的TestNG

java - 使用testng中的DataProvider从文件中读取数据

Python:如果计算的文件数不等于x,则重试报告拉取