测量远程脚本测试的代码覆盖率

8
我们有一个应用程序部署在JBoss 5.1,JDK 1.6上。我们还编写了PowerShell脚本进行测试。这些脚本使用Web服务访问应用程序。
我想要检查脚本的代码覆盖率。你有什么建议吗?我看到大多数工具都是检查JUnit测试覆盖率,但我不知道如何使用它们。
4个回答

7
据我所知,所有代码覆盖工具都使用相同的概念(我将省略报告和检查部分):
  1. 首先对代码进行仪器化(即放置标记)。
  2. 然后运行测试以执行仪器化的代码(以激活标记并收集数据)。
对于第二步,常见用例确实是运行JUnit测试,但您的测试不必是JUnit测试。实际上,它们甚至不必是自动化的。
仪器化的代码不必在单元测试的上下文中执行,它可以打包在WAR / EAR中并部署在容器上(这只需要更多的工作)。
对于Cobertura,这是我们可以在常见问题中阅读到的内容:

使用 Cobertura 与 Web 应用程序

我有使用 HttpUnit/HtmlUnit/Empirix/Rational Robot 的自动化测试,可以使用 Cobertura 吗?

可以!虽然过程会比较复杂,但概念是相同的。首先对编译后的类进行仪器化。然后创建你的 war 文件。接着将 war 文件部署到应用服务器中(如 Tomcat、JBoss、WebLogic、WebSphere 等)。现在运行你的测试。

当你的类被访问时,它们会在磁盘上创建一个 "cobertura.ser" 文件。你可能需要搜索一下才能找到它。Cobertura 将该文件放在其认为是当前工作目录的位置。通常这是应用服务器启动的目录(例如 C:\Tomcat\bin)。注意:该文件直到应用服务器退出才会被写入磁盘。请参阅下文以了解如何解决此问题。

现在你知道 cobertura.ser 文件的位置,应该修改你的部署步骤,使其将原始的 cobertura.ser 移动到应用服务器中的适当目录,然后在测试完成后将其移回来。然后运行 cobertura-report。

[...]

对于 Emma,文档 上写着:

3.11. 我如何在{WebLogic,Websphere,Tomcat,JBoss等}中使用EMMA? 首先,您很难在完整的J2EE容器中使用即时模式(emmarun)。原因在于许多J2EE功能需要专门的类加载,将在EMMA进行类加载器之外发生。服务器可能运行良好,但您可能无法获得覆盖数据。
因此,在部署之前对您的类进行离线注入是正确的过程。离线注入始终遵循相同的编译/注入/打包/部署/获取覆盖范围/生成报告序列。按照以下步骤操作:
  1. 使用EMMA的instr工具来注入所需的类。这可以作为后编译步骤在打包之前完成。然而,许多用户还发现让EMMA直接处理他们的jar文件非常方便(使用覆盖模式就地处理或通过创建所有内容的单独注入副本);
  2. 按照正常的方式进行J2EE打包,但不要在此级别包括emma.jar作为lib,也就是说,在您的.war,.ear等中不包含emma.jar;
  3. 定位容器使用的任何JRE并将emma.jar复制到其/lib/ext目录中。如果不可能,请以特定于服务器的方式将emma.jar添加到服务器类路径中;
  4. 部署您的注入类,.jars,.wars,.ears等,并通过客户端测试用例交互式地或以任何方式进行J2EE应用程序的测试;
  5. 要获取覆盖率转储文件,您有三个选项,这些选项在"哪些选项可用于控制EMMA何时转储运行时覆盖数据?"中有描述。强烈建议使用v2.1中提供的ctl工具和coverage.get control命令。
对于Clover,请查看使用分布式应用程序页面。

2
我使用集成了单元测试项目构建阶段的 emma 覆盖工具,然而,该工具的文档表示在你所描述的情况下获取代码覆盖率相当简单。

1
你好,能否解释一下如何在Maven测试阶段中集成EMMA?我也需要做同样的事情。非常感谢! - Antonio Petricca

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接