如何使用Coverage Python API获取测试运行后的覆盖率百分比
Coverage Python API 获取覆盖率百分比操作指引
CoverageData类仅存储采集到的原始执行行、分支执行数据,不直接提供覆盖率百分比计算接口,你可以通过以下两种方式拿到对应数值,适配自定义Markdown报告生成需求:
- 自行基于原始数据计算
你已经可以通过CoverageData.lines(<file>)拿到已覆盖行号,只需要再获取对应文件的总可执行行号即可计算单文件覆盖率。总可执行行不需要自行解析源文件,通过Coverage实例的analysis方法就能直接拿到:from coverage import Coverage # 初始化并加载已跑完的覆盖率数据 cov = Coverage() cov.load() cov_data = cov.get_data() for file in cov_data.measured_files(): # analysis返回元组格式:(文件名, 可执行行号列表, 未覆盖行号列表, 未覆盖行的源码文本) _, executable_lines, _, _ = cov.analysis(file) covered_lines = cov_data.lines(file) or [] # 计算百分比,处理无有效可执行行的空文件场景 if not executable_lines: cover_rate = 100.0 else: cover_rate = round(len(covered_lines) / len(executable_lines) * 100, 2) # 此处可直接将cover_rate写入Markdown报告对应位置 - 直接调用内置分析能力拿预计算结果
如果不想自行实现计算逻辑(尤其是需要统计分支覆盖率的场景),可以直接调用Coverage内置的分析模块拿到已经算好的数值:from coverage import Coverage cov = Coverage(branch=True) # 需要统计分支覆盖率时加branch参数 cov.load() # 整体项目总覆盖率:调用report并把output设为None,返回值就是总覆盖率百分比 total_cover_percent = cov.report(output=None) # 拿单文件的覆盖率(含分支覆盖率) for file_reporter in cov.get_file_reporters(): analysis_result = file_reporter.analysis(cov.get_data()) # 单文件行覆盖率百分比 file_line_cover = analysis_result.numbers.pc_covered # 单文件分支覆盖率百分比(开了branch统计才会有有效值) file_branch_cover = analysis_result.numbers.pc_covered_branches
注意:如果你的测试是在多进程场景下跑的,加载数据前记得先调用
cov.combine()合并所有子进程生成的覆盖率数据文件,否则统计结果会缺失。
内容的提问来源于stack exchange,提问作者suvayu
相关产品推荐
相关产品推荐

