【问题标题】:How do I get one junit report from TestNG for all my test cases?如何从 TestNG 为我的所有测试用例获取一份 junit 报告?
【发布时间】:2015-05-15 20:32:39
【问题描述】:

我有一个格式如下的 TestNG xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="MySuite" parallel="tests" thread-count="5">
<parameter name="browser" value="firefox" />
<parameter name="remoteOrLocal" value="local" />
<parameter name="environment" value="####" />
<parameter name="remoteAddress" value="0.0.0.0" />
<test name="1" >
    <classes>
        <class name="tests.Test1"/>
    </classes>
</test>
<test name="2">
    <classes>
        <class name="tests.Test2"/>
    </classes>
</test>
<test name="3">
    <classes>
        <class name="tests.Test3"/>
    </classes>
</test>
</suite

但是我使用了一个需要 junit 输出的测试用例管理工具,这应该不是问题,因为 TestNG 会自动生成 junit 输出。

问题是这样的: 在名为 junitreports 的 test-output 目录下,每个类都有一个 junit 报告,格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated by org.testng.reporters.JUnitReportReporter -->
<testsuite hostname="fadavis-HP-EliteBook-8470p" name="tests.Test1" tests="3" failures="1" timestamp="15 May 2015 19:25:12 GMT" time="0.023" errors="1">
  <testcase name="method1" time="0.012" classname="tests.Test1"/>
  <testcase name="method3" time="0.004" classname="tests.Test1"/>
  <testcase name="method2" time="0.007" classname="tests.Test1">
    <error type="java.lang.AssertionError" message="null">
      <![CDATA[java.lang.AssertionError: null
    at org.testng.Assert.fail(Assert.java:94)
    at org.testng.Assert.fail(Assert.java:101)
    at tests.Test1.method2(Test1.java:13)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
    at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
    at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
]]>
    </error>
  </testcase> <!-- method2 -->
</testsuite> <!-- tests.Test1 -->

其中套件名称与类名相同。如何仅获取一个包含一组 TestNG 测试结果的 Junit 报告文件?

【问题讨论】:

    标签: java junit testng


    【解决方案1】:

    应该有一个名为MySuite 的目录与junitreports(基本上来自您的&lt;suite name="MySuite" parallel="tests" thread-count="5"&gt; 的名称)处于同一级别,并且里面是一个用于所有测试的XML。

    这是由org.testng.reporters.JUnitXMLReporter 生成的,如果不存在,请尝试将此记者添加到您的听众中。

    【讨论】:

    • MySuite 下的文件是 JUnit 格式,但每个测试用例仍然有一个,而不是整个套件一个。也许我做错了什么让它这样做。
    • 是的,每个 &lt;test name="1"&gt; 都有一个 xml 文件,因此对于您的示例应该有 1.xml, 2.xml and 3.xml。如果你想要一个 xml 文件,你可以在 testng.xml 中合并 tests 或者你可以实现自己的监听器,它从测试套件生成一个 xml 文件。
    猜你喜欢
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多