我有一个云系统的测试设置,它使用python的混合物进行过程级控制,使用junit进行内部状态检查。从本质上讲,我将几个虚拟机作为云提供给服务器,然后是一个junit虚拟机,它是云的一部分,但可以驱动测试并检查内部状态。我们现有的云管理内容是由python驱动的,我想保留它。
我有一个可以通过
运行JUnit命令行的工作设置java -ea -cp <classpath> org.junit.runner.JUnitCore <tests>
但这不会生成报告文件。我知道蚂蚁能够生成一个xml报告,但我不想让蚂蚁参与这个过程(我已经有足够的移动部件了)。
有没有办法从命令行启动junit,以便生成报告?
理想情况下,我会让junit测试生成xml报告,python测试会生成xml报告,然后将它们合并在一起供我们的CI系统使用。
更新:命令行执行必须支持Windows,Linux和Mac。我们不允许运送外部蚂蚁,但打包内部蚂蚁可能是一种选择。
答案 0 :(得分:18)
JUnit库没有任何XML输出选项。要实现这一点,您需要编写自己的RunListener,它会监听输出,并在您的情况下编写XML文件。
但是,要以正确的格式获取XML文件以便CI系统可以读取它,我认为使用ant可以更容易,可以通过命令行使用build.xml({{3 }),或使用java api:JUnitReport。
编辑:最初,我们有四个选择:
考虑到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上发布它,所以这个问题可以正确回答: - )