完成插装工作以后,测试人员可以按照测试计划运行测试用例。 EMMA 将在测试执行的过程中记录代码执行信息并将结果记录在内存中。每次当 JVM 停止时,内存中记录的执行信息将被清除并被保存到 “*.ec” 的文件中。但是在实际测试的过程中, JVM 的停止很难控制,因此测试人员可以定时手动将内存中执行信息写出。在这种情况下,内存中的记录被输出,但是内存中的内容不被清除。清单5-7介绍了收集覆盖率信息以及生成覆盖率信息报告的命令。
清单 6. 从远程机器上收集覆盖率信息
清单 7. 从本地收集覆盖率信息
这样收集到的信息被保存在 “coverage.ec” 中, “coverage.ec” 是二进制格式的文件,因此很难被用来查看覆盖率结果。
清单 8. 生成覆盖率报告
在生成覆盖率报告的过程中,测试人员可以根据测试要求通过 “Dreport.metrics” 参数设定满意的覆盖率标准。在示例命令中设定了类覆盖率的满意度为80%。
测试报告可以以 HTML ,文本和 XML 三种格式输出。图1、图2为 HTML 格式的报告的例子。覆盖率的报告是以包、类、方法三级单位组织的。图1是 Index 类的执行情况,其中红颜色代表该覆盖率未达到满意的覆盖率标准。图2则是包 org.numberquiz 中 QuizBran 类的执行情况,从总体看,类覆盖率为100%,方法为91%。在附录中可以看到示例程序完整的测试覆盖率报告。
图 1. Index 测试报告
图 2. QuizBran 测试报告
在功能测试过程中,为每个单独的测试用例生成独立的覆盖率报告能够给测试过程带来很大的帮助:
当测试用例失败或者抛出异常时,可以通过覆盖率报告找到该测试用例对应的代码,这样就可以为测试人员提供可能出错代码的范围。这一报告不仅可以帮助测试人员在提交问题时更加详细的描述错误,提供更详细的信息,还可以为开发人员跟踪问题提供线索,缩短解决问题的周期。
测试人员可以从独立的测试报告中获得代码和功能模块的对应关系,更好的理解测试用例的作用。
独立的测试报告可以帮助测试人员改进测试用例的设计,删除重复的测试用例,将覆盖点较多的测试用例进行拆分。
为得到独立的测试报告,需要在每次执行测试用例前,将内存中的执行信息清除。目前有两种方法支持清除记录,测试人员可在测试过程中,根据需要选择合适的方法。
每次运行完一个测试用例,重启 JVM 。这种方法能够完整的清除内存中记录的执行信息,但是每次重启 JVM 给测试带来很多麻烦。
使用 “coverage.reset” 命令,该命令可以在不重启 JVM 的情况下,清除内存中记录的方法、块、行的执行信息,但是无法清除类覆盖信息。如果用户关注的重点在方法的覆盖信息上,可以选择这种方法。
清单 9. 清除内存中覆盖率信息命令
合并覆盖率结果
完成所用的测试用例后,测试覆盖信息可以被合并在一起,得到整个测试的覆盖报告。覆盖率结果文件通过 “merge” 命令合并 “*.ec” 文件实现的。
另外,由于 EMMA 中测试覆盖率是通过与 “*.em” 文件关联获得代码信息的,因此当代码发生变化时,已经运行过的测试不必完全重复,只需将得到的 “*.ec” 文件合并(新得到的 “*.ec” 文件放在后面),然后关联最新的 “*.em” 文件即可得到代码变化后的覆盖率信息,这方便了 EMMA 支持版本变化的测试。在生成新的测试报告的时候,需要注意 “*.ec” 的时间一定要晚于 “*.em” 文件。
清单 9. 合并覆盖率结果命令
原文转自:http://www.testwo.com/article/591