首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅在使用python unittest2测试失败时执行代码?

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

Stack Overflow用户
提问于 2012-09-05 21:53:53
回答 5查看 2K关注 0票数 12

我在python的unittest2框架中运行了一些基于类的单元测试。我们使用Selenium WebDriver,它有一个方便的save_screenshot()方法。我想在tearDown()中获取每个测试失败的屏幕快照,以减少调试为什么测试失败的时间。

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

你会怎么处理这个?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-06 00:25:39

找到一个解决方案-我可以覆盖failureException

代码语言:javascript
复制
@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

这看上去令人难以置信的烦躁,但到目前为止似乎是可行的。

票数 8
EN

Stack Overflow用户

发布于 2015-05-16 21:07:54

这里有类似于@craigds回答的方法,但是具有目录支持和与Python3更好的兼容性:

代码语言:javascript
复制
@property
def failureException(self):
    class MyFailureException(AssertionError):
        def __init__(self_, *args, **kwargs):
            screenshot_dir = 'reports/screenshots'
            if not os.path.exists(screenshot_dir):
                os.makedirs(screenshot_dir)
            self.driver.save_screenshot('{0}/{1}.png'.format(screenshot_dir, self.id()))
            return super(MyFailureException, self_).__init__(*args, **kwargs)
    MyFailureException.__name__ = AssertionError.__name__
    return MyFailureException

这实际上是在这个博客中发现的。

我已经用argparse做了进一步的扩展

代码语言:javascript
复制
parser.add_argument("-r", "--reports-dir", action="store",   dest="dir",      help="Directory to save screenshots.", default="reports")     

因此,可以通过系统变量或传递参数动态地指定dir:

代码语言:javascript
复制
screenshot_dir = os.environ.get('REPORTS_DIR', self.args.dir) + '/screenshots'

如果您有额外的包装器来运行所有脚本,就像基类一样,这尤其有用。

票数 3
EN

Stack Overflow用户

发布于 2012-09-05 22:17:15

重写fail()以生成屏幕快照,然后调用TestCase.fail(self)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12290336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档