pytest框架详解
pytest
是一个功能强大且灵活的测试框架,广泛用于Python项目的单元测试、集成测试等。它具有简单的语法和强大的插件机制,使得测试的编写和维护变得更加容易。本文将通过图文示例为大家详细介绍 pytest
的基本用法。
1. 安装pytest
在开始使用 pytest
之前,首先要安装该框架。在命令行中输入以下命令:
pip install pytest
2. 编写测试用例
pytest
的测试用例通常以 test_
开头,并且文件名也应以 test_
开头或以 _test
结尾。例如,我们可以创建一个 test_sample.py
文件,内容如下:
# test_sample.py
def add(a, b):
return a + b
def test_add():
assert add(1, 2) == 3
assert add(-1, 1) == 0
assert add(0, 0) == 0
在上述代码中,我们定义了一个简单的 add
函数和一个对应的测试函数 test_add
。通过使用 assert
关键字,我们可以验证 add
函数的输出是否符合预期。
3. 运行测试
在命令行中,进入到包含 test_sample.py
文件的目录,运行以下命令以执行测试:
pytest
您将看到类似如下的输出,表示测试通过:
============================= test session starts =============================
platform win32 -- Python 3.8.0, pytest-6.0.1, py-1.10.0, pluggy-0.13.1
collected 1 item
test_sample.py . [100%]
============================== 1 passed in 0.04s ==============================
4. 断言与错误信息
pytest
支持多种类型的断言,失败时还会自动输出详细的错误信息。例如,我们故意将 assert add(1, 2) == 4
修改为错误的值,重新运行测试:
def test_add():
assert add(1, 2) == 4 # 故意错误
运行后,将得到如下输出:
=================================== FAILURES ===================================
__________________________________ test_add ___________________________________
def test_add():
> assert add(1, 2) == 4
E assert 3 == 4
test_sample.py:6:7
=========================== short test summary info =============================
FAILED test_sample.py::test_add - assert 3 == 4
============================== 1 failed in 0.02s ==============================
从错误信息中可以清晰地看到失败的位置和预期值。
5. 跳过和标记测试
有时我们想跳过某些测试,比如未完成的功能,可以使用 @pytest.mark.skip
装饰器:
import pytest
@pytest.mark.skip(reason="暂时跳过此测试")
def test_skip():
assert False
此外,pytest
还允许我们定义自定义标记,通过命令行选项来选择性运行某些测试。
6. 测试夹具
pytest
提供了测试夹具(fixtures)的功能,可以用于准备和清理测试环境。定义夹具非常简单:
import pytest
@pytest.fixture
def sample_fixture():
return 42
def test_with_fixture(sample_fixture):
assert sample_fixture == 42
7. 结论
pytest
是一个强大的Python测试框架,提供了丰富的功能和灵活的用法。通过简单的语法和各种特性,用户可以轻松编写和维护测试用例。本文涵盖了基本的用法,希望大家能在自己的项目中使用 pytest
来提高代码质量。欢迎持续关注,并不断探索 pytest
其他高级特性和插件,以满足更复杂的测试需求。