700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python Pytest调用fixture之@pytest.mark.usefixtures() 叠加usefixtures @pytest.fixture(autouse=True)用法详解

Python Pytest调用fixture之@pytest.mark.usefixtures() 叠加usefixtures @pytest.fixture(autouse=True)用法详解

时间:2019-09-29 20:04:40

相关推荐

Python Pytest调用fixture之@pytest.mark.usefixtures() 叠加usefixtures @pytest.fixture(autouse=True)用法详解

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.0rootdir: C:\Users\wangli\PycharmProjects\Test\testcollected 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.0rootdir: C:\Users\wangli\PycharmProjects\Test\testcollected 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.0rootdir: C:\Users\wangli\PycharmProjects\Test\testcollected 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.0rootdir: C:\Users\wangli\PycharmProjects\Test\testcollected 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.0rootdir: C:\Users\wangli\PycharmProjects\Test\testcollected 3 itemstest03.py 开始执行function2开始执行function1---用例a执行---.开始执行function1开始执行function2---用例b执行---.开始执行function1开始执行function2---用例c执行---.============================== 3 passed in 0.04s ==============================Process finished with exit code 0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。