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 itemstest03.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 itemstest03.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 itemstest03.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 itemstest03.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 itemstest03.py
开始执行function2开始执行function1
---用例a执行---
.
开始执行function1开始执行function2
---用例b执行---
.
开始执行function1开始执行function2
---用例c执行---
.============================== 3 passed in 0.04s ==============================Process finished with exit code 0