pytest官方文档解读fixtures的调用方式
作者:把苹果咬哭的测试笔记 发布时间:2022-01-18 18:40:49
pytest官方文档fixtures调用
既然fixtures是给执行测试做准备工作的,那么pytest如何知道哪些测试函数 或者 fixtures要用到哪一个fixtures呢?说白了,就是fixtures的调用。
一、测试函数声明传参请求fixture
测试函数通过将fixture声明为参数来请求fixture。
def test_my_fruit_in_basket(my_fruit, fruit_basket):
# 这是一个测试函数
assert my_fruit in fruit_basket
参考上一章出现的示例,测试函数test_my_fruit_in_basket通过传入my_fruit, fruit_basket来调用这2个fixture。
当pytest运行测试函数时,它会查看该测试函数中的参数,然后搜索与这些参数具有相同名称的fixture。一旦pytest找到这些对象,它就会运行这些fixture。
二、fixture中的返回值传递给测试函数
此外,如果fixture中还有返回的内容,pytest可以拿到,并将这些对象作为参数传递给测试函数。举个例子:
class Fruit:
def __init__(self, name):
self.name = name
self.cubed = False
def cube(self):
self.cubed = True
class FruitSalad:
def __init__(self, *fruit_bowl):
self.fruit = fruit_bowl
self._cube_fruit()
def _cube_fruit(self):
for fruit in self.fruit:
fruit.cube()
# Arrange
@pytest.fixture
def fruit_bowl():
return [Fruit("apple"), Fruit("banana")]
def test_fruit_salad(fruit_bowl):
# Act
# 这里接收到fixture函数fruit_bowl的返回值,
# 也就是[Fruit("apple"), Fruit("banana")],并使用
fruit_salad = FruitSalad(*fruit_bowl)
# Assert
# python内置函数all(),用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,
# 如果是返回 True,否则返回 False
assert all(fruit.cubed for fruit in fruit_salad.fruit)
ps:其实这里可以写几行非常简单的代码说明意思,不过突然觉得看点稍微绕的代码也没啥坏处。
可能python不太熟悉的朋友会觉得官方示例比较晦涩,其实我们重点不是关注这个,而且弄明白这里面的传递关系:
首先,测试函数test_fruit_salad 请求fruit_bowl(也就是 def test_fruit_salad(fruit_bowl):)
此时,pytest将会执行这个fixture函数fruit_bowl,并将返回的对象作为fruit_bowl参数传递给测试函数test_fruit_salad。
这就是当一个fixture被请求调用的时候,发生的事情。
如果上面的fixture函数做的事情换做我们自己手动来执行,应该是这样的:
# 上面的2个类不变
...
def fruit_bowl():
return [Fruit("apple"), Fruit("banana")]
def test_fruit_salad(fruit_bowl):
# Act
fruit_salad = FruitSalad(*fruit_bowl)
# Assert
assert all(fruit.cubed for fruit in fruit_salad.fruit)
# Arrange
bowl = fruit_bowl()
test_fruit_salad(fruit_bowl=bowl)
相信看到这里,大家应该对fixture的调用过程已经了解。
如果觉得官方代码示例有些晦涩,那么这里再附上一个简易版的:
import pytest
# Arrange
@pytest.fixture
def fruit_bowl():
return ["苹果", "香蕉"]
def test_fruit_salad(fruit_bowl):
# Act
fruit_salad = fruit_bowl[0] + fruit_bowl[1]
# Assert
assert fruit_salad == "苹果香蕉"
接下来,继续跟着官方文档解读fixture的特点:fixture调用别的fixture、fixture的复用性。
来源:https://www.cnblogs.com/pingguo-softwaretesting/p/14472263.html


猜你喜欢
- 1. 生命游戏是什么生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。它包括一个二维矩形世界,这个世界中的每个方格居住着一个
- Cloudinary提供了一个API,用于将图像、视频和任何其他类型的文件上传到云端。上传到Cloudinary的文件通过安全备份和修订历史
- MySQL 触发器MySQL 数据库中触发器是一个特殊的存储过程,不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用
- 一、设置画布turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置turtle.screensize(canvwidth=600
- 有时我们不希望某个类天生就非常庞大,一次性包含许多职责。那么我们就可以使用装饰着模式。 装饰着模式可以动态地给某个对象添加一些额外的职责,从
- 这是关于Python的第6篇文章,主要介绍下逻辑判断与运算符。(一)逻辑判断:如果要实现一个复杂的功能程序,逻辑判断必不可少。逻辑判断的最基
- 执行文件和目标导入模块在同一目录直接import比如我要在ma_main.py中导入env包中的make_env.py文件, 从而读取其中的
- 定义链表node结构:class ListNode: def __init__(self,data):
- 相信大家在日常学习或者是阅读英文文章的过程中,难免会出现几个不认识的单词,或者想快速翻译某段英文的意思。今天,利用Python爬虫等知识,教
- 通过一个demo测试这三个属性的差别。说明:scrollWidth:对象的实际内容的宽度,不包边线宽度,会随对象中内容超过可视区后而变大。
- 目录1.爬虫文件2.items.py3.pipelines.py4.进行持久化存储之前我们使用lxml对梨视频网站中的视频进行了下载,感兴趣
- 虽然初恋是java, 可是最近是越来越喜欢python,所以决定追根溯源好好了解下python的原理,架构等等.小脑袋瓜不太好使,只能记录下
- 什么是反射在Python中,反射是指通过一组内置的函数和语句,在运行时动态地访问、检查和修改对象的属性、方法和类信息的机制。Python中的
- 前言:过完520,咱们来玩玩五子棋陶冶情操。快拿这个和你女朋友去对线。多的不说直接进入正题人人对战游戏规则:p1为黑子,p2为白子,黑子先手
- 最近在学习关于Python数据分析与挖掘方面的知识,在学习到Python数据分析工具方面时,需要安装一些第三方扩展库来增强Python的数据
- 一、前言最近忙着在服务器上跑代码学习积累了一些经验技巧这里用来记录分享给大家二、创建虚拟环境用来跑代码下面我会以一个实例为模板,学习完之后,
- 目录MySQL数据库重命名的方法 第一种方法:rename database 弃用了第二种方法:mysqldump 备份第三种方法
- 求英文字母、数字、下划线、汉字的js正则表达式英文字母或数字或下划线,英文字母数字下划线是:/^\w+$/汉字的是:/^[\u0391-\u
- 模态框(Modal Dialogue Box)也可叫做模态对话框,或者对话框,当一个模态框被打开时,用户可以与该对话框进行交互,
- 前段时间 做了个学校的春萌项目,其中用到vue连接后端java接口。先上后端接口代码:package controller;import n