【发布时间】:2010-12-12 05:18:47
【问题描述】:
我们有一个部署在JBoss 5.1、JDK 1.6 上的应用程序。 我们还有用PowerShell 编写的脚本用于测试。这些脚本使用网络服务访问应用程序。
我想检查脚本的代码覆盖率。有任何想法吗?我看到的大多数工具都在检查 JUnit 测试覆盖率,但我不知道如何使用它们。
【问题讨论】:
标签: java testing jboss code-coverage
我们有一个部署在JBoss 5.1、JDK 1.6 上的应用程序。 我们还有用PowerShell 编写的脚本用于测试。这些脚本使用网络服务访问应用程序。
我想检查脚本的代码覆盖率。有任何想法吗?我看到的大多数工具都在检查 JUnit 测试覆盖率,但我不知道如何使用它们。
【问题讨论】:
标签: java testing jboss code-coverage
【讨论】:
AFAIK,所有代码覆盖率工具都使用相同的概念(我将省略报告和检查部分):
对于第二步,常见的用例确实是运行 JUnit 测试,但您的测试不必是 JUnit 测试。实际上,它们甚至不必自动化。
检测代码不必在单元测试的上下文中执行,它可以打包在 WAR/EAR 中并部署在容器上(这将需要更多的工作)。
对于 Cobertura,这是我们可以在 Frequently Asked Questions 中看到的内容:
通过 Web 应用程序使用 Cobertura
我有自动化测试使用 HttpUnit/HtmlUnit/Empirix/Rational 机器人,我可以使用 Cobertura 吗?
是的!过程有点多 涉及,但概念是相同的。 首先仪器你编译 类。然后创建你的战争文件。 然后将war文件部署到您的 应用服务器(Tomcat、JBoss、 WebLogic、WebSphere 等)。现在运行 你的测试。
当您的课程被访问时,他们 将创建一个“cobertura.ser”文件 磁盘。你可能需要挖掘一个 有点找到它。 Cobertura 把这个 归档在它认为是 当前工作目录。通常 这是目录 应用程序服务器从 (例如,C:\Tomcat\bin) 注意: 此文件未写入磁盘 直到应用服务器退出。 请参阅下文了解如何解决此问题。
现在你知道了 cobertura.ser 文件是,你应该 修改您的部署步骤,使其 将原来的 cobertura.ser 移动到 在你的适当目录 应用服务器,然后移动它 完成测试后返回。然后运行 cobertura 报告。
[...]
对于 Emma,documentation 是这样说的:
3.11。如何在 {WebLogic、Websphere、Tomcat、JBoss、...} 中使用 EMMA?
首先,您几乎不可能在成熟的 J2EE 容器中使用 on-the-fly 模式 (emmarun)。原因在于许多 J2EE 特性需要专门的类加载,这将在 EMMA 检测类加载器之外发生。服务器可能运行良好,但您可能得不到覆盖率数据。
因此,正确的过程是在部署之前检测您的类(离线模式)。离线检测始终遵循相同的编译/检测/打包/部署/获取覆盖率/生成报告顺序。请按以下步骤操作:
- 使用 EMMA 的 instr 工具来检测所需的类。这可以在打包之前作为编译后步骤来完成。然而,许多用户也发现让 EMMA 直接处理他们的 jar 文件很方便(就地处理,使用覆盖模式,或者通过创建所有内容的单独检测副本,以完全复制模式);
- 照常进行 J2EE 打包,但不要将 emma.jar 作为库包含在此级别,即在您的 .war、.ear 等中;
- 找到容器使用的 JRE 并将 emma.jar 复制到其 /lib/ext 目录中。如果这不可能,请将 emma.jar 添加到服务器类路径(以特定于服务器的方式);
- 部署您的检测类、.jars、.wars、.ears 等,并通过您的客户端测试用例或交互方式或您执行的任何方式来练习/测试您的 J2EE 应用程序;
- 要获取覆盖转储文件,您可以使用哪些选项来控制 EMMA 转储运行时覆盖数据的时间?中描述的三个选项。强烈建议您将coverage.get 控制命令与v2.1 中提供的ctl 工具一起使用。
对于三叶草,请查看Working with Distributed Applications 页面。
【讨论】:
Code cover 是一个很棒的工具。对于您的情况,您应该使用command-line interface,它可能会与现有的 PowerShell 脚本结合使用。
【讨论】: