从命令行生成JUnit报告

Mat*_*att 18 junit continuous-integration junit4

我有一个云系统的测试设置,它使用python的混合物进行过程级控制,使用junit进行内部状态检查.从本质上讲,我将几个虚拟机作为云提供给服务器,然后是一个junit虚拟机,它是云的一部分,但可以驱动测试并检查内部状态.我们现有的云管理内容是由python驱动的,我想保持这一点.

我有一个工作设置,将通过运行JUnit命令行

java -ea -cp <classpath> org.junit.runner.JUnitCore <tests>
Run Code Online (Sandbox Code Playgroud)

但这不会产生报告文件.我知道蚂蚁能够生成一个xml报告,但我不想让蚂蚁参与这个过程(我已经有足够的移动部件了).

有没有办法从命令行启动junit,以便生成报告?

理想情况下,我会让junit测试生成xml报告,python测试生成xml报告,然后将它们合并在一起供我们的CI系统使用.

更新:命令行执行必须支持Windows,Linux和Mac.虽然包装内部蚂蚁可能是一种选择,但我们不允许运送外部蚂蚁.

Mat*_*ell 18

JUnit库没有任何XML输出选项.要实现这一点,您需要编写自己的RunListener,它会监听输出,并在您的情况下编写XML文件.

但是,要以正确的格式获取XML文件以便CI系统可以读取它,我认为通过使用build.xml(JUnitReport)的命令行或使用ant来使用ant要容易得多. java api:我如何以编程方式使用Apache ANT.

编辑:最初,我们有四个选择:

  1. 从命令行使用ant
  2. 以编程方式使用ant(使用Java API)
  3. 直接在JUnitCore中使用XMLJUnitResultFormatter
  4. 创建一个自定义RunListener,它生成正确的XML输出.

鉴于OP增加的限制,我们不能使用命令行中的ant,这会消除1.

在仔细查看Ant JUnit任务后,似乎无法将其与JUnitCore(添加TestListener)一起使用,因为ant直接使用测试类的名称,因此您无法执行桥接类.来自XMLJUnitResultFormatter.java

private void formatError(String type, Test test, Throwable t) {
    ...
    nested.setAttribute(ATTR_TYPE, t.getClass().getName());

    String strace = JUnitTestRunner.getFilteredTrace(t);
    Text trace = doc.createTextNode(strace);
    nested.appendChild(trace);
}
Run Code Online (Sandbox Code Playgroud)

这消除了3.

通过Java API以编程方式调用Ant.我找不到有关此的最新文档.这似乎很难.

所以,最后,我将使用XMLJUnitResultFormatter中的代码作为基础来执行4,一个自定义RunListener.然后,我会在github.com上发布它,所以这个问题可以正确回答:-)

  • 我在[Schmant](http://schmant.sourceforge.net/),[AntXmlRunListener](http://schmant.sourceforge.net/releases/current/api/org/schmant)的下载中找到了这样一个RunListener. /task/junit4/launcher/AntXmlRunListener.html).我将所需的类提取到https://github.com/barrypitman/JUnitXmlFormatter以便于参考. (8认同)