📅  最后修改于: 2023-12-03 15:10:06.997000             🧑  作者: Mango
pytest
是一个功能丰富,适用于所有类型的测试的Python测试框架。它支持单元测试、功能测试、性能测试、集成测试等多种测试类型。
pytest
内置了assert语句和日志记录功能,支持多种插件,可以将测试结果输出为HTML报告、JUnit XML报告等。同时,pytest
还具有简单直观的测试代码编写方式,易于上手。
pip install pytest
在编写测试代码时,我们需要遵循一定的规范来保证pytest
能够自动识别和执行我们编写的测试函数。具体规范如下:
test_
开头。fixture
作为参数,使用@pytest.fixture()
装饰器即可。assert
语句。下面来看一个简单的示例:
# test_example.py
def test_addition():
assert 1 + 2 == 3
运行测试用例很简单,只需要在终端中执行pytest
命令即可。pytest
默认会在当前目录和子目录下查找所有以test_
开头的测试文件,并执行其中所有的测试函数。
pytest
有些时候,我们需要对一组数据进行相同的测试操作,这时可以使用参数化测试。pytest
提供了@pytest.mark.parametrize
装饰器,可以将测试数据和测试函数进行绑定,自动化生成多个测试用例。下面来看一个简单的示例:
# test_parametrize.py
import pytest
@pytest.mark.parametrize("x, y, expected", [
(1, 2, 3),
(0, 1, 1),
(-1, 2, 1),
(10, -2, 8)
])
def test_addition(x, y, expected):
assert x + y == expected
pytest
提供了fixture
机制,用于提供测试用例中需要的共享数据。开发者可以定制化定义fixture
,通过@pytest.fixture()
装饰器将其标记为一个fixture
。这些fixture
可以作为参数被测试用例调用,使得开发者能够更加方便地共享测试数据。
# conftest.py
import pytest
@pytest.fixture()
def prepared_data():
data = ["foo", "bar", "baz", "qux", "quux"]
return data
# test_fixture.py
def test_filter(prepared_data):
filtered_data = [word for word in prepared_data if "o" not in word]
assert filtered_data == ["bar", "baz", "qux", "quux"]
pytest
提供了很多插件,可以扩展其功能。例如,pytest-html
插件可以输出HTML格式的测试报告。在使用插件时,需要先安装插件,然后在pytest.ini
文件中声明插件名称。
# 安装 pytest-html 插件
pip install pytest-html
# pytest.ini
[pytest]
addopts = --html=report.html
# 运行 pytest,生成 HTML 格式的测试报告
pytest --html report.html
pytest
是一个功能丰富,易用灵活的Python测试框架,可以帮助开发者编写高质量的测试用例。希望本文能够帮助开发者更加深入地了解pytest
。