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

TestNG-带有故障保护插件的自定义报告器侦听器问题

蒲坚
2023-03-14

我有一个项目,其中我使用mavenfail-safeplugin来运行集成测试。我使用的是Maven TestNG框架组合。出于项目目的,我在前面修改了TestNG的默认XML报告,以自定义项目需求。

我在CustomReporter类中实现了上述要求,该类扩展了TestNG的IReporter接口。早些时候,我使用了surefire插件来运行这些测试方法,并在surefire插件中添加了侦听器机制。

现在对于某些项目需要,我需要迁移到故障保护插件。所以我通过配置POM文件绕过了surefiretest阶段执行

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <skip>true</skip>
        </configuration>
</plugin>

然后我在POM文件中添加了故障保护配置,如下所示;

 <

plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.12</version>
    <executions>
        <execution>
            <id>fail-safe-myplug</id>
            <phase>integration-test</phase>
            <goals>
                <goal>integration-test</goal>
            </goals>
            <configuration>
                <skip>false</skip> 
                    <properties>                
                        <property>  
                        <name>listener</name>
                            <value>com.CustomXmlReport</value>
                                </property>
                            </properties>
                            <includes>
                                <include>**/*Test.java</include>
                            </includes>                     
                        </configuration>
                    </execution>
                </executions>

            </plugin>

有了这个新的POM,使用failsafe插件的集成测试调用失败了。以下是日志;

Running com.myPack.AppTest
Configuring TestNG with: org.apache.maven.`surefire`.testng.conf.TestNGMapConfigurator@ab50cd
org.apache.maven.surefire.util.`SurefireReflectionException: java.lang.reflect.InvocationTargetException`; nested exception is java.lang.reflect.InvocationTargetException: null
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:103)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74)
Caused by: java.lang.IncompatibleClassChangeError: Expected static method org.testng.reporters.XMLReporterConfig.getTimestampFormat()Ljava/lang/String;
    at com.myPack.CustomSuiteResultWriter.getTestResultAttributes(CustomSuiteResultWriter.java:175)
    at com.myPack.CustomSuiteResultWriter.addTestResult(CustomSuiteResultWriter.java:138)
    at com.myPack.CustomSuiteResultWriter.addTestResults(CustomSuiteResultWriter.java:117)
    at com.myPack.CustomSuiteResultWriter.writeAllToBuffer(CustomSuiteResultWriter.java:76)
    at com.myPack.CustomSuiteResultWriter.writeSuiteResult(CustomSuiteResultWriter.java:56)
    at com.myPack.CustomXmlReportGenerator.writeSuiteToBuffer(CustomXmlReportGenerator.java:102)
    at com.myPack.CustomXmlReportGenerator.writeSuite(CustomXmlReportGenerator.java:65)
    at com.myPack.CustomXmlReportGenerator.generateReport(CustomXmlReportGenerator.java:42)
    at org.testng.TestNG.generateReports(TestNG.java:780)
    at org.testng.TestNG.run(TestNG.java:766)
    at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:76)
    at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:112)
    at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:115)
    ... 9 more

即使我使用故障安全插件在集成测试阶段,我得到了异常

配置TestNG与:org.apache.maven.surefire.testng.conf.TestNGMapConfigurator@ab50cdorg.apache.maven.surefire.util.'Surefire ReflessExc0019

如何解决这个问题?

注意:当我试图使用surefire插件执行测试时,监听器机制按预期工作。


共有1个答案

黄磊
2023-03-14

实际上,问题在于与故障保护TestNG版本的兼容性。我使用了testng5.9v故障保护插件2.12v。这是问题的根本原因。

我将Failsafe版本降级为2.5v,问题得到解决。

感谢谷歌团队引导我从版本的角度思考。http://groups.google.com/group/testng-users/browse_thread/thread/b54417e5a61c5c62

 类似资料:
  • 我将使用诱惑报告来监控硒测试结果。我正在使用TestNG和Maven failsafe插件来运行测试。我找到了非常清晰的例子来修改pom。xml,以便在您使用Maven surefire插件时包含case的诱惑,但对Maven failsafe插件则没有。我假设配置应该非常相似,但它不适合我。这是我pom里的东西。xml: 这是我看到的错误: 任何建议都将不胜感激。我假设配置Maven故障保护插件

  • 背景: null > @test(groups={“init”})public void openURL() 包含用于启动webdriver并使用给定URL打开chrome>实例的webdriver代码。 @test(dependsonGroups={“init”})public void testLogin() 包含的webdriver代码指向: 1。找到用户名密码文本输入元素,从属性文件中输入

  • 我们定义了一个testng结果侦听器,它帮助我们将testng.xml中定义的每个测试用例的测试结果发送到一个内部工具,如下所示: } 然后我们将这个侦听器集成到其他项目的testng xml文件中,例如: 它按照设计工作:一旦测试套件完成,测试结果将上传到内部工具。 现在我们有一个要求,在一个项目中,testng.xml中的一个测试用例与内部工具中的3个测试用例相关,这意味着对于testng.x

  • 我试图在更新整数值时激发事件,但失败了。下面是我使用的代码: 我是不是漏掉了什么?

  • 我在一个项目中混合了单元测试框架(用于surefire maven插件):JUnit TestNG(几乎所有测试都是JUnit测试,但TestNG包含在两个测试所需的反应流TCK框架中。所有集成测试(故障保护)都只是JUnit测试。我成功地将surefire配置为使用以下插件配置运行两个测试:JUnit和TestNG: 当我运行

  • 在我的项目中,我创建了以下目录结构 在我的pom.xml我做了以下记录 如果我复制src中的资源- 如何使联调也将资源中的文件复制到目标中?