如何使用TestNG注释执行黄瓜步骤定义

时间:2018-07-13 12:45:56

标签: selenium cucumber testng cucumber-java

我应该在黄瓜上迁移。我确实有使用Selenium的项目框架,使用Data Driven Framework的TestNG,Maven。我正在探索使用TestNG注释进行黄瓜的可行性。

我的问题是,我们如何在@Test方法和黄瓜的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");
}

课堂锻炼:

@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批注正在调用。但是,如何将其替换为“步骤定义”。请协助。

2 个答案:

答案 0 :(得分:2)

不确定这里有什么混乱之处。这是将TestNG和黄瓜术语联系起来的方法。

    TestNG中的
  • <test>标签可以可视化为黄瓜中的特征文件。
  • TestNG中的
  • @Test方法可以可视化为黄瓜中的一个场景。
  • 黄瓜中的步骤定义与TestNG中没有直接等价的关系,因为这是场景的一部分。但是为了理解,您可以将其可视化为在TestNG中执行逻辑操作的一行代码。

AbstractTestNGCucumberTests的默认实现如下:

  • 它内部包含一个数据提供程序,该数据提供程序一次提供一个功能文件。
  • 它包含一个绑定到上述数据提供者的@Test方法,该方法检索功能文件中的所有方案,然后一个接一个地运行它们。

您可以构建自己的AbstractTestNGCucumberTests变体来执行各种不同的操作(例如,支持并发方案执行,而Cucumber JVM绑定当前不支持并发方案执行)。

作为示例,您可以看一下我构建的Cucumber-roadrunner库,该库使用上述概念来支持并行方案执行并提供线程安全报告。

关于您所面临的错误,You can implement missing steps with the snippets below:基本上是因为黄瓜jvm绑定可能无法使用粘合代码来绑定特征文件(这是您通过{{ 1}}注释)。您也许应该仔细研究Cucumber jvm绑定文档,以了解如何提供正确的值。

答案 1 :(得分:0)

您还可以查看gherkin with QAF,它是针对小黄瓜的纯TestNG实现。它使用 TestNG(不是黄瓜赛跑者),并为您提供testNG的所有功能,包括并行执行,侦听器,分组,优先级等...

每个方案都转换为TestNG测试,您可以并行运行方案。此外,您还可以在inbuilt期间使用authoring BDD或自定义数据提供者。无需额外的运行程序,只需为您使用的appropriate factory使用BDD syntax类进行常规配置即可。