pytest-cov 是一个用于测量 Python 代码测试覆盖率的 pytest 插件。它允许你在运行测试时自动收集覆盖率数据,并在测试完成后显示一个详细的报告。这对于确保你的代码库被充分测试非常有用。以下是如何使用 pytest-cov 的基本步骤:

安装

首先,你需要确保已经安装了 pytest。如果尚未安装,可以通过 pip 安装它:

1
pip install pytest

然后,安装 pytest-cov

1
pip install pytest-cov

使用

安装后,你可以在命令行中使用 --cov 选项来运行 pytest 并收集覆盖率数据。

示例

假设你的项目结构如下:

1
2
3
4
5
6
7
8
your_project/  

├── your_module/
│ ├── __init__.py
│ └── your_script.py

└── tests/
└── test_your_script.py

在命令行中,你可以运行以下命令来收集 your_module 目录下的代码覆盖率数据:

1
pytest --cov=your_module

这将在测试运行后显示一个覆盖率摘要,并生成一个 HTML 报告(如果配置了的话,但默认情况下可能只显示命令行报告)。

配置

虽然 pytest-cov 提供了许多命令行选项,但你可能希望将配置放入项目的 pytest.inisetup.cfg 文件中,以便更容易地复用配置。

pytest.ini 示例

1
2
[pytest]  
addopts = --cov=your_module --cov-report=term-missing --cov-fail-under=90

这个配置会添加三个选项到每次 pytest 运行中:

  • --cov=your_module:指定要测量覆盖率的模块或包。
  • --cov-report=term-missing:在终端中生成一个包含缺失行的报告。
  • --cov-fail-under=90:如果覆盖率低于 90%,则让 pytest 失败。

报告

pytest-cov 支持多种报告格式,包括但不限于:

  • 终端报告(默认)
  • HTML
  • XML
  • Annotate(将覆盖率数据直接添加到源代码中)

你可以通过命令行选项(如 --cov-report=html)或配置文件来选择不同的报告格式。

注意事项

  • 确保你的测试目录(如 tests/)没有被包含在覆盖率测量中,除非你想测量测试代码本身。
  • 使用 pytest-cov 可能会使测试运行稍微变慢,因为它需要追踪执行了哪些代码行。
  • 覆盖率是一个有用的指标,但它不是衡量测试质量的唯一标准。确保你的测试覆盖了所有重要的逻辑路径和边界情况。