fixture作为参数传入
定义fixture跟定义普通函数唯一区别就是在函数上加个装饰器**@pytest.fixture()**,fixture命名不要用test开头,跟用例区分开,用例才是以test开头的命名;
fixture是可以有返回值的,如果没有 return 默认返回None。用例调用 fixture 的返回值,直接就是把 fixture 的函数名称当成变量名称,多说无益,看示例:
代码示例:
# test_fixture.py
from operator import add
import pytest
@pytest.fixture()
def myfixture():
s = add(1,2)
print("这里是myfixture")
return s
def test_one(myfixture):
print("这里是test_one")
# assert myfixture == 2
assert myfixture == 3
运行pytest test_fixture.py -s
,结果如下,可以看到,直接使用函数名 myfixture 做为变量和 3进行比较
上述代码修改 assert myfixture == 3为 assert myfixture == 2,运行结果如下:
多个fixture使用
定义两个fixture;在第一个测试方法中传入第一个,在第二个测试方法中传入第二个,在第三个测试方法中两个都传入
代码示例
# test_fixture.py
from operator import add
import pytest
@pytest.fixture()
def myfixture1():
s = add(1,2)
print("这里是myfixture11111")
return s
@pytest.fixture()
def myfixture2():
L = [1, 2, 3]
print("这里是myfixture2222")
return L
def test_one(myfixture1):
print("这里是test_one")
# assert myfixture == 2
assert myfixture1 == 3
def test_two(myfixture2):
print("这里是test_two")
assert myfixture2 == ['a', '2', '3']
def test_three(myfixture1, myfixture2):
print("这里是test_three")
assert myfixture1 == myfixture2
运行pytest test_fixture.py -s
,结果如下:
fixture 互相调用
代码示例:
# test_fixture.py
from operator import add
import pytest
@pytest.fixture()
def myfixture1():
s = add(1,2)
print("这里是myfixture11111")
return s
@pytest.fixture()
def myfixture2():
L = [1, 2, 3]
print("这里是myfixture2222")
return L
def test_one(myfixture2):
print("这里是test_one")
assert myfixture2 == [1, 2, 3]
def test_two(myfixture1):
print("这里是test_two")
assert myfixture1 == 3
def test_three(myfixture1, myfixture2):
print("这里是test_three")
assert myfixture1 == myfixture2
运行pytest test_fixture.py -s
,结果如下:
fixture 参数之 name
fixture 里面使的 name 参数,意如其名,就是给 fixture 起一个有意思的别名,使用的时候就不需要传函数名,直接使用自定义的别名即可
代码示例
# test_fixture.py
import pytest
@pytest.fixture(name='newname')
def name_fixture():
s = "a"
print("我有一个新名字是 newname 吖")
return s
def test_nameOfFixture(newname):
assert newname == 666
如上代码所示,在测试方法里我们传入的参数为别名“newname",比往常传入 ”name_fixture“ 是不是好理解一些~,运行pytest test_fixture.py -s
,结果如下: