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

liv*_*eer 8 java testing jboss code-coverage

我们有一个部署在JBoss 5.1,JDK 1.6 上的应用程序.我们还有用PowerShell编写的脚本进行测试.这些脚本使用Web服务访问应用程序.我想检查脚本的代码覆盖率.有任何想法吗?我看到的大多数工具都在检查JUnit测试覆盖率,但我看不出我们如何使用它们.

Pas*_*ent 7

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

  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?

首先,您几乎没有机会使用动态模式(emmarun)和完整的J2EE容器.原因在于许多J2EE特性需要在EMMA检测类加载器之外进行专门的类加载.服务器可能正常运行,但您可能无法获得覆盖数据.

因此,正确的过程是在部署之前检测您的类(离线模式).离线检测始终遵循相同的compile/instrument/package/deploy/get coverage/generate报告序列.跟着这些步骤:

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

对于三叶草,请选中" 使用分布式应用程序"页面.


den*_*nov 2

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