pytest解读一次请求多个fixtures及多次请求

 更新时间:2022年06月01日 14:11:52   作者:把苹果咬哭的测试笔记  
这篇文章主要为大家介绍了一次请求多个fixtures,以及fixtures被多次请求的pytest官方解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

跟着节奏继续来探索fixtures的灵活性。

一、一个测试函数/fixture一次请求多个fixture

在测试函数和fixture函数中,每一次并不局限于请求一个fixture。他们想要多少就可以要多少。

下面是另一个简单的例子:

import pytest
# Arrange
@pytest.fixture
def first_entry():
    return "a"
# Arrange
@pytest.fixture
def second_entry():
    return 2
# Arrange
@pytest.fixture
def order(first_entry, second_entry):
    # 这是一个fixture函数,请求了2个其他的fixture函数
    return [first_entry, second_entry]
# Arrange
@pytest.fixture
def expected_list():
    return ["a", 2, 3.0]
def test_string(order, expected_list):
    # 这是一个测试函数,请求了2个不同的fixture函数
    # Act
    order.append(3.0)
    # Assert
    assert order == expected_list

可以看出,在fixture函数order中,请求了2个其他的fixture函数,分别是:first_entry、second_entry。

在测试函数test_string中,请求了2个不同的fixture函数,分别是:order、expected_list。

二、每个测试函数可以多次请求fixtures(返回值被缓存)

在同一个测试函数中,fixture也可以被请求多次。但是在这个测试函数中,pytest在第一次执行fixture函数之后,不会再次执行它们。

如果第一次执行fixture函数有返回值,那么返回值会被缓存起来。

import pytest
# Arrange
@pytest.fixture
def first_entry():
    return "a"
# Arrange
@pytest.fixture
def order():
    return []
# Act
@pytest.fixture
def append_first(order, first_entry):
    # 在这里order第一次被请求,返回一个列表[]
    # 接着,order空列表增加了first_entry的返回值,此时的order变成了["a"],被缓存起来
    return order.append(first_entry)
def test_string_only(append_first, order, first_entry):
    # 在测试函数里,order第二次被请求,但是并不会拿到空列表[],而且拿到了被缓存起来的["a"]
    # 所以断言order == [first_entry],其实就是 ["a"] == ["a"],测试通过
    # Assert
    assert order == [first_entry]

从示例中可以看出:

  • 在fixture函数append_first中,order第一次被请求,返回一个列表[],被缓存起来。
  • 接着,order.append(first_entry)在[]中增加了first_entry的返回值,所以,此时的order变成了["a"]。
  • 最后,在测试函数test_string_only中,order第二次被请求,但是并不会拿到空列表[],而且拿到了被缓存起来的["a"]。这样的话,最后的断言assert order == [first_entry]就会成功。

反过来,如果同一个fixture在一个测试函数中每次都去请求一次,那上面的测试函数必然失败。

因为,这样一来,虽然在append_first中的返回值仍然是["a"],但是在test_string_only中,又去重新请求了一次order,拿到的其实是空列表[],所以最后断言会失败。

以上就是pytest解读一次请求多个fixtures及多次请求 的详细内容,更多关于pytest解读fixtures请求 的资料请关注脚本之家其它相关文章!

相关文章

  • 解决Django删除migrations文件夹中的文件后出现的异常问题

    解决Django删除migrations文件夹中的文件后出现的异常问题

    今天小编就为大家分享一篇解决Django删除migrations文件夹中的文件后出现的异常问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 如何使用Typora+MinIO+Python代码打造舒适协作环境

    如何使用Typora+MinIO+Python代码打造舒适协作环境

    这篇文章主要介绍了如何使用Typora+MinIO+Python代码打造舒适协作环境,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • PyCharm软件无法安装lxml库的问题及解决

    PyCharm软件无法安装lxml库的问题及解决

    这篇文章主要介绍了PyCharm软件无法安装lxml库的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 利用Python多处理库处理3D数据详解

    利用Python多处理库处理3D数据详解

    本文将介绍处理大量数据时非常方便的工具,例如tqdm与 multiprocessing​imap​​一起使用、并行处理档案、绘制和处理3D数据等,感兴趣的小伙伴可以了解一下
    2021-12-12
  • Python与MongoDB交互的代码实现

    Python与MongoDB交互的代码实现

    Python与MongoDB的交互通常通过pymongo库来实现,pymongo是一个官方的Python驱动程序,用于与MongoDB数据库进行交互,以下是一个简单的示例,具有一定的参考价值,需要的朋友可以参考下
    2024-10-10
  • python散点图双轴设置坐标轴刻度的实现

    python散点图双轴设置坐标轴刻度的实现

    散点图是一种常用的图表类型,可以用来展示两个变量之间的关系,本文主要介绍了python散点图双轴设置坐标轴刻度的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • python BytesIO 中 read 用法示例详解

    python BytesIO 中 read 用法示例详解

    这篇文章主要介绍了python BytesIO 中 read 用法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • 利用Python pyecharts绘制饼图

    利用Python pyecharts绘制饼图

    这篇文章主要介绍了利用Python pyecharts绘制饼图,饼图主要用于表现不同类目的数据在总和中的占比。每个的弧度不是数据量的占比,下面我们一起进入文章看看具体的实现过程吧,需要的朋友也可以参考一下
    2021-12-12
  • Python requests库用法实例详解

    Python requests库用法实例详解

    这篇文章主要介绍了Python requests库用法,结合实例形式分析了Request库的功能、安装、请求创建、响应等相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • Python生成随机数的方法详解(最全)

    Python生成随机数的方法详解(最全)

    Python生成随机数的方法有很多,譬如random模块、NumPy库、secrets模块等。本文为大家整理了五个生成随机数的方法(应该是最全的了吧),希望对大家有所帮助
    2023-02-02

最新评论