fixture作为参数传入
fixture标记的测试用例的固件,当然可以有返回值。那么我们如何能在测试用例中获得固件的返回值呢?
我们来吃个小荔枝:我们在固件中添加返回值;然后在测试方法中传入固件名;在测试方法中,我们用固件名来表示其返回值。例子中我们的返回值是字符串,其他列表、元组以及字典类型均可,可自行尝试。
#test_Pytest.py文件
#coding=utf-8
import pytest
@pytest.fixture()
def myfixture():
print ("执行testPytest里的前置函数")
return "preMethod的返回值"
import pytest
class Test_Pytest():
def test_one(self,myfixture):
print("test_one方法执行")
print(myfixture)
assert 1==1
def test_two(self,myfixture):
print("test_two方法执行")
print(myfixture)
assert "o" in "love"
def test_three(self):
print("test_three方法执行")
assert 3-2==1
if __name__=="__main__":
pytest.main(['-s','test_Pytest.py'])
运行结果如下图:
多个fixture的使用
pytest中也是支持一个测试函数调用多个固件,使用起来也没什么特别的。
吃个荔枝:我们定义了两个固件;在第一个测试方法中传入第一个固件,在第二个测试方法中传入第二个固件,在第三个测试方法中传入两个固件。
#test_Pytest.py文件
#coding=utf-8
import pytest
@pytest.fixture()
def myfixture1():
print ("执行固件myfixture1")
return "myfixture1"
@pytest.fixture()
def myfixture2():
print ("执行固件myfixture2")
return "myfixture2"
import pytest
class Test_Pytest():
def test_one(self,myfixture1):
print("test_one方法执行---%s" % myfixture1)
assert 1==1
def test_two(self,myfixture2):
print("test_two方法执行---%s" % myfixture2)
assert "o" in "love"
def test_three(self,myfixture1,myfixture2):
print("test_three方法执行---%s---%s" % (myfixture1,myfixture2))
assert 3-2==1
if __name__=="__main__":
pytest.main(['-s','test_Pytest.py'])
运行结果如下图:
fixture互相调用
固件不仅可以被测试用例调用,也可以被其他的固件调用。
来吃个小荔枝:我们声明了两个固件,在第二个固件中传入了第一个固件;然后又在第一个测试方法中传入了第二个固件。
#文件名是test_firstFile.py
#coding=utf-8
import pytest
@pytest.fixture()
def myfixture1():
print("执行myfixture1")
@pytest.fixture()
def myfixture2(myfixture1):
print ("执行myfixture2")
class Test_firstFile():
def test_one(self,myfixture2):
print("执行test_one")
assert 1+2==3
def test_two(self,myfixture1):
print("执行test_two")
assert 1==1
def test_three(self):
print("执行test_three")
assert 1+1==2
if __name__=="__main__":
pytest.main(["-s","test_firstFile.py"])
运行结果如下图:因为我们的第二个固件调用了第一个固件,所以在第一个测试方法执行之前两个固件都执行了。
在这个例子基础上,我们在第一个测试方法中在传入第一个固件,结果会怎么样?第一个固件会执行两次么?经验证,答案是不会的,只会执行一次。