从命令行生成JUnit报告

时间:2012-09-16 08:56:39

标签: junit continuous-integration junit4

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

我有一个可以通过

运行JUnit命令行的工作设置
java -ea -cp <classpath> org.junit.runner.JUnitCore <tests>

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

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

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

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

1 个答案:

答案 0 :(得分:18)

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

但是,要以正确的格式获取XML文件以便CI系统可以读取它,我认为使用ant可以更容易,可以通过命令行使用build.xml({{3 }),或使用java api:JUnitReport

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

  1. 从命令行使用ant
  2. 以编程方式使用ant(使用Java API)
  3. 直接使用XMLJUnitResultFormatter和JUnitCore
  4. 创建一个自定义RunListener,用于生成正确的XML输出。
  5. 考虑到OP增加的限制,我们不能在命令行中使用ant,这会消除1。

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

    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上发布它,所以这个问题可以正确回答: - )