脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - pytest解读一次请求多个fixtures及多次请求

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

2023-02-24 11:35把苹果咬哭的测试笔记 Python

这篇文章主要为大家介绍了一次请求多个fixtures,以及fixtures被多次请求的pytest官方解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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函数有返回值,那么返回值会被缓存起来。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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请求 的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/pingguo-softwaretesting/p/14474056.html

延伸 · 阅读

精彩推荐
  • PythonPython + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能

    Python + selenium + requests实现12306全自动抢票及验证码破解加自动点

    这篇文章主要介绍了Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能,需要的朋友可以参考下...

    小酒馆5252021-04-22
  • PythonPython+Empyrical实现计算风险指标

    Python+Empyrical实现计算风险指标

    Empyrical 是一个知名的金融风险指标库。它能够用于计算年平均回报、最大回撤、Alpha值等。下面就教你如何使用 Empyrical 这个风险指标计算神器...

    Ckend5012022-11-08
  • PythonPython编写单元测试代码实例

    Python编写单元测试代码实例

    这篇文章主要介绍了Python编写单元测试代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考...

    Jimmyhe11522020-09-11
  • PythonPython 概率生成问题案例详解

    Python 概率生成问题案例详解

    这篇文章主要介绍了Python 概率生成问题案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    Yake19655372022-01-04
  • Pythonpython for和else语句趣谈

    python for和else语句趣谈

    这篇文章主要介绍了python for和else语句趣谈,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...

    FOOFISH-PYTHON之禅9302021-07-29
  • Pythonpython Web开发你要理解的WSGI & uwsgi详解

    python Web开发你要理解的WSGI & uwsgi详解

    这篇文章主要给大家介绍了关于python Web开发你一定要理解的WSGI & uwsgi的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着...

    rainybowe7132021-03-24
  • Pythonpython中字符串前面加r的作用

    python中字符串前面加r的作用

    这篇文章主要介绍了python中字符串前面加r的作用,实例分析了Python通过字符串前面加r实现禁止字符串转义的功能,需要的朋友可以参考下 ...

    MaxOmnis4472020-07-12
  • Python基于Python的自媒体小助手---登录页面的实现代码

    基于Python的自媒体小助手---登录页面的实现代码

    这篇文章主要介绍了基于Python的自媒体小助手---登录页面的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴...

    MonkT5452020-06-30