我正在研究pytest(2.3)的新版本,并对你所在的新功能感到非常兴奋
“可以通过注册一个或多个来精确控制拆卸 一旦他们执行了某些操作,拆解功能就会完成 需要撤消,不需要单独的“拆解” 装饰“
来自here
当它被用作函数时,它是如此明确,但如何在课堂上使用它?
class Test(object):
@pytest.setup(scope='class')
def stp(self):
self.propty = "something"
def test_something(self):
... # some code
# need to add something to the teardown
def test_something_else(self):
... # some code
# need to add even more to the teardown
答案 0 :(得分:3)
好的,我通过'会话'范围的funcarg finalizer
来实现它:
@pytest.fixture(scope = "session")
def finalizer():
return Finalizer()
class Finalizer(object):
def __init__(self):
self.fin_funcs = []
def add_fin_func(self, func):
self.fin_funcs.append(func)
def remove_fin_func(self, func):
try:
self.fin_funcs.remove(func)
except:
pass
def execute(self):
for func in reversed(self.fin_funcs):
func()
self.fin_funcs = []
class TestSomething(object):
@classmethod
@pytest.fixture(scope = "class", autouse = True)
def setup(self, request, finalizer):
self.finalizer = finalizer
request.addfinalizer(self.finalizer.execute)
self.finalizer.add_fin_func(lambda: some_teardown())
def test_with_teardown(self):
#some test
self.finalizer.add_fin_func(self.additional_teardown)
def additional_teardown(self):
#additional teardown
感谢@ hpk42回复电子邮件并帮助我获得最终版本。
注意:与xfailing the rest of the steps和improved scenarios一起,现在这已经非常好了测试步骤结构
答案 1 :(得分:0)
事实上,还没有好的拆解例子。 request object有一个addfinalizer方法。以下是一个示例用法:
@pytest.setup(scope=...)
def mysetup(request):
...
request.addfinalizer(finalizerfunction)
...
当范围内的所有测试都完成执行时,将调用终结函数。