You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:15:42