【pytest-fixture】四、fixture的自动执行(无需请求)和使用标记将数据传递给fixtrue

我基本上是跟着官网去学习fixture,自己先看并学了一遍,为了方便后续查看和记忆,所以将学习笔记记录下来,如果有不对的地方,欢迎大家评论区指出。

1.fxitrue自动执行(无需请求)

1.1介绍

官方话术: 有时你可能想要一个你知道所有测试都依赖的夹具(甚至几个)。“自动使用”fixture 是一种让所有测试自动请求它们的便捷方式。这可以减少很多多余的请求,甚至可以提供更高级的夹具使用(更多的是进一步的)。 我们可以通过传入夹具的装饰器使夹具成为自动使用autouse=True的夹具。
自我理解: 如果你有的数据需要逻辑处理,先执行,为了减少很多次多余的请求,可以试试自动执行.

1.2代码示例

文件名: test_demo.py

import pytest


@pytest.fixture
def login():
    return 'token'


@pytest.fixture
def driver():
    return 'driver'


@pytest.fixture
def data():
    return []


# autouse=True: 设置自动执行
@pytest.fixture(autouse=True)
def setup(login, driver, data):
    data.append(login)
    data.append(driver)


def test_demo(data):
    assert data == ["token", "driver"]

1.3运行结果

在这里插入图片描述

1.4结果分析

上述代码中,如果setup没有自动运行,那么我们通过data获得的结果就是[],但是明显我们断言成功了,说明获得的结果就是[‘token’, ‘driver’],这证明了我们setup自动执行了.
这里可能大家会说data返回的不是[]吗?为什么会是有值的,因为之前说过,fixture在作用域期间只会执行一次,它的返回值会被缓存,所以缓存的值就是[],在运行setup时给他追加了两个元素,所以它的值就是[“token”, “driver”],列表追加值是不会改变原来的地址空间值的,所以我们在去调用data时就是返回追加结果后的值.
所以我们的fixtrue支持自动执行,看你需要它具体去完成什么在使用.

2.使用标记将数据传递给fixtrue

2.1介绍

官方话术: 使用该request对象,夹具还可以访问应用于测试功能的标记。这对于将数据从测试传递到夹具中很有用
自我理解: 我们可以通过标记把想要传递的值传递到fixture中,根据参数的不同,返回不同的值,在具体场景中,这很有用

2.2代码示例

文件名: test_demo.py

import pytest


@pytest.fixture
def login(request):
    # 这里传递的字符串,必须与mark后面的自定义名称一致,否则无法获取
    marker = request.node.get_closest_marker("login")
    if marker is None:
        data = None
    else:
        data = marker.args[0]

    return data


# mark后面的login是支持自定义的
@pytest.mark.login("token")
def test_demo(login):
    assert login == 'token'

2.3运行结果

在这里插入图片描述

2.结果分析

通过上述例子,我们可以通过传递不同的值,去让fixtrue返回不同的值,这在一些具体场景很有用
不过要注意的是,@pytest.mark.login(),login是可以随便写的(自定义),后面括号是你要传递的值,然后你在接收时,你要使用request(这个在后面会讲到,这里知道怎么用就行).node.get_closest_marker(‘login’)去获取,但是里面传递的字符串必须和mark后面自定义的名称一致,否则无法取出值.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值