pytest 2.3在课堂上添加拆卸

时间:2012-09-21 22:08:34

标签: python pytest

我正在研究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

2 个答案:

答案 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 stepsimproved scenarios一起,现在这已经非常好了测试步骤结构

答案 1 :(得分:0)

事实上,还没有好的拆解例子。 request object有一个addfinalizer方法。以下是一个示例用法:

@pytest.setup(scope=...)
def mysetup(request):
     ...
     request.addfinalizer(finalizerfunction)
     ...

当范围内的所有测试都完成执行时,将调用终结函数。