欢迎访问宙启技术站
智能推送

pytest框架的安装和配置

发布时间:2024-01-05 17:40:39

pytest 是一个功能强大的 Python 测试框架,具有简单易用、灵活可扩展的特点。它支持丰富的测试用例编写和运行,并且集成了丰富的插件和工具,可以方便地进行测试组织、测试报告生成、测试覆盖率分析等。本文将介绍 pytest 框架的安装和配置,并给出一些使用例子。

## 安装pytest框架

使用 pip 安装 pytest 框架非常简单。在命令行中执行如下命令即可安装最新版本的 pytest:

pip install pytest

pytest 框架自动安装所需的依赖包,安装完成后可以使用 pytest --version 命令检查安装的版本。

## 编写测试用例

pytest 框架使用 test_ 前缀定义测试用例函数,并使用 assert 断言进行断言判断。下面是一个简单的测试用例例子:

def test_add():
    result = 2 + 2
    assert result == 4

## 运行测试用例

使用 pytest 运行测试用例非常简单,只需要在命令行中执行 pytest 命令,pytest 框架会自动搜索当前目录及子目录下符合要求的测试文件并运行。

pytest

下面是运行结果示例:

=========================================================== test session starts ============================================================
platform darwin -- Python 3.9.7, pytest-6.2.4, py-1.10.0, pluggy-1.0.0
rootdir: /Users/user/project
collected 1 item                                                                                                                                

test_example.py .

可以看到运行结果显示了运行的测试文件和测试结果,. 表示测试通过。

## 参数化测试

pytest 框架支持使用 @pytest.mark.parametrize 装饰器进行参数化测试,可以方便地对多组参数进行测试。下面是一个参数化测试的例子:

import pytest

@pytest.mark.parametrize("a, b, expected", [
    (1, 2, 3),
    (3, 4, 7),
    (5, 5, 10)
])
def test_add(a, b, expected):
    result = a + b
    assert result == expected

在上面的例子中,@pytest.mark.parametrize 装饰器定义了 a, b, expected 这三个参数的取值范围,分别为 (1, 2, 3), (3, 4, 7), (5, 5, 10)。pytest 框架会自动根据这些参数组合生成对应的测试用例,并依次执行。

## 文档测试

pytest 框架还支持运行文档测试,可以在文档字符串中编写测试用例并执行。文档测试用例以 >>> 开头,并在同一行注释中写下期望的输出。下面是一个文档测试的例子:

def add(x, y):
    """
    Function to add two numbers.

    >>> add(2, 2)
    4
    >>> add(3, 5)
    8
    >>> add(-1, 1)
    0
    """
    return x + y

使用 pytest --doctest-modules 命令运行文档测试,并输出详细结果。

pytest --doctest-modules

## 钩子函数

pytest 框架提供了多种钩子函数,可以对测试过程进行自定义操作或扩展 pytest 框架的功能。下面是几个常用的钩子函数:

- pytest_configure(config): 执行 pytest 命令之前的配置操作。

- pytest_sessionstart(session): 执行 pytest 命令之前的初始化操作。

- pytest_sessionfinish(session, exitstatus): 执行 pytest 命令之后的收尾操作。

- pytest_collection_modifyitems(config, items): 对收集到的测试用例进行自定义修改。

- pytest_itemcollected(item): 每次收集到一个测试用例时执行的操作。

- pytest_runtest_protocol(item, nextitem): 执行每个测试用例前后的操作。

通过编写钩子函数可以为 pytest 框架添加各种自定义功能和扩展。

## 测试报告生成

pytest 框架支持生成多种测试报告,可以方便地查看测试结果并进行分析。常用的测试报告插件有 pytest-html 插件和 pytest-xdist 插件。

首先安装 pytest-html 插件:

pip install pytest-html

然后使用如下命令运行测试用例,并生成 HTML 格式的测试报告:

pytest --html=report.html

使用 --self-contained-html 选项可以生成一个完全独立的 HTML 报告,所有的 CSS、JavaScript 都内嵌在 HTML 文件中,方便分享和传播。

也可以安装 pytest-xdist 插件,它可以实现测试用例的并发执行,并生成测试报告。

pip install pytest-xdist

通过 pytest -n NUM 命令指定并发的进程数,例如:

pytest -n 4

## 测试覆盖率分析

pytest 框架还支持测试覆盖率分析,可以通过 pytest-cov 插件来实现。首先安装 pytest-cov 插件:

pip install pytest-cov

然后使用 --cov 选项运行测试用例,并生成代码覆盖率报告:

pytest --cov=path/to/code

通过 --cov-report 选项指定代码覆盖率报告的格式,默认为 term(在终端输出),也可以指定为 html(生成 HTML 格式的报告)。

pytest --cov=path/to/code --cov-report term

通过代码覆盖率报告,可以清晰地了解测试用例对代码的覆盖情况,帮助发现测试用例的不足和代码的死角。

到这里,我们就介绍了 pytest 框架的安装和配置,并给出了一些使用例子。pytest 框架具有强大的功能和灵活的扩展性,在日常的测试工作中非常实用。通过合理使用 pytest 框架,可以提升测试效率和测试代码的质量。