在软件开发中,单元测试是保障代码质量的关键环节。pytest
作为python的一个强大的测试框架,以其简洁、灵活和强大的插件系统而广受开发者喜爱。这里我们会结合示例深入了解pytest
的多种使用方式。
pytest的基本使用
首先,我们通过一个简单的例子来展示pytest
的基本用法。假设我们有一个calculator.py
文件,包含一个简单的计算器类:
# calculator.py
class Calculator:
def add(self, a, b):
return a + b
def subtract(self, a, b):
return a - b
接下来,我们创建一个test_calculator.py
文件,编写对应的测试用例:
# test_calculator.py
import pytest
from calculator import Calculator
def test_add():
calc = Calculator()
assert calc.add(4, 7) == 11
def test_subtract():
calc = Calculator()
assert calc.subtract(10, 5) == 5
在命令行中运行pytest
,它将自动发现并执行所有以test_
开头的函数。
参数化测试
pytest支持参数化测试,允许你为测试函数传递不同的参数,从而验证函数对不同输入的处理。
def test_add_parameters(a, b, expected):
calc = Calculator()
assert calc.add(a, b) == expected
@pytest.mark.parametrize("a, b, expected", [
(1, 2, 3),
(0, 2, 2),
(-1, -1, -2)
])
def test_add(test_add_parameters):
pass
fixtures
pytest
的fixtures允许你在测试之前和之后执行一些设置和清理工作。例如,你可以为每个测试创建和清理一个数据库连接。
import pytest
@pytest.fixture
def db_connection():
connection = create_database_connection()
yield connection
connection.close()
def test_database_insert(db_connection):
data = {'name': 'Alice'}
db_connection.insert(data)
assert db_connection.find_one(data) == data
def test_database_update(db_connection):
data = {'name': 'Bob'}
db_connection.insert(data)
db_connection.update(data, {'name': 'Alice'})
assert db_connection.find_one({'name': 'Alice'})
在这个例子中,db_connection
是一个fixture,它在每个测试之前创建,在测试之后关闭。
更详细的测试失败信息
pytest
增强了断言失败时的信息输出,使得开发者能够快速定位问题。
def test_failing_test():
list1 = [1, 2, 3]
list2 = [1, 2, 2]
assert list1 == list2 # 这个断言会失败
运行这个测试,pytest
会提供两个列表的差异详细信息。
使用插件
pytest
拥有丰富的插件生态系统,可以帮助你扩展pytest
的功能。例如,pytest-cov
插件可以生成测试覆盖率报告。
首先,安装插件:
pip install pytest-cov
然后,在命令行中使用以下命令来生成覆盖率报告:
pytest --cov=calculator --cov-report term-missing
总之,pytest
是一个功能全面、使用方便的测试框架,它通过参数化测试、fixtures、断言增强、插件系统等特性,极大地提升了Python单元测试的效率和体验。无论你是测试新手还是资深开发者,pytest
都是进行单元测试的得力助手。
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。