我基本上是跟着官网去学习fixture,自己先看并学了一遍,为了方便后续查看和记忆,所以将学习笔记记录下来,如果有不对的地方,欢迎大家评论区指出。
1.fixture调用其它fixture
1.1介绍
官方话术:pytest 的最大优势之一是其极其灵活的夹具系统。它允许我们将复杂的测试需求归结为更简单和有组织的功能,我们只需要让每个功能描述它们所依赖的东西。
自我理解: 就是在一个fixture函数调用另一个fixture函数,为了尽可能的让一个fixture函数只修改一个状态(或者说是简化fixture函数的功能),这样可以让每个独立开的fixture函数达到可重用性。
1.2代码示例
文件名:test_demo.py
import pytest
@pytest.fixture
def login():
return 'token'
# 这里在执行setup时,就会先去执行login函数,这里就是fixture函数调用另一个fixture函数
@pytest.fixture
def setup(login):
return 'my:' + login
def test_demo(setup):
assert setup == 'my:token'
运行结果:
结果分析:
断言成功了,说明,我们在执行test_femo时先执行setup,执行setup时先执行login,login执行完后,在执行setup,最终返回setup为"my:token"
1.3小结
fixture函数调用另一个fixture函数,这给我们提供了很多可以操作空间。比如我们可以将一个复杂的fixture函数拆分成多个fixture函数,每个fixture只修改一个状态,增加fixture的可重用性。
2.fixture可重复使用
2.1介绍
官方话术:使 pytest 的夹具系统如此强大的一件事是,它使我们能够定义一个可以反复重用的通用设置步骤,就像使用普通函数一样。两个不同的测试可以请求相同的夹具,并让 pytest 为每个测试提供来自该夹具的自己的结果。这对于确保测试不会相互影响非常有用。我们可以使用这个系统来确保每个测试都获得自己的新一批数据,并从干净的状态开始,这样它就可以提供一致的、可重复的结果。
**自我理解:**同一个fixture可以被多个测试用例使用,这样就可以保证我们在每个执行测试用例时都是新的数据,并且从干净的状态开始。比如登陆操作,或者初始化driver开始。
2.2代码示例
文件名:test_demo.py
import pytest
@pytest.fixture
def login():
return 'token'
def test_demo1(login):
assert login == 'my:token'
# 两个测试用例都调用了login,第一个用例会失败,第二个用例会成功
def test_demo2(login):
assert login == "token"
运行结果:
结果分析:
第一个因为login返回的是token,所以断言失败了,第二个是token所以断言成功,这里我们重复调用两次了login。两次返回的数据都是新数据“token”,且每次测试用例执行都会先执行登陆。
2.3小结
fixture可以重复使用,这样我们就可以将一些公共或者前置操作抽取出来,减少代码冗余。