无法对拆解中的异常做出反应

Cannot react to exception in teardown

提问人:Northers 提问时间:12/19/2017 最后编辑:asherbretNorthers 更新时间:12/20/2017 访问量:538

问:

我正在尝试在我的拆解方法中添加一些东西,以便在发生异常时,它会在关闭浏览器实例之前截取屏幕截图。

到目前为止,我有:-

def tearDown(self):
    if sys.exc_info()[0]:
        test_method_name = self._testMethodName
        screenshot_name = common_functions.create_unique_id() + test_method_name + ".png"
        common_functions.take_screenshot(self.driver, screenshot_name)
    self.driver.close()

事实上,永远不会截取屏幕截图,如果我将 if 语句更改为 那么无论是否引发异常,它都会截取屏幕截图。if sys.exc_info():

当我查询返回的内容时,我得到.我希望第一个元素至少应该包含异常名称。sys.exc_infoNone, None, None

屏幕截图 python-unittest sys chrome-web-driver

评论

0赞 asherbret 12/19/2017
在哪里以及如何称呼?tearDown
0赞 Northers 12/19/2017
它与设置和实际测试用例函数一起位于测试用例类中。运行测试用例时,Setup 和 Teardown 都按预期工作(我通过查找不存在的元素来强制异常),只是当发生异常时我无法截取屏幕截图。它要么一直发生,要么不发生,具体取决于 if 语句。

答:

1赞 asherbret 12/20/2017 #1

文档开始(我的重点):sys.exc_info()

此函数返回一个由三个值组成的元组,这些值提供有关当前正在处理的异常的信息。

这对于您要查找的内容来说还不够好,因为当调用时,测试期间发生的潜在异常已经得到处理,这就是为什么无论在测试期间是否引发异常,都将返回一个元组 .tearDownsys.exc_info()None, None, None

但是,您可以尝试使用不同的方法:定义一个标志,该标志将指示测试是否存在异常。这将看起来像:setUphad_exception

class MyTest(unittest.TestCase):
    def setUp(self):
        self.had_exception = True
        # ...

    def test_sample(self):
        self.assertTrue("your test logic here...")
        self.had_exception = False

    def tearDown(self):
        if self.had_exception:
            test_method_name = self._testMethodName
            screenshot_name = common_functions.create_unique_id() + test_method_name + ".png"
            common_functions.take_screenshot(self.driver, screenshot_name)
        self.driver.close()

评论

0赞 Northers 12/20/2017
太好了 - 谢谢。这非常有效,并且很好地解释了为什么我也得到了 None, None, None 结果。:)