【问题标题】:Testng is not executing Code inside Cucumber HooksTestng 没有在 Cucumber Hooks 中执行代码
【发布时间】:2018-07-05 06:45:08
【问题描述】:

我是 Selenium、Cucumber 工具的新手,正在学习使用 Selenium、cucumber、maven 和 TestNG 构建 BDD 框架。

我基本上有三个 Java 文件- 测试运行器(src/test/java) 步骤定义(src/test/java) 测试库(src/main/java)

我在 TestBase 类中定义了之前和之后的钩子 我的 Test-Runner 类有一个为 Extent-report 定义的插件,它还有一个 @AfterClass 注释,它正在加载 extent-config.xml-

现在在运行功能文件时,它不会执行 @AfterClass 注释,因此会跳过生成范围报告。 但是如果我使用 TestNG 直接运行 Test-runner 文件,它会跳过执行 testBase Class 中定义的 Hooks-

Test-Runner的代码-

@CucumberOptions(
        features={"src/test/resources/Features/login"},
         glue={"stepDefinition","src/main/java/Utils/TestBase.java"},
         monochrome=true,
         plugin={"pretty","html:target/Reports","com.cucumber.listener.ExtentCucumberFormatter:target/cucumber-reports/report.html"}
         )
public class Login_Runner  extends AbstractTestNGCucumberTests{

    @AfterClass
    public static void writeExtentReport() {
        System.out.println("I am in After Class");
        Reporter.loadXMLConfig(new File("src/test/resources/extent-config.xml"));
}

谁能帮忙解决这个问题???

【问题讨论】:

  • 我相信运行该功能自然不会运行@Afterclass,因为它对 Test-Runner 没有任何作用。我不完全确定,但是:您可能会尝试将 Test-Base 放在 src/test/java 下。 (有什么理由不这样做吗?)
  • 也许值得提供更多关于你的类和项目配置的细节。否则很难猜出它为什么不起作用。至少根据您提供的唯一sn-p,应该执行带有AfterClass注释的方法。
  • 可以添加展开后文件夹结构的截图吗?
  • 我不确定是否支持 TestNG @AfterClass。你可以试试 After Hook 吗?您可以在 After Hooks here 上找到更多信息
  • 这里是文件夹结构 - src/main/java 有两个类

标签: cucumber


【解决方案1】:

假设如下结构

src/test/java/stepdef/LoginSteps.java
src/test/java/runner/Login_Runner.java
src/test/resources/features/login.feature
pom.xml

LoginSteps.java

implements all steps for `login.feature`

Login_Runner.java

package runner;
import org.testng.annotations.AfterClass;
import cucumber.api.CucumberOptions;
import cucumber.api.testng.AbstractTestNGCucumberTests;
@CucumberOptions(features = "src/test/resources/features", glue = "stepdef")
public class Login_Runner extends AbstractTestNGCucumberTests {
    @AfterClass
    public static void theAfterClassMethod() {
        System.out.println("execute @AfterClass annotated method");
    }
}

login.feature

Feature: test
    Scenario: login
        Given open browser
        And start app
        When enter details
        Then login happens

pom.xml*

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.suboptimal</groupId>
    <artifactId>cuke-testng2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-testng</artifactId>
            <version>3.0.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>3.0.2</version>
            <type>jar</type>
        </dependency>
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>10</maven.compiler.source>
        <maven.compiler.target>10</maven.compiler.target>
        <surefire.version>2.22.0</surefire.version>
    </properties>
</project>

运行测试

mvn clean test -Dtest=Login_Runner

产生输出

...
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running runner.Login_Runner
Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configurator@5ae63ade
execute @Before annotated method
execute @After annotated method
execute @AfterClass annotated method

1 Scenarios (1 passed)
4 Steps (4 passed)
0m0.023s

当您将类 Login_Runner 重命名为例如LoginRunnerTest 您可以使用 mvn clean test 运行测试。

也许 runner 类名是您的原始问题,而不是 @AfterTest 方法的错过执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多