显示两个测试覆盖率运行的差异
我正在为一些旧的、没人维护的代码写测试。我发现coverage.py这个工具对我决定接下来写哪个测试很有帮助。随着我不断改进我们的测试,我想看看这些改进对测试覆盖率的影响。
目前,我是通过在两个浏览器窗口中同时打开html报告,目测找出差异。这种方法感觉很粗糙。有没有人有更好的解决办法?
我找到了z3c.coverage,但在让zope-testrunner与我们的测试配合时遇到了一些麻烦,最后发现它只报告回归问题,而不是改进。我可以把输入反过来,这样改进就会看起来像是回归,但这样给别人展示会很困惑。
2 个回答
0
我之前也遇到过类似的情况。我想看看代码的覆盖率有没有下降,但没有简单的方法可以做到这一点。于是,我写了一些Python脚本和一个Shell脚本,效果很好,现在我已经把它放到Jenkins上用了。
步骤
- 保存之前的报告和当前的报告(比如叫 report.prev 和 report.curr)
报告的文本格式:(这是默认格式,解析起来比较简单)
Name Stmts Miss Cover
------------------------------------------------------------------------------
my/project/example.py 3 3 0%
把报告解析成一个映射表,里面的键值对是 { 文件名 : 覆盖率百分比 }
举个例子:
previous_run = { '/my/filename.py' : '67', '/one/more/file.py' : '89' } current_run = { '/my/filename.py' : '67', '/one/more/file.py' : '89' }
然后我们可以比较这两个映射表(current_run 和 previous_run)
在生成新的报告时,更新文件:也就是说,把当前的报告文件移动到之前的报告(用命令 'mv report.curr report.prev'),然后把新的文件命名为 report.curr
我把完整的实现放在这里了: https://github.com/diganthdr/handytools 可以查看 (coverage_compare.py)
2
Coverage.py没有比较差异的功能。听起来不错,不过你想提供一个补丁吗? :)