无法对拆解中的异常做出反应
Cannot react to exception in teardown
我正在尝试向我的拆解方法添加一些内容,以便在出现异常时在关闭浏览器实例之前截取屏幕截图。
到目前为止我有:-
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_info
返回的内容时,我得到 None, None, None
。我希望第一个元素至少应该包含异常名称。
来自sys.exc_info()
上的docs(我的重点):
This function returns a tuple of three values that give information about the exception that is currently being handled.
这对于您正在寻找的内容来说还不够好,因为在调用 tearDown
时,已经处理了测试期间发生的潜在异常,这就是为什么无论是否有异常在测试期间被提出,sys.exc_info()
将 return 一个 None, None, None
.
的元组
但是,您可以尝试使用不同的方法:在 setUp
中定义一个标志 had_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()
我正在尝试向我的拆解方法添加一些内容,以便在出现异常时在关闭浏览器实例之前截取屏幕截图。
到目前为止我有:-
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_info
返回的内容时,我得到 None, None, None
。我希望第一个元素至少应该包含异常名称。
来自sys.exc_info()
上的docs(我的重点):
This function returns a tuple of three values that give information about the exception that is currently being handled.
这对于您正在寻找的内容来说还不够好,因为在调用 tearDown
时,已经处理了测试期间发生的潜在异常,这就是为什么无论是否有异常在测试期间被提出,sys.exc_info()
将 return 一个 None, None, None
.
但是,您可以尝试使用不同的方法:在 setUp
中定义一个标志 had_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()