pytest 2.3 adding teardowns within the class

前端 未结 2 1940
小蘑菇
小蘑菇 2021-01-15 20:43

I\'m researching new version of pytest (2.3) and getting very excited about the new functionality where you

\"can precisely control teardown by regis

相关标签:
2条回答
  • 2021-01-15 21:45

    Ok, I got it working by having a 'session'-wide 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
    

    Thanks @hpk42 for answering e-mails and helping me get the final version.

    NOTE: together with xfailing the rest of the steps and improved scenarios this now makes a pretty good Test-Step structure

    0 讨论(0)
  • 2021-01-15 21:49

    Indeed, there are no good examples for teardown yet. The request object has a addfinalizer method. Here is an example usage:

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

    The finalizerfunction will be called when all tests withing the scope finished execution.

    0 讨论(0)
提交回复
热议问题