Python测试框架pytest介绍
什么是pytest?
pytest是Python的一个功能全面的测试框架。它旨在支持和启发Python中的单元测试,功能测试和集成测试等方面,是Python中比较常用的测试框架之一。
安装pytest
我们先来了解下在Python中如何安装和使用pytest。
要安装pytest,可以通过pip来安装:
pip install pytest
安装完成后,我们可以在命令行中输入以下命令来确认是否安装成功:
pytest --version
如果已经成功安装pytest,则输出结果会显示pytest的版本号。
pytest的基本用法
pytest的基本用法是通过自己写测试文件进行测试,测试文件可以是以test_开头的.py文件或者以_test结尾的.py文件,这些文件需要有测试方法来进行测试。
pytest的一个简单例子:
# test_sample.py
def divide(x, y):
return x / y
def test_divide():
assert divide(4, 2) == 2
assert divide(5, 2) == 2.5
这个例子定义了一个名为“test_divide”的测试方法,该方法测试了除法函数divide的正确性。
我们可以通过以下命令在命令行中运行这个测试:
pytest test_sample.py
如果测试通过,则会输出类似以下结果:
=============================== test session starts ===============================
platform darwin -- Python 3.7.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /path/to/your/test_files
collected 1 item
test_sample.py . [100%]
=============================== 1 passed in 0.12s ================================
其中,“.”表示和通过的测试方法,如果测试用例失败则会显示为“F”。
pytest的高级用法
除了基本用法外,pytest还有很多高级用法。我们来看几个例子。
参数化测试
参数化测试是pytest中非常实用和强大的功能之一。它可以帮助我们在同一个测试函数中使用多组参数进行测试。
# test_parametrize.py
def multiply(x, y):
return x * y
import pytest
@pytest.mark.parametrize(
"x,y,expected",
[
(2,3,6),
(1,0,0),
(2,-3,-6),
(-2,-3,6),
(0.1,0.1,0.01),
]
)
def test_multiply(x,y,expected):
assert multiply(x,y) == expected
在这个例子中,我们使用了@pytest.mark.parametrize
装饰器来对test_multiply
函数进行参数化测试。我们可以看到,我们提供了多组参数,当前函数会依次对每组参数进行测试,执行结果:
================================== test session starts ===================================
platform darwin -- Python 3.7.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /path/to/your/test_files
collected 5 items
test_parametrize.py ..... [100%]
=================================== 5 passed in 0.10s ===================================
目录结构约定
pytest官方建议的测试文件或者测试文件夹的目录结构如下:
setup.py
mypackage/
__init__.py
mymodule.py
tests/
__init__.py
test_mymodule.py
其中,mypackage文件夹中存放业务代码,tests文件夹中存放测试代码。在tests文件夹中,测试文件应该以test_
开头或以_test
结尾。
总结
本文主要介绍了pytest的基本和高级用法,并且提供了一些示例来帮助你更好地理解pytest的使用。在使用pytest时,你需要选择合适的测试用例进行测试,根据测试结果来进行优化和完善代码,提高代码的质量和稳定性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python测试框架pytest介绍 - Python技术站