显示两个测试覆盖率运行的差异

0 投票
2 回答
1003 浏览
提问于 2025-04-17 17:54

我正在为一些旧的、没人维护的代码写测试。我发现coverage.py这个工具对我决定接下来写哪个测试很有帮助。随着我不断改进我们的测试,我想看看这些改进对测试覆盖率的影响。

目前,我是通过在两个浏览器窗口中同时打开html报告,目测找出差异。这种方法感觉很粗糙。有没有人有更好的解决办法?

我找到了z3c.coverage,但在让zope-testrunner与我们的测试配合时遇到了一些麻烦,最后发现它只报告回归问题,而不是改进。我可以把输入反过来,这样改进就会看起来像是回归,但这样给别人展示会很困惑。

2 个回答

0

我之前也遇到过类似的情况。我想看看代码的覆盖率有没有下降,但没有简单的方法可以做到这一点。于是,我写了一些Python脚本和一个Shell脚本,效果很好,现在我已经把它放到Jenkins上用了。

步骤

  1. 保存之前的报告和当前的报告(比如叫 report.prev 和 report.curr)

报告的文本格式:(这是默认格式,解析起来比较简单)

Name                                     Stmts   Miss  Cover
------------------------------------------------------------------------------
my/project/example.py                     3      3     0%
  1. 把报告解析成一个映射表,里面的键值对是 { 文件名 : 覆盖率百分比 }

    举个例子:

previous_run = { 
    '/my/filename.py' : '67', 
    '/one/more/file.py' : '89'
}

current_run = {
    '/my/filename.py' : '67',
    '/one/more/file.py' : '89'
}
  1. 然后我们可以比较这两个映射表(current_run 和 previous_run)

  2. 在生成新的报告时,更新文件:也就是说,把当前的报告文件移动到之前的报告(用命令 'mv report.curr report.prev'),然后把新的文件命名为 report.curr

我把完整的实现放在这里了: https://github.com/diganthdr/handytools 可以查看 (coverage_compare.py)

2

Coverage.py没有比较差异的功能。听起来不错,不过你想提供一个补丁吗? :)

撰写回答