pytest框架的安装和配置
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 框架,可以提升测试效率和测试代码的质量。
