我们有一个部署在JBoss 5.1,JDK 1.6上的应用程序。 我们还有用PowerShell编写的脚本进行测试。这些脚本使用Web服务访问应用程序。 我想检查脚本的代码覆盖率。有任何想法吗? 我看到的大多数工具都在检查JUnit测试覆盖率,但我不知道如何使用它们。
答案 0 :(得分:7)
AFAIK,所有代码覆盖工具都使用相同的概念(我将省略报告和检查部分):
对于第二步,常见用例确实是运行JUnit测试,但您的测试不必是JUnit测试。实际上,他们甚至不需要自动化。
检测代码不必在单元测试的上下文中执行,它可以打包在WAR / EAR中并部署在容器上(这只需要更多的工作)。
对于Cobertura,我们可以在Frequently Asked Questions中阅读:
将Cobertura与Web应用程序一起使用
我有使用的自动化测试 HttpUnit的/的HtmlUnit / Empirix公司/理性 机器人,我可以使用Cobertura吗?
是的!这个过程多一点 涉及,但概念是一样的。 你编译的第一个工具 类。然后创建您的war文件。 然后将war文件部署到您的 应用服务器(Tomcat,JBoss, WebLogic,WebSphere等)。现在跑 你的考试。
随着您的课程被访问,他们 将创建一个“cobertura.ser”文件 磁盘。你可能需要挖掘一下 有点找到它。 Cobertura说明了这一点 提交它认为的文件 当前的工作目录。通常 这是该目录 应用程序服务器是从 (例如,C:\ Tomcat \ bin)注意: 此文件未写入磁盘 直到应用程序服务器退出。 请参阅下文,了解如何解决此问题。
现在你知道了 cobertura.ser文件是,你应该 修改您的部署步骤以便它 将原来的cobertura.ser移动到 您的相应目录 应用程序服务器,然后移动它 完成测试后回来。然后跑 的Cobertura报告。
[...]
对于艾玛来说,这就是documentation所说的:
<强> 3.11。如何在{WebLogic,Websphere,Tomcat,JBoss,...}中使用EMMA?
首先,您几乎没有机会使用动态模式(emmarun)和完整的J2EE容器。原因在于许多J2EE特性需要在EMMA检测类加载器之外进行专门的类加载。服务器可能运行正常,但您可能无法获得覆盖数据。
因此,正确的过程是在部署之前检测您的类(离线模式)。离线检测始终遵循相同的compile / instrument / package / deploy / get coverage / generate报告序列。请按照以下步骤操作:
- 使用EMMA的instr工具来检测所需的类。这可以在打包之前作为后编译步骤完成。但是,许多用户还发现让EMMA直接处理他们的罐子(就地,使用覆盖模式,或者通过在全文模式下创建所有内容的单独的检测副本)很方便;
- 正常进行J2EE打包,但不要将emma.jar包含在此级别的lib中,即在.war,.ear等中;
- 找到容器使用的JRE,并将emma.jar复制到其/ lib / ext目录中。如果这是不可能的,请将emma.jar添加到服务器类路径中(以特定于服务器的方式);
- 部署您的已检测类,.jars,.wars,.ears等,并通过客户端测试用例或以交互方式或以您执行的任何方式练习/测试您的J2EE应用程序;
- 要获取coverage转储文件,您有哪三个选项可用于控制何时EMMA转储运行时覆盖率数据?强烈建议您将coverage.get控制命令与v2.1中提供的ctl工具一起使用。
醇>
对于三叶草,请查看Working with Distributed Applications页面。
答案 1 :(得分:2)
答案 2 :(得分:1)
我建议jacoco,因为它不需要修改源代码。 查看Measuring Code Coverage in (Tomcat) Java Applications with a GreyBox Harness
答案 3 :(得分:0)
Code cover是一个很棒的工具。对于您的情况,您应该使用command-line interface,这可能与现有的PowerShell脚本结合使用。