📜  拆解模块 pytest (1)

📅  最后修改于: 2023-12-03 15:10:06.997000             🧑  作者: Mango

拆解模块 pytest

简介

pytest是一个功能丰富,适用于所有类型的测试的Python测试框架。它支持单元测试、功能测试、性能测试、集成测试等多种测试类型。

pytest内置了assert语句和日志记录功能,支持多种插件,可以将测试结果输出为HTML报告、JUnit XML报告等。同时,pytest还具有简单直观的测试代码编写方式,易于上手。

安装
pip install pytest
使用
编写测试代码

在编写测试代码时,我们需要遵循一定的规范来保证pytest能够自动识别和执行我们编写的测试函数。具体规范如下:

  1. 测试函数的名称必须以test_开头。
  2. 测试函数可以接受fixture作为参数,使用@pytest.fixture()装饰器即可。
  3. 断言应该使用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
Fixture

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