Python Pytest前置setup和后置teardown详解
pytest用例運行級別:
●模塊級(setup_module/teardown_module)開始于模塊始末,全局的
●函數(shù)級(setup_function/teardown_function)只對函數(shù)用例生效
●類級(setup_class/teardown_class)只在類中前后運行一次(在類中生效,類外不生效)
●方法級(setup_method/teardown_method)開始于方法始末(在類中生效,類外不生效)
●類里面的(setup/teardown)運行在調(diào)用方法的前后(類中生效、類外有函數(shù)時生效)
函數(shù)級:
函數(shù)前置setup_function和后置teardown_function,放類中無效,放類外且類外有函數(shù)用例時才生效,每個用例開始前和結(jié)束后各調(diào)用一次,調(diào)用多次
import pytest def setup_function():print("setup_function:每個用例開始前都會執(zhí)行") def teardown_function():print("teardown_function:每個用例結(jié)束后都會執(zhí)行") def test_one():print("正在執(zhí)行---test_one") def test_two():print("正在執(zhí)行---test_two") def login():print("正在執(zhí)行---test_two") if __name__ == "__main__":pytest.main(["-s","test02.py"])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test02.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 itemstest02.py setup_function:每個用例開始前都會執(zhí)行 正在執(zhí)行---test_one .teardown_function:每個用例結(jié)束后都會執(zhí)行 setup_function:每個用例開始前都會執(zhí)行 正在執(zhí)行---test_two .teardown_function:每個用例結(jié)束后都會執(zhí)行============================== 2 passed in 0.14s ==============================Process finished with exit code 0模塊前置setup_module和后置teardown_module,放類中無效,放類外且類外有函數(shù)用例或類內(nèi)有函數(shù)用例時才生效,整個.py模塊開始前和結(jié)束后各調(diào)用一次
import pytest def setup_module():print("setup_module:整個.py模塊開始執(zhí)行一次") def teardown_module():print("teardown_module:整個.py模塊結(jié)束執(zhí)行一次") def setup_function():print("setup_function:每個用例開始前都會執(zhí)行") def teardown_function():print("teardown_function:每個用例結(jié)束后都會執(zhí)行") def test_one():print("正在執(zhí)行---test_one") def test_two():print("正在執(zhí)行---test_two") def login_test():print("正在執(zhí)行---test_two") if __name__ == "__main__":pytest.main(["-s","test02.py"])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test02.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 itemstest02.py setup_module:整個.py模塊開始執(zhí)行一次 setup_function:每個用例開始前都會執(zhí)行 正在執(zhí)行---test_one .teardown_function:每個用例結(jié)束后都會執(zhí)行 setup_function:每個用例開始前都會執(zhí)行 正在執(zhí)行---test_two .teardown_function:每個用例結(jié)束后都會執(zhí)行 teardown_module:整個.py模塊結(jié)束執(zhí)行一次============================== 2 passed in 0.08s ==============================Process finished with exit code 0類級:
類前置setup_class和后置teardown_class,放類外無效,放類內(nèi)且類內(nèi)有函數(shù)用例時才生效,類開始前和結(jié)束后各執(zhí)行一次(方法級,調(diào)用1次)
方法前置setup_method和后置teardown_method,放類外無效,放類內(nèi)且類內(nèi)有函數(shù)用例時才生效,每個用例開始前和結(jié)束后調(diào)用1次(方法級,調(diào)用多次)
類里面前置setup和后置teardown,放類內(nèi)(類內(nèi)有用例)和類外(有用例)都生效,每個用例開始前和結(jié)束后調(diào)用1次(函數(shù)、方法級,調(diào)用多次)
?
setup_class:所有用例執(zhí)行之前(類級)
setup_method:每個用例開始前執(zhí)行(方法級)
setup:每個用例開始前執(zhí)行(調(diào)用方法前)
正在執(zhí)行---test_one
.teardown:每個用例結(jié)束后執(zhí)行(調(diào)用方法后)
teardown_method:每個用例結(jié)束后執(zhí)行(方法級)
setup_method:每個用例開始前執(zhí)行(方法級)
setup:每個用例開始前執(zhí)行(調(diào)用方法前)
正在執(zhí)行---test_two
.teardown:每個用例結(jié)束后執(zhí)行(調(diào)用方法后)
teardown_method:每個用例結(jié)束后執(zhí)行(方法級)
teardown_class:所有用例執(zhí)行之后(類級)
?
import pytestclass Test():def setup(self):print("setup:每個用例開始前執(zhí)行(調(diào)用方法前)")def teardown(self):print("teardown:每個用例結(jié)束后執(zhí)行(調(diào)用方法后)")def setup_class(self):print("setup_class:所有用例執(zhí)行之前(類級)")def teardown_class(self):print("teardown_class:所有用例執(zhí)行之后(類級)")def setup_method(self):print("setup_method:每個用例開始前執(zhí)行(方法級)")def teardown_method(self):print("teardown_method:每個用例結(jié)束后執(zhí)行(方法級)")def test_one(self):print("正在執(zhí)行---test_one")def test_two(self):print("正在執(zhí)行---test_two")def login_test(self):print("正在執(zhí)行---test_two")if __name__ == "__main__":pytest.main(["-s","test02.py"])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test02.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 itemstest02.py setup_class:所有用例執(zhí)行之前(類級) setup_method:每個用例開始前執(zhí)行(方法級) setup:每個用例開始前執(zhí)行(調(diào)用方法前) 正在執(zhí)行---test_one .teardown:每個用例結(jié)束后執(zhí)行(調(diào)用方法后) teardown_method:每個用例結(jié)束后執(zhí)行(方法級) setup_method:每個用例開始前執(zhí)行(方法級) setup:每個用例開始前執(zhí)行(調(diào)用方法前) 正在執(zhí)行---test_two .teardown:每個用例結(jié)束后執(zhí)行(調(diào)用方法后) teardown_method:每個用例結(jié)束后執(zhí)行(方法級) teardown_class:所有用例執(zhí)行之后(類級)============================== 2 passed in 0.21s ==============================Process finished with exit code 0類與函數(shù)混合:
setup_module和teardown_module優(yōu)先級最大
import pytest def setup_module():print("——setup_module:整個.py模塊開始執(zhí)行一次【函數(shù)】") def teardown_module():print("——teardown_module:整個.py模塊結(jié)束執(zhí)行一次【函數(shù)】") def setup_function():print("====setup_function:每個用例開始前都會執(zhí)行【函數(shù)】") def teardown_function():print("====teardown_function:每個用例結(jié)束后都會執(zhí)行【函數(shù)】") def test_one():print("正在執(zhí)行---test_one【函數(shù)】") def test_two():print("正在執(zhí)行---test_two【函數(shù)】") def setup():print("@@@@@setup:每個用例開始前執(zhí)行(調(diào)用方法前)【函數(shù)】") def teardown():print("@@@@@teardown:每個用例結(jié)束后執(zhí)行(調(diào)用方法后)【函數(shù)】") class Test():def setup(self):print("setup:每個用例開始前執(zhí)行(調(diào)用方法前)")def teardown(self):print("teardown:每個用例結(jié)束后執(zhí)行(調(diào)用方法后)")def setup_class(self):print("setup_class:所有用例執(zhí)行之前(類級)")def teardown_class(self):print("teardown_class:所有用例執(zhí)行之后(類級)")def setup_method(self):print("setup_method:每個用例開始前執(zhí)行(方法級)")def teardown_method(self):print("teardown_method:每個用例結(jié)束后執(zhí)行(方法級)")def test_three(self):print("正在執(zhí)行---test_one")def test_four(self):print("正在執(zhí)行---test_two") if __name__ == "__main__":pytest.main(["-s","test02.py"])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test02.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 itemstest02.py ——setup_module:整個.py模塊開始執(zhí)行一次【函數(shù)】 ====setup_function:每個用例開始前都會執(zhí)行【函數(shù)】 @@@@@setup:每個用例開始前執(zhí)行(調(diào)用方法前)【函數(shù)】 正在執(zhí)行---test_one【函數(shù)】 .@@@@@teardown:每個用例結(jié)束后執(zhí)行(調(diào)用方法后)【函數(shù)】 ====teardown_function:每個用例結(jié)束后都會執(zhí)行【函數(shù)】 ====setup_function:每個用例開始前都會執(zhí)行【函數(shù)】 @@@@@setup:每個用例開始前執(zhí)行(調(diào)用方法前)【函數(shù)】 正在執(zhí)行---test_two【函數(shù)】 .@@@@@teardown:每個用例結(jié)束后執(zhí)行(調(diào)用方法后)【函數(shù)】 ====teardown_function:每個用例結(jié)束后都會執(zhí)行【函數(shù)】 setup_class:所有用例執(zhí)行之前(類級) setup_method:每個用例開始前執(zhí)行(方法級) setup:每個用例開始前執(zhí)行(調(diào)用方法前) 正在執(zhí)行---test_one .teardown:每個用例結(jié)束后執(zhí)行(調(diào)用方法后) teardown_method:每個用例結(jié)束后執(zhí)行(方法級) setup_method:每個用例開始前執(zhí)行(方法級) setup:每個用例開始前執(zhí)行(調(diào)用方法前) 正在執(zhí)行---test_two .teardown:每個用例結(jié)束后執(zhí)行(調(diào)用方法后) teardown_method:每個用例結(jié)束后執(zhí)行(方法級) teardown_class:所有用例執(zhí)行之后(類級) ——teardown_module:整個.py模塊結(jié)束執(zhí)行一次【函數(shù)】============================== 4 passed in 0.04s ==============================Process finished with exit code 0?
總結(jié)
以上是生活随笔為你收集整理的Python Pytest前置setup和后置teardown详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python queue队列
- 下一篇: php页面之间传值_php如何在不同页面