2012-09-16 94 views
14

我有一个云系统的测试设置,它使用python进程级别控制和junit混合进行内部状态检查。从本质上讲,我提出了几个虚拟机作为云服务器,然后是作为云成员的junit虚拟机,但它驱动测试并检查内部状态。我们现有的云管理内容是由python驱动的,我想保持这一点。从命令行生成JUnit报告

我有一个工作设置,将通过

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

运行JUnit的命令行,但这不会产生一个报告文件。我知道蚂蚁能够生成一个xml报告,但我不想在这个过程中涉及到蚂蚁(我已经有足够的移动部件了)。

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

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

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

+0

Windows或Unix(根据命令行)? –

回答

16

JUnit库没有任何XML输出选项。要实现这样的事情,你需要编写你自己的RunListener,它监听输出,并在你的情况下写入XML文件。但是,要以正确的格式获取XML文件以便它可以被CI系统读取,我认为使用ant会更容易,可以通过命令行使用build.xml(JUnitReport) ,或者使用java api:How can i use Apache ANT Programmatically

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

  1. 命令行
  2. 使用Ant编程(使用Java API)
  3. 使用XMLJUnitResultFormatter直接与JUnitCore
  4. 创建使用Ant一个自定义的RunListener,它可以生成正确的XML输出。

鉴于由OP添加的限制,我们不能使用ant命令行,从而消除1

在蚂蚁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.

调用Ant编程,通过Java API。我找不到任何最新的文档。这似乎很难。因此,最后,我会使用XMLJUnitResultFormatter中的代码作为基础来执行4,一个自定义RunListener。然后,我会在github上发布它。com,所以这个问题可以正确回答:-)

+0

对不起,我似乎无法使换行符出现...... 如果我理解正确的话,你的建议,我应该: 1)包括蚂蚁罐子 2)编写自定义的主 3)添加蚂蚁罐子的RunListener到JUnitCore实例 4)让它翻转? 或者是有形式 1)的较短版本包括蚂蚁罐子 2)更直接调用它,它会处理JUnitCore部分? – Matt

+1

Ant调用junit,它运行测试。所以你会提供一个build.xml,并调用ant。最简单的方法是确保ant安装在系统的某个位置,然后从命令行执行。而不是java ...你会有蚂蚁... –

+1

唉,需要安装ant是我不能做的事情之一。这条消息从最高处下来。 – Matt