18

我有一个云系统的测试设置,它混合使用 python 进行进程级别控制和 junit 进行内部状态检查。本质上,我将几个虚拟机作为云服务器提供给服务器,然后是一个 junit 虚拟机,它是云的成员,但驱动测试和检查内部状态。我们现有的云管理东西是由 python 驱动的,我想维护它。

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

java -ea -cp <classpath> org.junit.runner.JUnitCore <tests>

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

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

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

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

4

1 回答 1

18

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

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

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

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

鉴于 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);
}

这消除了3。

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

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

于 2012-09-20T15:23:33.100 回答