自定义 Junit 4 XML 报告

Kum*_*ham 5 java junit testng gradle

背景:

TestNG 支持添加您自己的 Reporter 类,以便根据需要修改正在生成的报告或生成新报告。

但是,JUnit 没有这样的功能,因此一种蛮力的方法是编写您自己的 Runner,然后生成您自己的自定义报告。

但是,我问这个问题是为了寻找是否有更好的东西?

基本上,我想为每个执行的方法添加自定义属性。

<testcase name="test_test_something" classname="some.class.name" time="0.069" my-own-attribute="somevalue"/>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 这个 XML 报告是如何由 JUnit 和 Gradle 生成的?

  • 有没有办法修改这个报告生成过程,在做最小更改的同时将自定义数据添加到报告中?

Chr*_*iki 4

\n

JUnit 和 Gradle 是如何生成这个 XML 报告的?

\n
\n\n

它\xe2\x80\x99最终由Gradle内部类生成org.gradle.api.internal.tasks.testing.junit.result.JUnitXmlResultWriter

\n\n
\n

基本上,我想为每个执行的方法添加自定义属性。

\n\n
<testcase name="test_test_something" classname="some.class.name" time="0.069" my-own-attribute="somevalue"/>\n
Run Code Online (Sandbox Code Playgroud)\n\n

[\xe2\x80\xa6]\n 有没有办法修改报告生成过程,以在进行最小更改的同时将自定义数据添加到报告中?

\n
\n\n

不幸的是,无法向<testcase/>元素添加更多属性。此代码显示当前如何创建元素及其属性;无法参与该创建过程。

\n\n
\n\n

如果您可以接受一个 hacky 解决方案,那么您可以尝试在测试期间将自定义数据写入 StdOut/StdErr 并按如下方式设置属性outputPerTestCase

\n\n
// (configuring the default `test` task of the `java` plugin here; works with\n// any task of Gradle\xe2\x80\x99s `Test` type, though)\ntest {\n    reports {\n        junitXml {\n            outputPerTestCase = true\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,写入的输出至少会出现在元素内的某个位置<testcase/>,您也许可以从那里以某种方式使用它。

\n