unittest框架拥有setup_class和teardown_class
setup_class类的所有用例执行前执行一次!
teardown_class类的所有用例执行后执行一次!
以及setup和teardown函数
setup:每条用例执行前执行一次!
teardown:每条用例执行后执行一次!
那在pytest中怎么去实现每条用例执行前和执行后执行一次?以及所有用例执行前和执行后执行一次?
1.pytest中有模块级别每条用例执行前和执行后执行一次和所有用例执行前和执行后执行一次
2.pytest中有类级别每条用例执行前和执行后执行一次和所有用例执行前和执行后执行一次
先看模块级别的
setup_module:#整个模块运行前会执行一次,包括运行完类
teardown_module:#整个模块运行后会执行一次,包括运行完类
import pytest
'''
#整个模块运行前会执行一次,包括运行完类
'''
def setup_module():
print("这个是模块级别的setup_module")
'''
#整个模块运行后会执行一次,包括运行完类
'''
def teardown_module():
print("这个是模块级别的teardown_module")
def test_01():
print("我是test_02得test_01得用例")
class test_demo():
def test_01(self):
print("我是test_02得类得用例!")
C:\Python39\python.exe F:/pytestObject/main.py
============================= test session starts =============================
collecting ... collected 2 items
Testcase01/test03.py::test_01 这个是模块级别的setup_module
我是test_02得test_01得用例
PASSED
Testcase01/test03.py::test_demo::test_01 我是test_02得类得用例!
PASSED这个是模块级别的teardown_module
============================== 2 passed in 0.02s ==============================
Process finished with exit code 0
上图结果中,setup_module和teardown_module是作用在模块的testcase开始前和class的testcase结束后
模块级别的setup_function和teardown_function
setup_function:#模块中每条用例执行前执行一次,不会作用于class中的test_case
teardown_function:#模块中每条用例执行后执行一次,不会作用于class中的test_case
import pytest
'''
#整个模块运行前会执行一次,包括运行完类
'''
def setup_module():
print("这个是模块级别的setup_module")
'''
#整个模块运行后会执行一次,包括运行完类
'''
def teardown_module():
print("这个是模块级别的teardown_module")
'''
#模块中每条用例执行前执行一次,不会作用于class中的test_case
'''
def setup_function():
print("模块中每条用例执行前执行一次!")
'''
#模块中每条用例执行后执行一次,不会作用于class中的test_case
'''
def teardown_function():
print("模块中每条用例执行后执行一次!")
def test_01():
print("我是test_02得test_01得用例")
class test_demo():
def test_01(self):
print("我是test_02得类得用例!")
运行的结果:从下方法可以看出setup_function和teardown_function作用在模块的方法上,不会作用在类中的testcase
C:\Python39\python.exe F:/pytestObject/main.py
============================= test session starts =============================
Testcase01/test03.py::test_01 这个是模块级别的setup_module
模块中每条用例执行前执行一次!
我是test_02得test_01得用例
PASSED模块中每条用例执行后执行一次!
Testcase01/test03.py::test_demo::test_01 我是test_02得类得用例!
PASSED这个是模块级别的teardown_module
============================== 2 passed in 0.02s ==============================
看class级别的
setup_class:所有用例执行前执行一次
teardown_class:所有用例执行后执行一次!
import pytest
'''
#整个模块运行前会执行一次,包括运行完类
'''
def setup_module():
print("这个是模块级别的setup_module")
'''
#整个模块运行后会执行一次,包括运行完类
'''
def teardown_module():
print("这个是模块级别的teardown_module")
'''
#模块中每条用例执行前执行一次,不会作用于class中的test_case
'''
def setup_function():
print("模块中每条用例执行前执行一次!")
'''
#模块中每条用例执行后执行一次,不会作用于class中的test_case
'''
def teardown_function():
print("模块中每条用例执行后执行一次!")
def test_01():
print("我是test_02得test_01得用例")
class test_demo():
def setup_class(self):
print("Test_demo中所有用例执行前执行一次!")
def teardown_class(self):
print("Test_demo中所有用例执行后执行一次!")
def test_01(self):
print("我是test_02得类得用例!")
运行结果:
以下结果看setup_class和teardown_class的效果只作用于class,所有用例执行前执行一次,
所有用例执行后执行一次!
C:\Python39\python.exe F:/pytestObject/main.py
============================= test session starts =============================
Testcase01/test03.py::test_01 这个是模块级别的setup_module
模块中每条用例执行前执行一次!
我是test_02得test_01得用例
PASSED模块中每条用例执行后执行一次!
Testcase01/test03.py::test_demo::test_01 Test_demo中所有用例执行前执行一次!
我是test_02得类得用例!
PASSEDTest_demo中所有用例执行后执行一次!
这个是模块级别的teardown_module
============================== 2 passed in 0.03s ==============================
Process finished with exit code 0
class级别的setup和teardown
import pytest
'''
#整个模块运行前会执行一次,包括运行完类
'''
def setup_module():
print("这个是模块级别的setup_module")
'''
#整个模块运行后会执行一次,包括运行完类
'''
def teardown_module():
print("这个是模块级别的teardown_module")
'''
#模块中每条用例执行前执行一次,不会作用于class中的test_case
'''
def setup_function():
print("模块中每条用例执行前执行一次!")
'''
#模块中每条用例执行后执行一次,不会作用于class中的test_case
'''
def teardown_function():
print("模块中每条用例执行后执行一次!")
def test_01():
print("我是test_02得test_01得用例")
class test_demo():
def setup_class(self):
print("Test_demo中所有用例执行前执行一次!")
def teardown_class(self):
print("Test_demo中所有用例执行后执行一次!")
def setup(self):
print("这是一个setup")
def teardown(self):
print("这是一个teardown")
def test_01(self):
print("我是test_02得类得用例!")
运行结果:
可以看出setup和teardown只作用于class
C:\Python39\python.exe F:/pytestObject/main.py
============================= test session starts =============================
Testcase01/test03.py::test_01 这个是模块级别的setup_module
模块中每条用例执行前执行一次!
我是test_02得test_01得用例
PASSED模块中每条用例执行后执行一次!
Testcase01/test03.py::test_demo::test_01 Test_demo中所有用例执行前执行一次!
这是一个setup
我是test_02得类得用例!
PASSED这是一个teardown
Test_demo中所有用例执行后执行一次!
这个是模块级别的teardown_module
============================== 2 passed in 0.01s ==============================
Process finished with exit code 0