Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python单元测试:使用Nose失败时重试?_Python_Nose - Fatal编程技术网

Python单元测试:使用Nose失败时重试?

Python单元测试:使用Nose失败时重试?,python,nose,Python,Nose,我有一个随机失败的测试,我想让它在发送错误消息之前重试多次 我正在使用带鼻子的python 我写了以下内容,但不幸的是,即使使用try/except处理,当第一次测试失败时,Nose也会返回一个错误 def test_something(self): maxAttempts = 3 func = self.run_something attempt = 1 while True: if attempt == maxAttempts:

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

我正在使用带鼻子的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

谢谢

通过使用生成器,您可以让nose
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
def test_something(self):
最大尝试次数=3
func=self.run\u某物
尝试=1
尽管如此:
如果尝试==最大尝试次数:

func()#您可以在函数中使用属性,这些属性将自动重新运行测试,并允许您使用高级参数(例如,若3个测试中有2个通过,那个么它就是一个通过)

如何为Python安装Flaky插件:

pip install flaky
机头测试转轮配置示例:

nosetests.exe your_python_tests.py --with-flaky --force-flaky --max-runs=3
函数标记为Flaky属性的Python代码示例:

从flaky导入flaky
@薄的
def测试通常通过的东西(自我):
值\u到\u double=21
结果=从成片加倍器(值加倍)中获得结果
self.assertEqual(结果,值加倍*2,'结果加倍不正确')

如果它只是偶尔出现故障,这就是将其视为一个特别讨厌的错误的原因,而不是掩盖它。在我的情况下,它经常出现故障是可以接受的(这取决于外部资源等)。谢谢,我尝试使用生成器来更干净地处理安装和拆卸,但这同样有效