【pytest-fixture】三、一个测试或fixture请求多个fixture和fixture在作用域期间只执行一次

【pytest-fixture】三、一个测试或fixture请求多个fixture和fixture在作用域期间只执行一次,第1张

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


目录
    • 1. 一个测试或fixture请求多个fixture
      • 1.1介绍
      • 1.2代码示例
      • 1.3小结
    • 2.fixture在作用域期间只执行一次(返回值被缓存)
      • 2.1介绍
      • 2.2代码示例
      • 2.3小结

1. 一个测试或fixture请求多个fixture 1.1介绍

官方话术: 测试用例和fixture不限于一次请求一个fixture。


他们可以请求多个fixture。



自我理解: 测试用例和fixture可以同时请求多个fixture

1.2代码示例

测试文件: test_demo.py

import pytest


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


@pytest.fixture
def get_driver():
    return "driver"


# 一个fixture可以请求多个fixture
@pytest.fixture
def setup(login, get_driver):
    return login + ":" + get_driver


@pytest.fixture
def teardown():
    return "clear"


# 一个测试可以请求多个fixture
def test_demo(setup, teardown):
    assert setup == "token:driver"
    assert teardown == "clear"

运行代码:

结果分析:

两个断言成功了,且没有报错,说明一个fixtrue或测试是可以请求多个fixtrue的

1.3小结

通过例子,我们可以看出一个fixture或测试可以请求多个fixtrue,这就像我们一个类继承多个类一样,可以让我们的fixture功能跟多样化,可以拆分的更细,提高我们的fixture可重用性。


2.fixture在作用域期间只执行一次(返回值被缓存) 2.1介绍

官方话术: 在同一个测试期间,也可以多次请求夹具,并且 pytest 不会为该测试再次执行它们。


这意味着我们可以在依赖于它们的多个固定装置中请求 固定装置(甚至在测试本身中再次请求固定装置),而无需多次执行这些固定装置。



自我理解: 同一个fixture可以被一个多次请求,但在作用域期间只会执行一次(返回值被缓存),后续就直接去拿值了,而不会再去执行一次了。


2.2代码示例

文件名:test_demo.py

import pytest


@pytest.fixture
def login():
    print("我被执行了")
    return "token"


@pytest.fixture
def setup(login):
    return [login]


def test_demo(setup, login):
    assert setup == [login]

运行代码:

结果分析:

通过结果,我们可以看到"我被执行了"只打印了一次,但是我们却调用了两次login,一次是调用setup时,setup去调用login,第二次是直接调用login,但只打印了一次,说明我们的login函数在function的作用域期间只执行了一次.
虽然我们的login只执行了一次,但是第二次获取login的值时,login仍然返回了’token’,如果没有返回’token’,我们的断言就会失败,所以fixture虽然在作用域期间只执行一次,但是它的返回值是会被珲缓存的.

2.3小结

通过上述示例,我们能看出fixtrue可以被多次访问,但在作用域期间只会执行一次,且会将返回值缓存,下次请求直接返回值而不执行代码.

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/568535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存