如何在 JUnit XML 报告中配置 name 和 classname 属性

Posted

技术标签:

【中文标题】如何在 JUnit XML 报告中配置 name 和 classname 属性【英文标题】:how to configure the name and classname attributes on the JUnit XML report 【发布时间】:2019-08-06 11:16:08 【问题描述】:

为了与外部测试管理解决方案集成并查看空手道结果,我需要使用 JUnit XML 报告导入它们。 JUnit 的 XML 报告中标识的测试用例由元素上的 name 和 classname 属性标识。 然而,似乎这些名称是以某种方式动态生成的,而不是作为明确标识原始测试用例的唯一标识符。 理想的情况是为相应的测试用例提供唯一标识符,因此如果我们多次导入结果,它们总是与测试管理解决方案中的相同实体相关联。

我尝试运行karate-junit5 sample code 并使用“mvn test”运行它。 这是生成的 JUnit XML 报告的示例。

  <testcase name="testTags[1][1]" classname="karate.SampleTest" time="0.002"/>
  <testcase name="testSample[1][1]" classname="karate.SampleTest" time="0"/>
  <testcase name="testSample[1][2]" classname="karate.SampleTest" time="0"/>
  <testcase name="testFullPath[1][1]" classname="karate.SampleTest" time="0"/>

我希望“name”属性将填充测试用例的唯一标识符,与运行次数无关,例如使用 Scenario 的值(例如“first hello world”)

Feature: sample

  Scenario: first hello world
    * print 'hello'

  Scenario: second scenario
    * print 'second'

因此,像这样生成 JUnit XML 报告会更有用。

  <testcase name="second" classname="karate.SampleTest" time="0.002"/>
  <testcase name="first hello world" classname="karate.SampleTest" time="0"/>
  <testcase name="second scenario" classname="karate.SampleTest" time="0"/>
  <testcase name=first" classname="karate.SampleTest" time="0"/>

或者在 name 属性中填充特征名称和场景名称。 无论如何,有没有办法配置Junit报告元素上的这些属性应该如何填充?

【问题讨论】:

【参考方案1】:

很确定您使用的是旧版本的空手道或其他东西(可能是 JUnit 本身)生成了这个 XML。阅读此内容,您可能需要将您的报告解决方案指向不同的文件夹或排除一些不是由空手道创建的文件:https://github.com/intuit/karate#test-reports

肯定有机会提高空手道,所以我建议你这样做。

打开一个新问题,并遵循以下流程:https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue - 然后指定您想要对今天生成的内容进行哪些更改。

XML 创建代码也在这个文件Engine.java 中查找saveResultXml() 方法。

【讨论】:

您好,我使用的是上游的最新版本。我转到 karate-junit5 文件夹并使用“mvn test”运行 maven,它生成了一个名为“target/surefire-reports/TEST-karate.SampleTest.xml”的 JUnit XML 报告,其中包含我共享的内容。 @user2850180 我相信你 :) 你现在知道该做什么了,见上文 这个报告是由 surefire 自己生成的,还是由您之前好心分享的代码生成的?如果是后者,那我猜 PR 是解决方案吧? @user2850180 我不知道 - 这就是为什么你首先在新环境中本地尝试这个然后考虑 PR。 我正在查看的 JUnit XML 报告是由 maven surefire 本身生成的;它不是空手道创造的。从我在代码中看到的,JUnit XML 报告只有在我们使用并行运行器时才由空手道生成,对吧?因此,如果我从 karate-junit5 文件夹 github.com/intuit/karate/blob/master/karate-junit5/src/test/… 运行此类中提到的测试 ..它不应该调用并行运行器吗?除非我添加“Runner.parallel”,否则它似乎不会调用它

以上是关于如何在 JUnit XML 报告中配置 name 和 classname 属性的主要内容,如果未能解决你的问题,请参考以下文章

Junit_Ant使用Eclipse自带的Junit和Ant,生成测试报告

pytest文档75 - 生成 junit-xml 测试报告

Maven 不输出 junit CHECKSTYLE 报告

xml Jenkins CI兼容JUnit报告

如何在 Pytest JUNIT xml 中附加屏幕截图以显示在 Azure DevOps 上?

pytest.11.生成xml格式的测试报告