Python Pytest前置setup和后置teardown详解
pytest用例運行級別:
●模塊級(setup_module/teardown_module)開始于模塊始末,全局的
●函數級(setup_function/teardown_function)只對函數用例生效
●類級(setup_class/teardown_class)只在類中前后運行一次(在類中生效,類外不生效)
●方法級(setup_method/teardown_method)開始于方法始末(在類中生效,類外不生效)
●類里面的(setup/teardown)運行在調用方法的前后(類中生效、類外有函數時生效)
函數級:
函數前置setup_function和后置teardown_function,放類中無效,放類外且類外有函數用例時才生效,每個用例開始前和結束后各調用一次,調用多次
import pytest def setup_function():print("setup_function:每個用例開始前都會執行") def teardown_function():print("teardown_function:每個用例結束后都會執行") def test_one():print("正在執行---test_one") def test_two():print("正在執行---test_two") def login():print("正在執行---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:每個用例開始前都會執行 正在執行---test_one .teardown_function:每個用例結束后都會執行 setup_function:每個用例開始前都會執行 正在執行---test_two .teardown_function:每個用例結束后都會執行============================== 2 passed in 0.14s ==============================Process finished with exit code 0模塊前置setup_module和后置teardown_module,放類中無效,放類外且類外有函數用例或類內有函數用例時才生效,整個.py模塊開始前和結束后各調用一次
import pytest def setup_module():print("setup_module:整個.py模塊開始執行一次") def teardown_module():print("teardown_module:整個.py模塊結束執行一次") def setup_function():print("setup_function:每個用例開始前都會執行") def teardown_function():print("teardown_function:每個用例結束后都會執行") def test_one():print("正在執行---test_one") def test_two():print("正在執行---test_two") def login_test():print("正在執行---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模塊開始執行一次 setup_function:每個用例開始前都會執行 正在執行---test_one .teardown_function:每個用例結束后都會執行 setup_function:每個用例開始前都會執行 正在執行---test_two .teardown_function:每個用例結束后都會執行 teardown_module:整個.py模塊結束執行一次============================== 2 passed in 0.08s ==============================Process finished with exit code 0類級:
類前置setup_class和后置teardown_class,放類外無效,放類內且類內有函數用例時才生效,類開始前和結束后各執行一次(方法級,調用1次)
方法前置setup_method和后置teardown_method,放類外無效,放類內且類內有函數用例時才生效,每個用例開始前和結束后調用1次(方法級,調用多次)
類里面前置setup和后置teardown,放類內(類內有用例)和類外(有用例)都生效,每個用例開始前和結束后調用1次(函數、方法級,調用多次)
?
setup_class:所有用例執行之前(類級)
setup_method:每個用例開始前執行(方法級)
setup:每個用例開始前執行(調用方法前)
正在執行---test_one
.teardown:每個用例結束后執行(調用方法后)
teardown_method:每個用例結束后執行(方法級)
setup_method:每個用例開始前執行(方法級)
setup:每個用例開始前執行(調用方法前)
正在執行---test_two
.teardown:每個用例結束后執行(調用方法后)
teardown_method:每個用例結束后執行(方法級)
teardown_class:所有用例執行之后(類級)
?
import pytestclass Test():def setup(self):print("setup:每個用例開始前執行(調用方法前)")def teardown(self):print("teardown:每個用例結束后執行(調用方法后)")def setup_class(self):print("setup_class:所有用例執行之前(類級)")def teardown_class(self):print("teardown_class:所有用例執行之后(類級)")def setup_method(self):print("setup_method:每個用例開始前執行(方法級)")def teardown_method(self):print("teardown_method:每個用例結束后執行(方法級)")def test_one(self):print("正在執行---test_one")def test_two(self):print("正在執行---test_two")def login_test(self):print("正在執行---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:所有用例執行之前(類級) setup_method:每個用例開始前執行(方法級) setup:每個用例開始前執行(調用方法前) 正在執行---test_one .teardown:每個用例結束后執行(調用方法后) teardown_method:每個用例結束后執行(方法級) setup_method:每個用例開始前執行(方法級) setup:每個用例開始前執行(調用方法前) 正在執行---test_two .teardown:每個用例結束后執行(調用方法后) teardown_method:每個用例結束后執行(方法級) teardown_class:所有用例執行之后(類級)============================== 2 passed in 0.21s ==============================Process finished with exit code 0類與函數混合:
setup_module和teardown_module優先級最大
import pytest def setup_module():print("——setup_module:整個.py模塊開始執行一次【函數】") def teardown_module():print("——teardown_module:整個.py模塊結束執行一次【函數】") def setup_function():print("====setup_function:每個用例開始前都會執行【函數】") def teardown_function():print("====teardown_function:每個用例結束后都會執行【函數】") def test_one():print("正在執行---test_one【函數】") def test_two():print("正在執行---test_two【函數】") def setup():print("@@@@@setup:每個用例開始前執行(調用方法前)【函數】") def teardown():print("@@@@@teardown:每個用例結束后執行(調用方法后)【函數】") class Test():def setup(self):print("setup:每個用例開始前執行(調用方法前)")def teardown(self):print("teardown:每個用例結束后執行(調用方法后)")def setup_class(self):print("setup_class:所有用例執行之前(類級)")def teardown_class(self):print("teardown_class:所有用例執行之后(類級)")def setup_method(self):print("setup_method:每個用例開始前執行(方法級)")def teardown_method(self):print("teardown_method:每個用例結束后執行(方法級)")def test_three(self):print("正在執行---test_one")def test_four(self):print("正在執行---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模塊開始執行一次【函數】 ====setup_function:每個用例開始前都會執行【函數】 @@@@@setup:每個用例開始前執行(調用方法前)【函數】 正在執行---test_one【函數】 .@@@@@teardown:每個用例結束后執行(調用方法后)【函數】 ====teardown_function:每個用例結束后都會執行【函數】 ====setup_function:每個用例開始前都會執行【函數】 @@@@@setup:每個用例開始前執行(調用方法前)【函數】 正在執行---test_two【函數】 .@@@@@teardown:每個用例結束后執行(調用方法后)【函數】 ====teardown_function:每個用例結束后都會執行【函數】 setup_class:所有用例執行之前(類級) setup_method:每個用例開始前執行(方法級) setup:每個用例開始前執行(調用方法前) 正在執行---test_one .teardown:每個用例結束后執行(調用方法后) teardown_method:每個用例結束后執行(方法級) setup_method:每個用例開始前執行(方法級) setup:每個用例開始前執行(調用方法前) 正在執行---test_two .teardown:每個用例結束后執行(調用方法后) teardown_method:每個用例結束后執行(方法級) teardown_class:所有用例執行之后(類級) ——teardown_module:整個.py模塊結束執行一次【函數】============================== 4 passed in 0.04s ==============================Process finished with exit code 0?
總結
以上是生活随笔為你收集整理的Python Pytest前置setup和后置teardown详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python queue队列
- 下一篇: Python类方法、实例方法、静态方法和