unittest用例报错/失败重跑装饰函数带setup/teardown

废话不多说,直接上代码

import unittest
def log(s, t, n):
    def decorator(xingfangfa):
        print xingfangfa
        def wrapper(*a,**w):
            for i in range(n):
                try:
                    print '-------------------\nNum:', i
                    re = xingfangfa(*a,**w)
                    print 'success \n-------------------'
                    return re
                except Exception:
                    print 'have a error '
                    t(*a)
                    s(*a)
                    print '\n-------------------'
            raise Exception
        return wrapper
    return decorator
class Test(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.abc = 0
    def setUp(self):
        print 'I am setup','abc:',self.abc
    def tearDown(self):
        print 'I am tearDown','abc:',self.abc
    @log(setUp,tearDown,5)
    def test1(self,q=2):
        self.abc += 1
        print 'do case: ',
        assert self.abc == 3
if __name__ == '__main__':
    unittest.main()

其中 n 表示最大重跑5次
把setUp tearDown当作参数给 重跑装饰器
重跑装饰器相对于传统装饰器增加最外层控制器
大家可以试着看看。我这的ios自动化同学已经在用,效果不错。
如果遇到任何问题,欢迎留言。

你可能感兴趣的:(unittest用例报错/失败重跑装饰函数带setup/teardown)