系列分享
什么是固件?
固件(Fixture)是一些函数,pytest 会在执行测试函数之前(或之后)加载运行它们。我们可以用它做一些事情,比如数据库的链接操作之类的。如何使用呢。
import pytest
@pytest.fixture()
def post_code():
return '010'
def test_postcode(post_code):
assert post_code == '010'
执行结果
固件可以直接定义在各测试脚本中,就像上面的例子。更多时候,我们希望一个固件可以在更大程度上复用,这就需要对固件进行集中管理。Pytest 使用文件 conftest.py 集中管理固件。
在复杂的项目中,可以在不同的目录层级定义 conftest.py,其作用域为其所在的目录和子目录。
预处理和后处理
很多时候需要在测试前进行预处理(如新建数据库连接),并在测试完成进行清理(关闭数据库连接)。
当有大量重复的这类操作,最佳实践是使用固件来自动化所有预处理和后处理。
Pytest 使用 yield 关键词将固件分为两部分,yield 之前的代码属于预处理,会在测试前执行;yield 之后的代码属于后处理,将在测试完成后执行。
以下测试模拟数据库查询,使用固件来模拟数据库的连接关闭:
import pytest
@pytest.fixture()
def db():
print('Connection success')
yield
print(' closed')
def search_user(user_id):
d = {
'002': 'leizi'
}
return d[user_id]
def test_search(db):
assert search_user('002') == 'leizi'
结果
执行的时候我们可以用-v 或者-s 起展示
成功前后标识前后有数据库的连接和关闭操作
如果要跟踪详细的信息可以使用--setup-show
这样给我们的结果就会更加详细