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

在Azure Pipelines中用pytest发布Python项目覆盖率并解决0%显示问题

解决方案

你遇到的Azure Pipelines覆盖率显示为0%的问题,可通过以下步骤排查修复:

1. 先排查本地运行是否正常

在本地开发环境执行你yaml配置里的pytest命令,打开生成的htmlcov/index.html查看覆盖率是否正常:

  • 如果本地覆盖率同样为0%,说明是pytest-cov的配置问题,优先排查下文的路径和包安装问题
  • 如果本地覆盖率正常,说明是Azure Pipelines的路径匹配或任务配置问题

2. 修复包安装和cov路径匹配问题

90%以上的此类问题都是因为pip install .后,pytest导入的是site-packages下的安装包,而非本地src_dir目录下的源码,导致cov统计路径和实际运行代码路径不匹配。
可以选择以下任意一种方案修复:

  • 方案一:将安装命令改为可编辑模式安装,导入模块时直接指向本地src_dir源码
  • 方案二:不需要修改安装命令,直接将--cov参数的值改为你的Python包名
- bash: |
    # 方案一:加-e参数使用可编辑模式安装
    pip install -e .[test]
    pip install pytest pytest-azurepipelines pytest-cov
    # 搭配方案一使用:--cov传绝对路径避免识别错误
    pytest --junitxml=junit.xml --cov=$(System.DefaultWorkingDirectory)/src_dir --cov-report=xml --cov-report=html tests

    # 方案二(不需要加-e安装时使用):把--cov的值替换成你的实际包名即可,比如包名为myutils就写--cov=myutils
    # pytest --junitxml=junit.xml --cov=你的包名 --cov-report=xml --cov-report=html tests
  displayName: Test

3. 调整Pipeline任务配置

先发布测试结果再发布覆盖率,同时也可以使用新版的覆盖率发布任务提升兼容性:

# 先发布JUnit测试结果,避免顺序异常导致覆盖率统计失败
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit'
    testResultsFiles: '$(System.DefaultWorkingDirectory)/junit.xml'
  condition: succeededOrFailed()

# 用v2版本发布覆盖率,不需要手动指定工具类型,自动识别Cobertura格式
- task: PublishCodeCoverageResults@2
  inputs:
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
    reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov'
  condition: succeededOrFailed()

4. 可选排查步骤

如果以上操作后还是异常,可以加一个临时步骤打印coverage.xml的内容,确认文件本身是否有正常的覆盖率数据:

- bash: cat coverage.xml
  displayName: 打印覆盖率报告内容排查
  condition: succeededOrFailed()

内容的提问来源于stack exchange,提问作者Seeker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:54:03