自定义插件的鼻子测试永远不会因断言错误而进入拆卸状态

时间:2014-09-30 20:10:43

标签: unit-testing python-2.7 selenium nose nosetests

我有一个由鼻子运行的硒测试套件。我们编写了一个自定义插件,它将信息推送到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()被触发?

1 个答案:

答案 0 :(得分:0)

在查看自定义鼻子插件的许多不同示例后,我发现不同的插件为addSuccessaddErroraddFailure函数提供了不同数量的参数。

正如您可能已经猜到的那样,我的问题出在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的源代码,我在文档中没有关于这些参数来自何处的信息。但至少它已经解决了!