junit插件没有显示jenkins

时间:2018-04-16 08:06:36

标签: jenkins junit jasmine-reporters

我有一个测试套件,其中一些XML文件是在运行单元测试(junit)后生成的。还有一些其他的量角器自动化测试使用jasmine junit xml报告器(https://github.com/larrymyers/jasmine-reporters)来创建XML文件。我在jenkins作业的同一目录中生成了两组XML文件,我使用了junit插件(发布JUnit测试结果报告)来发布报告。所以,现在,在作业完成后,9个xmls从单元测试中生成,2个XML由jasmine-reporter生成,如下所述,从我的jenkins作业控制台输出中,它能够识别出有11个xml文件来自我在作业配置中指定的模式。

22:49:52 [xUnit] [INFO] - [JUnit] - 11 test report file(s) were found with the 
pattern '**/tests/target/failsafe-reports/junitreports/*.xml' relative to 
'/home/jenkins/workspace/projectName' for the testing framework 
'JUnit'.

但问题是,当我点击"测试结果"来自jenkins job UI的链接,它只显示与单元测试生成的xml相关的所有测试,并且它没有显示与从jasmine报告生成的XML相关的任何结果。需要帮助才能知道为什么jenkins没有显示任何与jasmine XML相关的测试结果。

enter image description here

下面是单元测试生成的示例XML(当点击测试结果链接时,jenkins在ui中显示)。

<!--
Generated by org.testng.reporters.JUnitReportReporter 
-->
<testsuite hostname="someHostName" 
name="packageName.Class1" tests="22" failures="0" timestamp="16 
Apr 2018 05:47:59 GMT" time="69.663" errors="0">
  <testcase name="test1" time="2.488" 
classname="packageName.Class1"/>
  <testcase name="test2" time="5.808" 
classname="packageName.Class1"/>
</testsuite>

以下是jasmine junit xml报告生成的XML示例(当点击测试结果链接时,jenkins在其UI中未显示结果)

<testsuites>
  <testsuite name="chromeTestItemDetailsPage" timestamp="2018-04-16T05:48:43" 
hostname="localhost" time="29.357" errors="0" tests="22" skipped="0" 
disabled="0" failures="0">
   <testcase classname="chromeTestItemDetailsPage" name="ItemTitleDisplayed" 
time="0.895"/>
   <testcase classname="chromeTestItemDetailsPage" name="ItemPriceDisplayed" 
time="0.966"/>
 </testsuite>
</testsuites>

1 个答案:

答案 0 :(得分:3)

我认为你在这里遇到了詹金斯问题。

Jenkins使用JUnit XML报告中的classname属性testname<testcase>来对UI上的测试结果进行分类。此外,Jenkins希望classname由一个包名后跟一个点然后是一个类名组成:

<testcase classname="packagename.classname" name="testname">

如果没有点,Jenkins会假设包&#34; root&#34;。如果存在多个点,则仅将最后一个点识别为分隔符。有关更好的解释,请参阅this question

如果查看上面的XML报告,您可以注意到,单元测试的XML在classname属性中指定了包名称,而茉莉花报告者的XML则没有。我认为缺少包名是原因,为什么测试结果没有显示出来。显然詹金斯使用的包&#34; root&#34;只有,如果根本没有包裹。如果至少有一个带有包名称的测试用例,那么没有包的所有其他测试用例都会丢失&#34;。

有两种可能的解决方案: