我在python的unittest2框架中运行了一些基于类的单元测试。我们使用Selenium WebDriver,它有一个方便的save_screenshot()方法。我想在tearDown()中获取每个测试失败的屏幕快照,以减少调试为什么测试失败的时间。
但是,我无法找到任何方法只在测试失败时运行代码。不管测试是否成功,tearDown()都会被调用,我不想让我们的文件系统为成功的测试提供数百个浏览器屏幕截图。
你会怎么处理这个?
发布于 2012-09-06 00:25:39
找到一个解决方案-我可以覆盖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这看上去令人难以置信的烦躁,但到目前为止似乎是可行的。
发布于 2015-05-16 21:07:54
这里有类似于@craigds回答的方法,但是具有目录支持和与Python3更好的兼容性:
@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做了进一步的扩展
parser.add_argument("-r", "--reports-dir", action="store", dest="dir", help="Directory to save screenshots.", default="reports") 因此,可以通过系统变量或传递参数动态地指定dir:
screenshot_dir = os.environ.get('REPORTS_DIR', self.args.dir) + '/screenshots'如果您有额外的包装器来运行所有脚本,就像基类一样,这尤其有用。
发布于 2012-09-05 22:17:15
重写fail()以生成屏幕快照,然后调用TestCase.fail(self)
https://stackoverflow.com/questions/12290336
复制相似问题