
本文将指导你如何在 GitHub 上配置 Python 项目的代码覆盖率,以便每次推送时都能自动生成覆盖率报告。我们将使用 pytest-cov 工具来生成覆盖率数据,并将其上传到 Codecov 等平台进行可视化展示,从而帮助你更好地了解代码的测试情况。
使用 pytest-cov 生成覆盖率报告
pytest-cov 是一个 pytest 插件,它可以方便地生成代码覆盖率报告。 要使用它,首先需要安装它:
pip install pytest-cov
接下来,在运行 pytest 时,使用 --cov 选项指定要覆盖的目录。通常,我们会覆盖包含源代码的目录。 例如,如果你的源代码位于 src 目录下,则可以这样运行 pytest:
pytest --cov=src tests/
这会运行你的测试,并生成一个覆盖率报告。默认情况下,该报告会输出到控制台。
立即学习“Python免费学习笔记(深入)”;
配置 GitHub Actions 自动生成覆盖率报告
为了在每次推送时自动生成覆盖率报告,我们需要配置 GitHub Actions。 修改你的 .github/workflows/github-actions.yaml 文件,使其包含以下步骤:
name: Python CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Test with pytest and coverage
run: |
pip install pytest pytest-cov
pytest --cov=. tests/
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }} # 可选,如果你的项目是私有的
flags: unittests
name: codecov-umbrella解释:
- 安装依赖: 确保 pytest 和 pytest-cov 已安装。
- 运行测试并生成覆盖率报告: 使用 pytest --cov=. tests/ 命令运行测试,并生成覆盖率数据。--cov=. 指示 pytest 覆盖当前目录及其子目录。 你可以根据实际情况修改覆盖的目录。
- 上传覆盖率报告到 Codecov: 使用 codecov/codecov-action@v3 action 将覆盖率报告上传到 Codecov。你需要一个 Codecov 账号,并且可能需要在 GitHub 项目的 Secrets 中配置 CODECOV_TOKEN (如果你的仓库是私有的)。
Codecov 的使用 (可选)
Codecov 是一个代码覆盖率分析平台,它可以将你的覆盖率报告可视化,并提供一些有用的功能,例如:
- 覆盖率历史记录: 查看覆盖率随时间的变化。
- 代码高亮显示: 突出显示未被测试覆盖的代码行。
- Pull Request 集成: 在 Pull Request 中显示覆盖率变化。
要使用 Codecov,你需要:
- 注册一个 Codecov 账号。
- 在 GitHub 项目中启用 Codecov 集成。
- 在 GitHub Actions 中配置 Codecov token (如果你的仓库是私有的)。
注意事项
- 确保你的测试覆盖了尽可能多的代码。
- 定期检查覆盖率报告,并根据需要改进测试。
- 考虑使用其他代码覆盖率工具,例如 coverage.py。
- 根据你的项目结构调整 --cov 参数。
总结
通过使用 pytest-cov 和 GitHub Actions,你可以轻松地在 GitHub 上配置 Python 项目的代码覆盖率。 这可以帮助你更好地了解代码的测试情况,并提高代码质量。 Codecov 等平台可以进一步增强覆盖率分析和可视化。 记住,代码覆盖率只是代码质量的一个指标,不要过度依赖它。 编写高质量的测试用例才是最重要的。










