Python unittest:用Nose重试失败?

时间:2011-08-29 18:17:26

标签: python nose

我有一个随机失败的测试,我想在发送错误消息之前让它重试多次。

我正在使用带有Nose的python。

我编写了以下内容,但不幸的是,即使使用try / except处理,当第一次尝试测试失败时,Nose会返回错误。

def test_something(self):
    maxAttempts = 3
    func = self.run_something

    attempt = 1
    while True:
        if attempt == maxAttempts:
            yield func
            break

        else:
            try:
                yield func
                break
            except:
                attempt += 1

def run_something(self):
    #Do stuff

由于

2 个答案:

答案 0 :(得分:3)

您可以使用flaky nose plugin功能上的属性来自动重新运行测试并让您使用高级参数(例如,如果测试通过2次,那么它就是一次传递)

GitHub flaky project

如何为Python安装Flaky插件:

pip install flaky

鼻子测试跑步者配置示例:

nosetests.exe your_python_tests.py --with-flaky --force-flaky --max-runs=3

示例Python代码,其函数标记为Flaky属性:

from flaky import flaky

@flaky
def test_something_that_usually_passes(self):
    value_to_double = 21
    result = get_result_from_flaky_doubler(value_to_double)
    self.assertEqual(result, value_to_double * 2, 'Result doubled incorrectly.')

答案 1 :(得分:2)

通过使用生成器,您可以运行鼻子maxAttempts测试。如果任何失败,套件将失败。 try / catch并不特别适用于你的屈服测试,因为它的鼻子运行它们。像这样重写你的测试:

def test_something(self):
    maxAttempts = 3
    func = self.run_something

    attempt = 1
    while True:
        if attempt == maxAttempts:
            func() # <<<--------
            break

        else:
            try:
                func() # <<<--------
                break
            except:
                attempt += 1

def run_something(self):
    #Do stuff