自动化测试的时候,常常会遇到这样的问题:大部分时候执行测试用例都能pass,只是偶然出现false,而出现false的时候是由于外部因素引发,好比WiFi不稳定、使用了第三方插件不稳定等,这些状况下每每从新再执行用例就能够pass。可能遇到这种用例false的状况,咱们首先想到的会是去剔除失败的用例,可是这样作不是最明智的作法,当用例数量多的时候,很难去断定哪些用例容易因为第三方因素false。最好的办法是----让出错的用例重跑。python
那么如何作到让出错的用例重跑呢?若是你用的是nose或者pytest框架编写用例,就可使用flaky插件。该插件可以在那些不稳定的case失败以后,重复执行这些case。 框架
1.flaky插件安装测试
pip install flaky
2.测试脚本中的使用.net
2.1 将不稳定的case标记为flaky插件
from flaky import flaky @flaky def test_func(self): self.assertEqual(1+3,5)
备注:在case方法上方加上@flaky,用例执行失败的时候会默认从新执行一次。命令行
from flaky import flaky @flaky(max_runs=3, min_passes=2) def test_func(self): self.assertEqual(1+3,5)
备注:flaky接收两个参数:max_runs,min_passes。max_runs表示测试失败以后,会重复执行这个测试的次数。min_passes表示执行max_runs这么屡次中,成功的次数>=min_passes的话,则认为这个case就pass了。如上用例表示:执行3次用例中,若是pass次数>=2,则pass.code
2.2 将不稳定的测试类标为flakyip
from flaky import flaky @flaky class testAdd(unittest.TestCase): def test_func(self): self.assertEqual(1+3,5) @flaky(max_run=3) def test_double(self): self.assertEqual(2+6,8)
备注:以上testAdd类下的全部方法都会应用到flaky。test_func失败以后会默认再执行一次。test_double失败以后会从新再执行3次。get
3.命令行中使用flakyit
3.1 强制全部的测试使用flaky
py.test --force-flaky
3.2设置重复执行的次数
py.test --force-flaky --max-runs=3 --min-passes=2
3.3不输出flaky执行的测试报告
py.test --no-flaky-report
备注:正常状况下,测试完成后将输出flaky的测试报告,该报告中显示了有哪些测试重复执行了以及重复执行的状况。若是不想在测试完成后输出flaky报告,能够在执行测试的时候加上--no-flaky-report参数。