首页 经验

pytest

时间: 2024-10-20 08:47:08

(部分内容来自网络,其真实性存疑,为了避免对您造成误导,请谨慎甄别。)


pytest 是一个用于 Python 的强大而灵活的测试框架,它提供了简单易用的语法和丰富的功能,使得编写和执行测试变得更加方便。pytest 支持单元测试、功能测试和集成测试,能够轻松地处理各种复杂的测试场景。


基本特性


- 简单的测试语法:使用 Python 常规的结构和语法,可以轻松编写测试。

- 自动发现测试:能够自动查找以 test_ 开头或以 _test 结尾的测试文件及函数。

- 丰富的插件:支持使用插件来扩展功能,如测试报告、并行测试等。

- 好用的断言功能:使用 Python 的 assert 语句进行断言,支持丰富的错误报告。

- 夹具支持:提供了灵活的夹具(fixtures)机制,用于设置测试前后所需的状态。


安装


可以使用 pip 安装 pytest


bash

pip install pytest


基本使用


1. 编写测试


测试函数通常放在以 test_ 开头的文件中。以下是一个简单的示例:


python

# test_sample.py


def add(a, b):

    return a + b


def test_add():

    assert add(1, 2) == 3

    assert add(-1, 1) == 0


2. 运行测试


在命令行中运行 pytest 命令,pytest 会自动发现并执行当前目录及子目录下的所有测试文件。


bash

pytest


3. 查看测试结果


运行后,pytest 会输出测试结果,包括通过的测试、失败的测试和错误的详细信息。例如:


============================= test session starts =============================

platform linux -- Python 3.x.x, pytest-6.x.x, py-asyncio-xyz

collected 1 item


test_sample.py .                                                        [100%]


============================== 1 passed in 0.01s ==============================


进一步的功能


1. 夹具(Fixtures)


夹具功能用于设置测试所需的上下文(如数据库连接、初始数据等)。


python

import pytest


@pytest.fixture

def sample_data():

    return [1, 2, 3]


def test_sum(sample_data):

    assert sum(sample_data) == 6


夹具可以通过函数参数自动传递。


2. 参数化


可以使用参数化功能来运行同一测试多次,使用不同的输入值。


python

@pytest.mark.parametrize("a, b, expected", [

    (1, 2, 3),

    (-1, 1, 0),

    (0, 0, 0)

])

def test_add(a, b, expected):

    assert add(a, b) == expected


3. 运行特定测试


可以通过指定测试文件或测试函数名来运行特定的测试。


bash

pytest test_sample.py                   # 运行指定文件的测试

pytest test_sample.py::test_add         # 运行指定测试函数


4. 查看详细输出


使用 -v 参数可以获取详细的测试输出。


bash

pytest -v


5. 生成测试报告


可以使用 --html 选项生成 HTML 格式的测试报告,需安装 pytest-html 插件:


bash

pip install pytest-html

pytest --html=report.html


结论


pytest 是一个功能强大且易于使用的测试框架,使 Python 中的测试编写和执行变得简单高效。通过其丰富的功能,如夹具、参数化和插件系统,可以满足各种测试需求。熟练掌握 pytest 将有助于提高代码质量和开发效率。


上一个 c++ vector 2024 文章列表

最新

工具

© 2019-至今 适观科技

沪ICP备17002269号