1. 程式人生 > >python+selenium+unitest用例失敗重運行

python+selenium+unitest用例失敗重運行

case sleep lag ret led iou script break test

經過多次研讀和調試unittest代碼,後來發現一個也可以重運行setUp()和dearDown()的解決辦法,那就是修改源碼,我們重新建一個模塊套件類來覆蓋原來的TestSuite類

實例代碼:

[python] view plain copy
  1. class Suit(unittest.TestSuite):
  2. def run(self, result, debug=False):
  3. failcount = 1#失敗總運行次數
  4. class_num = 1
  5. topLevel = False
  6. if getattr(result, ‘_testRunEntered‘, False) is False:
  7. result._testRunEntered = topLevel = True
  8. for test in self:
  9. case_num = 1
  10. if result.shouldStop:
  11. break
  12. success_flag = True
  13. while success_flag:
  14. if _isnotsuite(test):
  15. self._tearDownPreviousClass(test, result)
  16. self._handleModuleFixture(test, result)
  17. self._handleClassSetUp(test, result)
  18. result._previousTestClass = test.__class__
  19. if (getattr(test.__class__, ‘_classSetupFailed‘, False) or
  20. getattr(result, ‘_moduleSetUpFailed‘, False)):
  21. if class_num > failcount:
  22. success_flag = False
  23. else:
  24. time.sleep(5)
  25. result._previousTestClass = None
  26. print ‘類%s第%s次重新初始化執行‘%(test.__class__,class_num)
  27. class_num += 1
  28. continue
  29. if not debug:
  30. test(result)
  31. else:
  32. test.debug()
  33. if result.result[-1][0]==1 or result.result[-1][0]==2:#結果為fail和err用例判斷
  34. if case_num > failcount:
  35. success_flag = False
  36. else:
  37. print ‘用例%s第%s次重新執行‘%(test,case_num)
  38. case_num += 1
  39. else:
  40. success_flag = False
  41. if topLevel:
  42. self._tearDownPreviousClass(None, result)
  43. self._handleModuleTearDown(result)
  44. result._testRunEntered = False
  45. return result



然後測試使用

alltests=suit.Suit()

alltests.addtest(WidgetTestCase("testDefaultSize"))

runner =HTMLTestRunner.HTMLTestRunner(stream=fp,verbosity=2,title=‘Android測試報告‘,description=‘用例執行情況:‘,)
runner.run(alltests)

運行完後,有失敗重運行的用例都會打印在測試報告裏,方便查閱

python+selenium+unitest用例失敗重運行