我有一个随机失败的测试,我想在发送错误消息之前让它重试多次。
我正在使用带有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
由于
答案 0 :(得分:3)
您可以使用flaky nose plugin功能上的属性来自动重新运行测试并让您使用高级参数(例如,如果测试通过2次,那么它就是一次传递)
如何为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