【问题标题】:Generating JUnit reports from the command line从命令行生成 JUnit 报告
【发布时间】:2012-09-16 08:56:39
【问题描述】:

我有一个云系统的测试设置,它混合使用 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。我们不允许运送外部蚂蚁,尽管包装内部蚂蚁可能是一种选择。

【问题讨论】:

  • Windows 还是 Unix(就命令行而言)?

标签: junit continuous-integration junit4


【解决方案1】:

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

但是,要以正确的格式获取 XML 文件以便 CI 系统可以读取它,我认为使用 ant 会容易得多,或者通过命令行使用 build.xml (JUnitReport ),或使用 java api:How can i use Apache ANT Programmatically

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

  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 上,这样这个问题就可以得到正确的回答:-)

【讨论】:

  • 对不起,我似乎无法使换行符出现...如果我理解正确,您建议我应该:1)包含 ant jar 2)编写自定义 main 3)添加 ant jar 的 RunListener 到 JUnitCore 实例 4) 让它撕裂?还是有更短的形式 1) 包括 ant jar 2) 更直接地调用它,它将处理 JUnitCore 部分?
  • Ant 调用 junit,它运行测试。因此,您将为它提供一个 build.xml,然后调用 ant。最简单的方法是确保 ant 安装在系统的某个位置,然后从命令行执行。而不是 java... 你会有 ant...
  • 唉,需要安装 ant 是我不能做的事情之一。这条消息是从高处传下来的。
  • 谢谢,我担心答案看起来像那样,但绝对有帮助。
  • 我在SchmantAntXmlRunListener的下载之一中发现了这样一个RunListener。我将所需的类提取到github.com/barrypitman/JUnitXmlFormatter 以方便参考。
猜你喜欢
  • 1970-01-01
  • 2021-07-20
  • 2014-09-26
  • 2017-02-25
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
相关资源
最近更新 更多