【问题标题】:Measure code coverage for remote scripting tests [closed]测量远程脚本测试的代码覆盖率[关闭]
【发布时间】:2010-12-12 05:18:47
【问题描述】:

我们有一个部署在JBoss 5.1、JDK 1.6 上的应用程序。 我们还有用PowerShell 编写的脚本用于测试。这些脚本使用网络服务访问应用程序。

我想检查脚本的代码覆盖率。有任何想法吗?我看到的大多数工具都在检查 JUnit 测试覆盖率,但我不知道如何使用它们。

【问题讨论】:

    标签: java testing jboss code-coverage


    【解决方案1】:

    我建议jacoco,因为它不需要修改源代码。 查看Measuring Code Coverage in (Tomcat) Java Applications with a GreyBox Harness

    【讨论】:

      【解决方案2】:

      AFAIK,所有代码覆盖率工具都使用相同的概念(我将省略报告和检查部分):

      1. 首先检测代码(即放置标记)。
      2. 然后运行测试以执行检测代码(以激活标记和收集数据)。

      对于第二步,常见的用例确实是运行 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 检测类加载器之外发生。服务器可能运行良好,但您可能得不到覆盖率数据。

      因此,正确的过程是在部署之前检测您的类(离线模式)。离线检测始终遵循相同的编译/检测/打包/部署/获取覆盖率/生成报告顺序。请按以下步骤操作:

      1. 使用 EMMA 的 instr 工具来检测所需的类。这可以在打包之前作为编译后步骤来完成。然而,许多用户也发现让 EMMA 直接处理他们的 jar 文件很方便(就地处理,使用覆盖模式,或者通过创建所有内容的单独检测副本,以完全复制模式);
      2. 照常进行 J2EE 打包,但不要将 emma.jar 作为库包含在此级别,即在您的 .war、.ear 等中;
      3. 找到容器使用的 JRE 并将 emma.jar 复制到其 /lib/ext 目录中。如果这不可能,请将 emma.jar 添加到服务器类路径(以特定于服务器的方式);
      4. 部署您的检测类、.jars、.wars、.ears 等,并通过您的客户端测试用例或交互方式或您执行的任何方式来练习/测试您的 J2EE 应用程序;
      5. 要获取覆盖转储文件,您可以使用哪些选项来控制 EMMA 转储运行时覆盖数据的时间?中描述的三个选项。强烈建议您将coverage.get 控制命令与v2.1 中提供的ctl 工具一起使用。

      对于三叶草,请查看Working with Distributed Applications 页面。

      【讨论】:

        【解决方案3】:

        Code cover 是一个很棒的工具。对于您的情况,您应该使用command-line interface,它可能会与现有的 PowerShell 脚本结合使用。

        【讨论】:

          【解决方案4】:

          我使用与单元测试项目构建阶段集成的emma 覆盖工具,但是,工具的文档says 在您描述的情况下获得代码覆盖相当简单。

          【讨论】:

          • 嗨,您能解释一下如何将 EMMA 集成到 Maven 测试阶段吗?我需要做同样的事情。非常感谢!
          猜你喜欢
          • 1970-01-01
          • 2019-01-18
          • 1970-01-01
          • 2023-03-04
          • 1970-01-01
          • 1970-01-01
          • 2018-03-06
          • 2018-06-05
          • 1970-01-01
          相关资源
          最近更新 更多