首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Pytest(八) pytest Fixture(一)

Pytest(八) pytest Fixture(一)

作者头像
雷子
发布于 2022-04-06 08:35:01
发布于 2022-04-06 08:35:01
1.1K0
举报

系列分享

Pytest系列(一)初次了解

Pytest(二)执行规则以及编写执行多条用例

Pytest(三)Pytest执行命令

Pytest(四)Pytest断言

Pytest(五)标记函数

Pytest(六)跳过测试

Pytest(七) pytest之参数化


什么是固件?

固件(Fixture)是一些函数,pytest 会在执行测试函数之前(或之后)加载运行它们。我们可以用它做一些事情,比如数据库的链接操作之类的。如何使用呢。

代码语言:javascript
复制
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 之后的代码属于后处理,将在测试完成后执行。

以下测试模拟数据库查询,使用固件来模拟数据库的连接关闭:

代码语言:javascript
复制
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

这样给我们的结果就会更加详细

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档