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


經過多次研讀和調試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.   
  9.         for test in self:  
  10.             case_num = 1  
  11.             if result.shouldStop:  
  12.                 break  
  13.               
  14.             success_flag = True  
  15.             while success_flag:    
  16.                 if _isnotsuite(test):  
  17.                     self._tearDownPreviousClass(test, result)  
  18.                     self._handleModuleFixture(test, result)  
  19.                     self._handleClassSetUp(test, result)  
  20.                     result._previousTestClass = test.__class__  
  21.                     if (getattr(test.__class__, '_classSetupFailed', False) or  
  22.                         getattr(result, '_moduleSetUpFailed', False)):  
  23.                         if class_num > failcount:  
  24.                             success_flag = False  
  25.                         else:  
  26.                             time.sleep(5)  
  27.                             result._previousTestClass = None  
  28.                             print '類%s第%s次重新初始化執行'%(test.__class__,class_num)  
  29.                             class_num += 1  
  30.                         continue  
  31.   
  32.                 if not debug:  
  33.                     test(result)  
  34.                 else:  
  35.                     test.debug()  
  36.                   
  37.                 if result.result[-1][0]==or result.result[-1][0]==2:#結果為fail和err用例判斷  
  38.                     if case_num > failcount:  
  39.                         success_flag = False  
  40.                     else:    
  41.                         print '用例%s第%s次重新執行'%(test,case_num)  
  42.                         case_num += 1  
  43.                 else:  
  44.                     success_flag = False  
  45.                       
  46.         if topLevel:  
  47.             self._tearDownPreviousClass(None, result)  
  48.             self._handleModuleTearDown(result)  
  49.             result._testRunEntered = False  
  50.         return result  



然后測試使用

alltests=suit.Suit()

alltests.addtest(WidgetTestCase("testDefaultSize"))

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM