Python单元测试覆盖率显示异常:如何获取正确的25%覆盖率?
覆盖率计算异常的原因及解决方法
为什么显示62%而不是25%?
coverage.py默认统计的是行覆盖率,不是函数数量的占比。你看到的62%是指被测试用例执行到的代码行数占simple.py总代码行数的比例,而非你以为的「覆盖函数数量/总函数数量」的25%。比如你的multiply函数可能占了更多代码行,其他三个函数的代码行都没被执行,所以行覆盖率显示为62%。
如何获取正确的覆盖率数据?
1. 查看详细行覆盖率(确认哪些行被覆盖)
执行以下命令,终端会直接显示哪些具体代码行未被覆盖,明确行覆盖率的计算依据:
pytest test_simple.py --cov=simple --cov-report=term-missing
2. 获取函数级覆盖率(25%的正确占比)
有两种便捷方式:
- 生成HTML报告查看:
执行命令生成交互式HTML报告:
打开生成的pytest test_simple.py --cov=simple --cov-report=htmlhtmlcov/index.html文件,切换到「Functions」标签,就能看到函数覆盖率(这里会显示25%,即4个函数中仅1个被覆盖)。 - 命令行直接查看函数覆盖率:
执行测试并生成包含函数统计的终端报告:
输出报告里会有类似这样的统计行:pytest test_simple.py --cov=simple --cov-report=term
其中Name Stmts Miss Cover Funcs ------------------------------------- simple.py 10 4 60% 1/4 -------------------------------------Funcs列的1/4就是函数覆盖率(25%)。
3. 补充说明
行覆盖率是行业更常用的覆盖率指标,因为它能反映代码逻辑的实际执行情况(一个函数可能有多个分支,仅进入函数不代表覆盖所有逻辑)。但如果你的需求是统计「已测试函数的数量占比」,就用上面的函数覆盖率查看方法。
内容的提问来源于stack exchange,提问作者turtle_in_mind
相关产品推荐
相关产品推荐

