setup和teardown在每次用例开始前和结束后都会执行一次。
setupClass和teardownClass,需配合@classmethod装饰器一起使用,启动一次可以执行多个用例。
pytest框架也有类似的setup和teardown。
用例运行级别
- 函数级(setup_function/teardown_function)只对函数用例生效,每个test都运行。
- 类级别(setup_class/teardown_class)只在类的前后运行一次,每个class中的所有test只运行一次。
- 模块级(setup_module/teardown_module)开始于模块始末,每个module的所有test只运行一次。
- 方法级(setup_method/teardown_method)开始于方法始末。
- 类内(setup/teardown)运行在调用方法的前后。
setup_function/teardown_function
说明:每个用例开始和结束调用一次。
# test_demo.py
def setup_function():
print('--->setup_function')
def teardown_function():
print('--->teardown_function')
def test_a():
print('--->test_a')
assert 1
def test_b():
print('--->test_b')
assert 2==1
def test_c():
print('--->test_c')
assert 1
执行结果:
setup_module/teardown_module
说明:整个.py模块开始和结束调用一次。
# test_demo.py
def setup_module():
print('\n--->setup_module')
def teardown_module():
print('\n--->teardown_module')
def test_a():
print('\n--->test_a')
assert 1
def test_b():
print('\n--->test_b')
assert 2==1
def test_c():
print('\n--->test_c')
assert 1
执行结果:
setup_class/teardown_class
说明:所有用例执行始末执行一次。
import pytest
# test_demo.py
class TestCase():
def setup_class(self):
print('\n--->setup_class')
def teardown_class(self):
print('\n--->teardown_class')
def test_a(self):
print('\n--->test_a')
assert 1
def test_b(self):
print('\n--->test_b')
assert 1
def test_c(self):
print('\n--->test_c')
assert 1
执行结果:
setup_method/teardown_method
说明:每个用例始末执行一次。
import pytest
# test_demo.py
class TestCase():
def setup_method(self):
print('\n--->setup_method')
def teardown_method(self):
print('\n--->teardown_method')
def test_a(self):
print('\n--->test_a')
assert 1
def test_b(self):
print('\n--->test_b')
assert 1
def test_c(self):
print('\n--->test_c')
assert 1
执行结果:
setup/teardown
说明:每个用例始末执行一次。
import pytest
# test_demo.py
class TestCase():
def setup(self):
print('\n--->setup')
def teardown(self):
print('\n--->teardown')
def test_a(self):
print('\n--->test_a')
assert 1
def test_b(self):
print('\n--->test_b')
assert 1
def test_c(self):
print('\n--->test_c')
assert 1
执行结果:
混合使用
import pytest
# test_demo.py
def setup_module():
print('\n--->类外setup_module')
def teardown_module():
print('\n--->类外teardown_module')
def setup_function():
print('\n--->类外setup_function')
def teardown_function():
print('\n--->类外teardown_function')
def test_01():
print('\n--->类外test_01')
assert 1
def test_02():
print('\n--->类外test_02')
assert 2==1
class TestCase():
def setup(self):
print('\n--->setup')
def teardown(self):
print('\n--->teardown')
def test_a(self):
print('\n--->test_a')
assert 1
def test_b(self):
print('\n--->test_b')
assert 1
执行结果: