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 items
test02.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 items
test02.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,所有用例开始前和结束后调用一次(类级别,只调用一次)
方法前置setup_method和后置teardown_method,每个用例开始前和结束后调用一次(方法级,调用多次)
类里面前置setup和后置teardown,每个用例开始前和结束后调用一次(方法里面,运行在调用方法的前后,调用多次)
setup_class:所有用例执行之前(类级)
setup_method:每个用例开始前执行(方法级) setup:每个用例开始前执行(调用方法前) 正在执行---test_one .teardown:每个用例结束后执行(调用方法后) teardown_method:每个用例结束后执行(方法级)
setup_method:每个用例开始前执行(方法级) setup:每个用例开始前执行(调用方法前) 正在执行---test_two .teardown:每个用例结束后执行(调用方法后) teardown_method:每个用例结束后执行(方法级)
teardown_class:所有用例执行之后(类级)
import pytest
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_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 items
test02.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 items
test02.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