import pytest
class Test():
def setup_method(self):
print('这是类方法级别的前置内容')
def teardown_method(self):
print('这是类方法级别的后置内容')
def setup(self):
print('这是类方法细化级别的前置内容')
def teardown(self):
print('这是类方法细化级别的后置内容')
def test01(self):
print('这是测试用例1')
def test02(self):
print('这是测试用例2')
if name == 'main':
pytest.main(['-v', '-s', 'setup和teardown类方法细化级别.py'])
控制台打印内容:
setup和teardown类方法细化级别.py::Test::test01 这是类方法级别的前置内容
这是测试用例1
PASSED这是类方法级别的后置内容
setup和teardown类方法细化级别.py::Test::test02 这是类方法级别的前置内容
这是测试用例2
PASSED这是类方法级别的后置内容
在pytest中,setup_method()和teardown_method()方法是类级别的fixture,用于在类中的所有测试方法执行之前和之后分别执行一次。而setup()和teardown()方法是方法级别的fixture,用于在每个测试方法执行之前和之后分别执行一次。这意味着,如果你同时定义了setup_method()和setup()方法,setup_method()会覆盖setup()方法,因为在类级别fixture和方法级别fixture之间,pytest优先执行类级别fixture。
在你的代码中,虽然你同时定义了setup_method()和setup()方法,但是setup()方法并没有被执行,因为类级别fixture setup_method()覆盖了方法级别fixture setup()。如果你想让setup()方法被执行,你可以将setup_method()方法重命名,或者将setup()方法定义为类级别fixture setup_class()方法的一个别名。示例如下:
python
import pytest
class Test():
def setup_class(self):
print('这是类级别的前置内容')
def teardown_class(self):
print('这是类级别的后置内容')
def setup_method(self):
print('这是方法级别的前置内容')
def teardown_method(self):
print('这是方法级别的后置内容')
def test01(self):
print('这是测试用例1')
def test02(self):
print('这是测试用例2')
if name == 'main':
pytest.main(['-v', '-s', 'setup和teardown类方法细化级别.py'])
这样,你就可以同时执行类级别fixture和方法级别fixture,并且setup()方法也会被执行。