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

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

目录

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

+ 1.1介绍
+ 1.2代码示例
+ 1.3运行结果
+ 1.4结果分析
2.使用标记将数据传递给fixtrue

+ 2.1介绍
+ 2.2代码示例
+ 2.3运行结果
+ 2.结果分析

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 []

@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运行结果

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

; 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):

    marker = request.node.get_closest_marker("login")
    if marker is None:
        data = None
    else:
        data = marker.args[0]

    return data

@pytest.mark.login("token")
def test_demo(login):
    assert login == 'token'

2.3运行结果

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

; 2.结果分析

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

Original: https://blog.csdn.net/weixin_45975639/article/details/124035105
Author: 时间良药丶
Title: 【pytest-fixture】四、fixture的自动执行(无需请求)和使用标记将数据传递给fixtrue

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/774057/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球