usefixtures与传fixture区别
如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。
当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以。
1.函数或类里面方法直接传fixture的函数参数名称
@pytest.fixture()
def test1():
print('\n开始执行function')
def test_a(test1):
print('---用例a执行---')
class TestCase:
def test_b(self,test1):
print('---用例b执行')
if __name__=="__main__":
pytest.main(["-s","test03.py"])
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 2 items
test03.py
开始执行function
---用例a执行---
.
开始执行function
---用例b执行
.
============================== 2 passed in 0.04s ==============================
Process finished with exit code 0
2、fixture自动使用autouse=True 当用例很多的时候,每次都传这个参数,会很麻烦。fixture里面有个参数autouse,默认是False没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了 autouse设置为True,自动调用fixture功能
@pytest.fixture(autouse=True)
def test1():
print('\n开始执行function')
def test_a():
print('---用例a执行---')
class TestCase:
def test_b(self):
print('---用例b执行')
if __name__=="__main__":
pytest.main(["-s","test03.py"])
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 2 items
test03.py
开始执行function
---用例a执行---
.
开始执行function
---用例b执行
.
============================== 2 passed in 0.04s ==============================
Process finished with exit code 0
@pytest.fixture(scope='module', autouse=True)
def test1():
print('\n开始执行module')
@pytest.fixture(scope='class', autouse=True)
def test2():
print('\n开始执行class')
@pytest.fixture(scope='function', autouse=True)
def test3():
print('\n开始执行function')
def test_a():
print('---用例a执行---')
def test_d():
print('---用例d执行---')
class TestCase:
def test_b(self):
print('---用例b执行---')
def test_c(self):
print('---用例c执行---')
if __name__=="__main__":
pytest.main(["-s","test03.py"])
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 4 items
test03.py
开始执行module
开始执行class
开始执行function
---用例a执行---
.
开始执行class
开始执行function
---用例d执行---
.
开始执行class
开始执行function
---用例b执行---
.
开始执行function
---用例c执行---
.
============================== 4 passed in 0.05s ==============================
Process finished with exit code 0
3、使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例
@pytest.fixture()
def test1():
print('\n开始执行function')
@pytest.mark.usefixtures('test1')
def test_a():
print('---用例a执行---')
@pytest.mark.usefixtures('test1')
class TestCase:
def test_b(self):
print('---用例b执行---')
def test_c(self):
print('---用例c执行---')
if __name__=="__main__":
pytest.main(["-s","test03.py"])
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 3 items
test03.py
开始执行function
---用例a执行---
.
开始执行function
---用例b执行---
.
开始执行function
---用例c执行---
.
============================== 3 passed in 0.05s ==============================
Process finished with exit code 0
4、叠加usefixtures
如果一个方法或者一个class用例想要同时调用多个fixture,可以使用@pytest.mark.usefixture()进行叠加。注意叠加顺序,先执行的放底层,后执行的放上层。
@pytest.fixture()
def test1():
print('\n开始执行function1')
@pytest.fixture()
def test2():
print('\n开始执行function2')
@pytest.mark.usefixtures('test1')
@pytest.mark.usefixtures('test2')
def test_a():
print('---用例a执行---')
@pytest.mark.usefixtures('test2')
@pytest.mark.usefixtures('test1')
class TestCase:
def test_b(self):
print('---用例b执行---')
def test_c(self):
print('---用例c执行---')
if __name__=="__main__":
pytest.main(["-s","test03.py"])
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 3 items
test03.py
开始执行function2
开始执行function1
---用例a执行---
.
开始执行function1
开始执行function2
---用例b执行---
.
开始执行function1
开始执行function2
---用例c执行---
.
============================== 3 passed in 0.04s ==============================
Process finished with exit code 0