当前位置: 首页 > 知识库问答 >
问题:

maven命令来运行特定的测试类。testng。测试异常

宰父焕
2023-03-14

我有maven测试项目如下:

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>

跟踪测试。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”这样的命令,但没有成功,如何让它按预期工作?

附言:我发现这里有相关的话题:https://groups.google.com/forum/#!msg/testng users/ccp_ewuNWlk/kmMXi0ycAwAJ

共有1个答案

潘琪
2023-03-14

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

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

您应该尝试只使用其中一种模式,而不是混合使用。

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

所以你有两个选择:

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

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

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

 类似资料:
  • 我正在通过Maven运行测试用例。使用以下命令: 获取成功: 获取失败: 类名为LoginTest 堆栈跟踪: [错误]无法执行目标org.apache.maven.plugins:maven-surefire-plugin:2.12.4:project Web上的test(default-test):未执行任何测试!(设置-DFAILIFNOTESTS=FALSE忽略此错误。)->[帮助1]or

  • 问题内容: 即使我这样做,在64位Windows上运行也会给我以下错误: 问题答案: 请确保您使用的版本,并且您有选项(如记录在这里)。 例如: 这将创建一个带有清单的jar,该清单可以重新创建您的类路径(而不是通过变量设置它,这是受Windows命令行限制问题影响的方法)。

  • 我有一个TestNG@Factory类,一个创建驱动程序的基类和两个包含多个@test方法的测试类来运行测试。考虑到我下面的@Factory类。 和是两个测试类。它们扩展基类并调用基类构造函数来创建驱动程序。特定设备ID在特定时间只能使用驱动程序的一个实例。 我面临的问题是IndTest和IndTest2同时运行,测试试图同时在特定设备上运行不同的测试。我要求先调用IndTest类,在设备1和设备

  • 我有一个使用testng API动态创建testng.xml文件的项目,因此使用java的main函数,我的项目按预期工作,但是如果我使用'run as->maven build'通过maven运行我的项目,看起来只有BeforeSuite和BeforeTest类在运行,而实际的测试并没有运行。以下是我的pom.xml文件: 最后,这是StackTrace: 我想知道我错过了什么。

  • 我有一个testng xml文件,它被设置为运行一个特定的类,该类的方法包含以下组标记或被分组为以下类型之一: 并行测试 顺序测试 烟雾测试 虽然我的一些测试被指定为并行或顺序测试,但一些测试可能包含一个额外的标签“冒烟测试”。在这个场景中,我希望能够只运行那些被归类为“烟雾测试”的组件。当我运行测试时,它要么找不到任何测试,要么只是运行所有分组为“sequential-test”的测试。我似乎不

  • 我正在使用Spock框架进行测试(1.0-groovy-2.4版本)。Junit提供了使用命令行(使用Maven)运行特定测试的选项: 问题:我怎样才能和斯波克做到这一点? 这个版本依赖于Junit 4.12,Junit文档中指出,只有Junit 4才支持此功能。x、 基本上,斯波克应该提出类似的建议。