pytest实现fixture的原理,pytest fixtures
本文主要介绍pytest官方文档的调用方法来解释fixtures。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。
目录
pytest官方文档fixture调用一、测试函数声明参数传递请求fixture二。fixture中的返回值被传递给测试函数。
pytest官方文档fixtures调用
既然fixture正在准备测试,那么pytest如何知道fixture应该使用哪些测试函数或者哪些fixture呢?说白了就是固定物的召唤。
一、测试函数声明传参请求fixture
该函数通过将fixture声明为一个参数来请求它。
def test_my_fruit_in_basket(我的水果,水果_basket):
#这是一个测试函数
在果篮中断言我的水果
参考上一章的例子,测试函数test_my_fruit_in_basket通过传入my _ my_fruit,fruit_basket来调用这两个fixture。
当pytest运行一个测试函数时,它会查看测试函数中的参数,然后搜索与这些参数同名的fixture。一旦pytest找到这些对象,它将运行这些fixture。
二、fixture中的返回值传递给测试函数
此外,如果fixture中仍然有返回的内容,pytest可以获取它们,并将它们作为参数传递给测试函数。例如:
水果类:
def __init__(self,name):
self.name=name
self.cubed=False
定义立方体(自身):
self.cubed=True
水果沙拉类:
def __init__(self,*fruit_bowl):
self.fruit=水果碗
自我。_cube_fruit()
def _cube_fruit(self):
自我中的果实
水果.立方体()
#排列
@pytest.fixture
def水果_碗():
return[水果(苹果),水果(香蕉)]
def测试_水果_沙拉(水果_碗):
#行动
#此处接收fixture函数fruit_bowl的返回值,
#即[水果(苹果)、水果(香蕉)],并使用
水果沙拉=水果沙拉(*水果碗)
#断言
# python内置了一个函数all(),用来判断给定的iterable参数iterable中的所有元素是否都为真,
#如果为真,否则为假。
断言全部(水果_沙拉.水果中水果的水果.立方)
Ps:其实在这里你可以写几行很简单的代码来解释意思,但是突然觉得看着稍微有点费解的代码也无妨。
可能不熟悉python的朋友会觉得官方的例子晦涩难懂。其实我们的重点不是这个,我们要搞清楚这里面的转移关系:
一、测试函数test_fruit_salad请求fruit_bowl(即def test _ fruit _ salad(fruit _ bowl)3360)。此时,pytest将执行这个fixture函数fruit_bowl,并将返回的对象作为fruit _ bowl参数传递给测试函数test _ fruit _ salad。这就是调用fixture时发生的情况。
如果上面的fixture函数所做的事情是由我们自己手动执行的,它将看起来像这样:
#以上两类不变
.
def水果_碗():
return[水果(苹果),水果(香蕉)]
def测试_水果_沙拉(水果_碗):
#行动
水果沙拉=水果沙拉(*水果碗)
#断言
断言全部(水果_沙拉.水果中水果的水果.立方)
#排列
碗=水果_碗()
测试_水果_沙拉(水果_碗=碗)
相信看到这里,你应该已经知道fixture的调用流程了。
如果你觉得官方的代码例子有点晦涩,那么这里有另一个简单的版本:
导入pytest
#排列
@pytest.fixture
def水果_碗():
Return [苹果,香蕉]
def测试_水果_沙拉(水果_碗):
#行动
水果沙拉=水果碗水果碗
#断言
断言水果_沙拉==苹果香蕉
接下来继续按照官方文档来解读fixture的特点:fixture调用其他fixture以及fixture的复用性。
这就是官方pytest文档如何解释fixtures调用的细节。更多关于官方pytest文档fixtures的调用信息,请关注盛行IT软件开发工作室的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。