我有一个由鼻子运行的硒测试套件。我们编写了一个自定义插件,它将信息推送到afterTest()
中的数据库,但这不会返回任何内容,因此它不应该干扰任何鼻子的正常功能。
如果测试因超时或其他一些浏览器错误而出现问题,则测试输入teardown()
就好了,并且注册error
。
但是如果测试因断言错误而失败,则会将这些注册为error
s(而不是failure
s),而teardown()永远不会被触发,因此{{1}会留下许多孤立的浏览器生活在self.driver.quit()
。
例如,我们有一个测试,它在我们的网页上执行功能,它有一个加载指示器。我们想验证指标是否及时消失,因此我们已将此功能写入测试库。
teardown()
当超过时间时,会抛出一个断言,如下所示:
def Check_for_global_indicator_doesnt_exist(unit_test):
global_indicator_doesnt_exists=unit_test.wait_element_doesnt_exist_returns(".global-loading-indicator",unit_test.settings.NORMAL_WAIT)
if global_indicator_doesnt_exists:
logger.debug("Global Loading Indicator button disappearing in 10 seconds")
else:
logger.warning("Global Loading Indicator button didn't disappear in 10 seconds")
global_indicator_LONG_WAIT=unit_test.wait_element_doesnt_exist_returns(".global-loading-indicator",unit_test.settings.LONG_WAIT)
unit_test.assertEqual(global_indicator_LONG_WAIT, True, "Global Loading Indicator button didn't disappear even after 40 seconds")
在我看来,有两个异常现象:1)为什么鼻子会考虑这些错误而不是失败? 2)为什么防止teardown()被触发?
答案 0 :(得分:0)
在查看自定义鼻子插件的许多不同示例后,我发现不同的插件为addSuccess
,addError
和addFailure
函数提供了不同数量的参数。
正如您可能已经猜到的那样,我的问题出在addFailure
函数中。 Nose希望我用5个args来定义函数,但我只给它4个空间。
初始代码
def addSuccess(self, test, capt):
do_stuff()
def addError(self, test, capt, tb_info):
do_error_stuff()
def addFailure(self, test, capt, tb_info):
do_failure_stuff()
更正代码
...
def addFailure(self, test, err, capt, tb_info):
do_failure_stuff()
很遗憾,自定义插件上的Nose文档非常稀疏(事实上,官方的鼻子文档只指定addFailure
所需的3个参数,即使许多"电池包括& #34;插件用4)定义它。如果不使用Nose的源代码,我在文档中没有关于这些参数来自何处的信息。但至少它已经解决了!