java - 运行特定测试类的maven命令得到org.testng.TestNGException

标签 java maven testng

我有ma​​ven + testng项目如下:

pom.xml

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
    <configuration>
        <suiteXmlFiles>
            <suiteXmlFile>src/test/resources/config/testng.xml</suiteXmlFile>
        </suiteXmlFiles>
    </configuration>
</plugin>

testng.xml

<test name="SendAuroraRequests_TEST">
    <parameter name="requestsToEnv" value="test" />
    <classes>
        <class name="com.test.TrackerTest" />
    </classes>
</test>

TrackerTest.java

package com.test;
public class TrackerTest {

    private ITestContext context;

    @Parameters("requestsToEnv")
    @BeforeTest
    public void setInvocationCount(ITestContext context, String requestsToEnv){
        this.context = context;
        this.setInvocationCount(context, this, requestsToEnv);
    }
}

当我尝试运行“mvn test”命令时,它运行良好,但是当我尝试使用 maven 命令运行特定测试类(例如“mvn test -Dtest=TrackerTest)”时,它效果很好",它会抛出异常,例如:

[ERROR] setInvocationCount(com.test.TrackerTest)  Time elapsed: 0.656 s  <<< FAILURE!
org.testng.TestNGException:

Parameter 'requestsToEnv' is required by BeforeTest on method setInvocationCount but has not been marked @Optional or defined

    [INFO]
    [INFO] Results:
    [INFO]
    [ERROR] Failures:
    [ERROR]   TrackerTest.setInvocationCount ? TestNG
    Parameter 'requestsToEnv' is re...
    [INFO]
    [ERROR] Tests run: 4, Failures: 1, Errors: 0, Skipped: 3
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  6.838 s
    [INFO] Finished at: 2019-08-09T22:56:34+08:00
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on project hfatest-tracker: There are test failures.

看起来使用maven命令运行特定的测试类并没有尝试从testng.xml获取参数,我也尝试使用“mvn test -Dtest=TrackerTest -DsuiteXmlFile=src/test/resources/config/”之类的命令testng.xml”但没有工作,如何使其按预期工作?

P.S:我发现这里有相关主题: https://groups.google.com/forum/#!msg/testng-users/ccp_ewuNWlk/kmMXi0ycAwAJ

最佳答案

您正在混合两种执行模式。 TestNG 允许您以两种模式运行测试:

  • 通过 TestNG 套件 xml 文件
  • 通过指定它们的完全限定类名称来单独测试类。

您应该尝试仅使用这些模式中的一种,而不是混合使用它们。

当您通过 -Dtest 传入各个测试类来运行测试时,TestNG 会创建一个没有任何参数的命令行套件。

所以你有两个选择:

  1. 当您的测试涉及参数(使用@Parameters)时,您可以坚持使用 TestNG 套件 xml 文件。
  2. 如果您仍然想通过 -Dtest JVM 参数运行单独的测试类,那么您可以通过 JVM 参数传入参数值 [所以在您的情况下它将是 mvn clean test -Dtest=TrackerTest -DrequestsToEnv= test ]

这是可能的,因为 TestNG 允许您通过 JVM 参数将值传递给 @Parameters

更多详情请引用我的博文:https://rationaleemotions.com/building_dynamic_testng_suites/

关于java - 运行特定测试类的maven命令得到org.testng.TestNGException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57433307/

相关文章:

java - 将 log4j 重新路由到 slf4j

java - 如何在 swt java 中处理 Button 的旧字体

java - 如何让 Eclipse 将文件导出到与源不同的位置?

java - 不同依赖关系中的 Maven 配置文件

java - 如何执行包含具有相同 @BeforeClass 方法的测试类的 testng.xml 文件

java - 在 2.6.32-5-xen-amd64 上安装 j2re-1_4_2_19-linux-i586.bin 时出现问题

java - JInternalFrame 不会出现

java - OutOfMemoryError 和 GC 开销限制在 maven 但不是 eclipse

java - 如何仅在其中一个类完成测试后才以类级并行性运行测试

java - 在运行时设置 Allure 结果目录