Python中pytest-cov使用详解

说明:

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

test_my_module.py 中有以下测试代码:

# 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 的基本用法,您可以根据需要进一步定制报告和配置。

你可能感兴趣的:(Python,python,pytest,windows)