如何使用python unittest2仅在测试失败时执行代码?

cra*_*gds 11 python unit-testing selenium-webdriver

我在python的unittest2框架中运行了一些基于类的单元测试.我们正在使用Selenium WebDriver,它有一个方便的save_screenshot()方法.我想抢到拆解()的截图为每个测试失败,以减少花在调试的时间,为什么一个测试失败.

但是,我找不到任何方法只在测试失败时运行代码.tearDown()无论测试是否成功,都会调用,我不想让我们的文件系统混乱,有数百个浏览器屏幕截图用于成功的测试.

你会怎么做?

cra*_*gds 7

找到了解决方案 - 我可以覆盖failureException:

@property
def failureException(self):
    class MyFailureException(AssertionError):
        def __init__(self_, *args, **kwargs):
            self.b.save_screenshot('%s.png' % self.id())
            return super(MyFailureException, self_).__init__(*args, **kwargs)
    MyFailureException.__name__ = AssertionError.__name__
    return MyFailureException
Run Code Online (Sandbox Code Playgroud)

这似乎令人难以置信的hacky但它​​似乎工作到目前为止.