【问题标题】:junit plugin not showing results from all tests in jenkinsjunit插件未显示詹金斯中所有测试的结果
【发布时间】:2018-04-16 08:06:35
【问题描述】:

我有一个测试套件,其中一些 XML 文件是在运行单元测试 (junit) 之后生成的。还有一些其他量角器自动化测试使用 jasmine junit xml 报告器 (https://github.com/larrymyers/jasmine-reporters) 创建 XML 文件。我在 jenkins 工作的同一目录中生成两组 XML 文件,我使用了 junit 插件(发布 JUnit 测试结果报告)来发布报告。因此,现在,在作业完成后,单元测试生成了 9 个 xml,jasmine-reporter 生成了 2 个 XML,如下所述,从我的 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 作业 UI 中单击“测试结果”链接时,它只显示与单元测试生成的 xml 相关的所有测试,并且不显示与生成的 XML 相关的任何结果茉莉花报告。需要帮助了解为什么 jenkins 没有显示任何与 jasmine XML 相关的测试结果。

以下是单元测试生成的示例 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>

【问题讨论】:

  • 您能否尝试让 Jenkins仅解析 jasmine JUnit XML 报告。然后它们会出现在 WebUI 中吗?我看到单元测试和茉莉花报告之间的示例 XML 报告存在细微差别,但我不确定这是否是根本原因。
  • 如果我不运行单元测试而只运行量角器测试,那么 jenkins 可以使用 jasmine 记者创建的 xml 在 web ui 中显示报告。

标签: jenkins junit jasmine-reporters


【解决方案1】:

我认为您在这里遇到了 Jenkins 问题。

Jenkins 使用 JUnit XML 报告中 &lt;testcase&gt; 的属性 classnametestname 对 UI 上的测试结果进行分类。此外,Jenkins 期望 classname 由一个包名、一个点和一个类名组成:

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

如果不存在点,Jenkins 假定包“根”。如果存在多个点,则仅将最后一个点识别为分隔符。请参阅this question 以获得更好的解释。

如果您查看上面的 XML 报告,您会注意到,单元测试的 XML 在 classname 属性中指定了包名称,而 jasmine 报告器的 XML 没有。我认为缺少包名称是测试结果未显示的原因。显然 Jenkins 只使用包“root”,如果根本没有包的话。如果至少有一个测试用例带有包名,则所有其他没有包的测试用例都“丢失”。

有两种可能的解决方案:

【讨论】:

  • 我也遇到了这个问题,结果是缺少类名并且测试套件名称不是唯一的。后者使报告输出在构建之间不一致。
猜你喜欢
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 2012-11-15
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多