pytest-cov 是一个用于在使用 pytest 测试框架时提供代码覆盖率报告的插件。它通过集成 coverage.py 来收集测试覆盖率数据,并生成易于理解的报告。
以下是 pytest-cov 的详细说明以及一些使用示例:
安装
首先,您需要安装 pytest 和 pytest-cov。可以使用以下命令通过 pip 安装它们:
pip install pytest pytest-cov
一旦您安装好了 pytest-cov,可以在执行 pytest 时添加 --cov 选项来生成覆盖率报告。
假设您有以下的 Python 项目结构:
my_project/
│
├── src/
│ └── my_module.py
└── tests/
└── test_my_module.py
假设 my_module.py 中有以下代码:
def my_add_func(a, b):
if isinstance(a, int) and isinstance(b, int):
return a + b
elif isinstance(a, float) and isinstance(b, float):
return a + b
elif isinstance(a, str) and isinstance(b, str):
return a + b
elif isinstance(a, int) and isinstance(b, str):
return str(a) + b
elif isinstance(a, list) and isinstance(b, list):
return a + b
else:
return None
# tests/test_my_module.py
from add_fun import my_add_func
import math
def test_my_add_func_case_1():
assert my_add_func(1, 2) == 3
def test_my_add_func_case_2():
assert math.fabs(my_add_func(1.1, 2.2) - 3.3) < 1e-9
def test_my_add_func_case_3():
assert my_add_func("a", "b") == "ab"
在项目的根目录运行以下命令:
pytest -v .\test_fun.py --cov
======================================================================================================== test session starts ========================================================================================================
platform win32 -- Python 3.8.2, pytest-5.4.2, py-1.11.0, pluggy-0.13.1 -- D:\python38\python.exe
cachedir: .pytest_cache
rootdir: D:\test
plugins: allure-pytest-2.8.16, anyio-4.4.0, Faker-30.8.2, cov-5.0.0
collected 3 items
test_fun.py::test_my_add_func_case_1 PASSED [ 33%]
test_fun.py::test_my_add_func_case_2 PASSED [ 66%]
test_fun.py::test_my_add_func_case_3 PASSED [100%]
----------- coverage: platform win32, python 3.8.2-final-0 -----------
Name Stmts Miss Cover
---------------------------------
add_fun.py 12 5 58%
test_fun.py 8 0 100%
---------------------------------
TOTAL 20 5 75%
========================================================================================================= 3 passed in 0.39s =========================================================================================================
从上面的执行结果可以看到,test_fun里每个函数都执行率为100%,但是add_fun里函数的覆盖率只有58%,说明其中有部分判断没有覆盖到。
除了基本的报告,您还可以生成 HTML 报告,以便更好地查看覆盖率,可以使用:
pytest -v .\test_fun.py --cov --cov-report=html
这将生成一个 htmlcov 目录,其中包含一个可通过浏览器查看的 HTML 报告。
您还可以生成其他格式的报告,例如:
–cov-report=term-missing:在终端中显示缺少覆盖率的行。
–cov-report=xml:生成 XML 格式的报告。
通过 pytest-cov,您可以方便地整合测试和代码覆盖率,获得对测试效果的直观反馈。这对确保代码质量和稳定性非常有帮助。上述示例展示了 pytest-cov 的基本用法,您可以根据需要进一步定制报告和配置。