pytest解读一次请求多个fixtures及多次请求
作者:把苹果咬哭的测试笔记 发布时间:2023-07-20 01:13:43
跟着节奏继续来探索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,拿到的其实是空列表[],所以最后断言会失败。
来源:https://www.cnblogs.com/pingguo-softwaretesting/p/14474056.html


猜你喜欢
- 本文实例讲述了PHP缓存集成库phpFastCache用法。分享给大家供大家参考。具体分析如下:phpFastCache是一个开源的PHP缓
- 装饰器的基础使用(装饰带参函数)def decorator(func): def inner(info): &nb
- 1、准备表结构及对应的表数据a、表结构:create table TB_TREE(CID NUMBER not null,CNAME VAR
- 需求: 一台机器上有多个网卡, 如何访问指定的 URL 时使用指定的网卡发送数据呢?$ curl --interface eth0 www.
- 多进程&多线程服务端:多进程和多线程的开启方式相同。缺点:<1> 由于Cpython的GIL,导致同一时间无法运行多个线
- 最近实现了一些微信的简单玩法 我们可以通过网页版的微信微信网页版,扫码登录后去抓包爬取信息,还可以post去发送信息。》》安装it
- 前言pandas对大数据有很多便捷的清洗用法,尤其针对缺失值和重复值。缺失值就不用说了,会影响计算,重复值有时候可能并未带来新的信息反而增加
- Web网站可用性的关键指标是速度,更确切地说,是页面能以多快的速度出现在访问者的浏览器窗口里。影响速度的因素有很多种,包括Web服务器的速度
- 表结构学生表如下:CREATE TABLE `t_student` ( `id` int NOT NULL AUTO_INCRE
- 本文详细介绍了array_slice函数的详细用法以及一些常用的array_slice实例程序,分享给大家供大家参考。具体分析如下:arra
- 本文主要介绍了OpenCV全景图像拼接的实现示例,分享给大家,具体如下:left_01.jpgright_01.jpgStitcher.py
- Sun周三宣布,准备以10亿美元收购MySQL开源数据库公司。据悉,Sun将支付大约8亿美元现金给MySQL,以获得其私募股票,另外,Sun
- 一、使用我使用的是python3,可以自行搜索下载二、安装phone模块pip install phone三、测试代码如下:from pho
- 1:UEditor-plus富文本编辑器如何在vue项目中使用备注:UEditor是由百度web前端研发部开发的所见即所得的开源富文本编辑器
- 问题描述给出一个整数数组 nums,请返回其中位数为偶数的数字的个数。示例 1:输入:nums = [12,345,2,6,7896]输出:
- bs4解析原理:1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中2.通过调用BeautifulSoup对象中相
- 概述数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能导致脏读、脏写、不可重复度和幻读。这些问题的本
- 时区的概念与转换首先要知道时区之间的转换关系,其实这很简单:把当地时间减去当地时区,剩下的就是格林威治时间了。 例如北京时间的18:00就是
- 前言:看似简单的任务,往往隐藏陷阱!一个常见的任务是在一个列表上迭代,并根据条件删除一些元素。本文将展示如何完成该任务的不同方法,同时展示一
- 下面是一个简单的Family Tree 示例: DECLARE @TT TABLE (ID int,Relation varchar(25)