首页 新闻 会员 周边

为什么setup_method执行了后setup不会执行呢?

0
[待解决问题]

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这是类方法级别的后置内容

聚散浮沉的主页 聚散浮沉 | 菜鸟二级 | 园豆:202
提问于:2022-09-24 19:34
< >
分享
所有回答(1)
0

在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()方法也会被执行。

Technologyforgood | 园豆:6468 (大侠五级) | 2023-04-09 09:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册