2014-09-27 3 views
2

У меня есть тестовый набор, который разрушенное HTMLRunner:Как запустить тест снова, если он терпит неудачу с UnitTest

if __name__ == '__main__': 
    suite = unittest.TestSuite() 
    suite.addTest(unittest.makeSuite(MyForms)) 
    dateTimeStamp = time.strftime('%Y%m%d_%H_%M_%S') 
    buf = file("../TestReport" + "_" + dateTimeStamp + ".html", 'wb') 
    runner = HTMLTestRunner.HTMLTestRunner(
     stream = buf, 
     title = 'PDFFiller tests', # Title of report 
     description = 'Test results' # Description of report 
     ) 
    runner.run(suite) 

Как я могу обновить свой код, чтобы запустить тест снова, если это не удается?

Примечание: Я слышал, что неправильно выполнять тест дважды, но мне нужно его повторно запустить.

+0

Почему бы вам не исправить тест вместо этого? – Veedrac

+0

Я не могу понять причину, по которой это иногда терпело неудачу, а иногда и нет. И это всегда разные тесты. – Michael

+3

@ Майкл: вам все равно придется это понимать, поскольку это может указывать на кратковременную ошибку в вашем коде. Игнорирование unittests, которое иногда терпит неудачу, не является хорошей стратегией. –

ответ

0

Вы всегда можете попробовать сохранить тест как функцию и запустить его в цикле с помощью try/except. Функция try/except позволит вам продолжить работу после сбоя. Цикл позволит вам контролировать, сколько раз вы запускаете тест.

def test(variables go here): 
    if __name__ == '__main__': 
     suite = unittest.TestSuite() 
     suite.addTest(unittest.makeSuite(MyForms)) 
     dateTimeStamp = time.strftime('%Y%m%d_%H_%M_%S') 
     buf = file("../TestReport" + "_" + dateTimeStamp + ".html", 'wb') 
     runner = HTMLTestRunner.HTMLTestRunner(
      stream = buf, 
      title = 'PDFFiller tests', # Title of report 
      description = 'Test results' # Description of report 
      ) 
     runner.run(suite) 

VariableMarkerOfTestStatus = 0 #This variable is just a way of telling if the test failed or not 
#tempCounter = 0 #UNCOMMENT IF YOU WANT TO LIMIT THE NUMBER OF TIMES THIS RUNS 

while VariableMarkerOfTestStatus < 1: #This will loop until it passes. 
    try: test(variables go here) 
    except: VariableMarkerOfTestStatus -=1 

    #UNCOMMENT IF YOU WANT TO LIMIT THE NUMBER OF TIMES THIS RUNS 
    #if VariableMarkerOfTestStatus < 0: 
    # tempCounter+=1 
    # if tempCounter > 2: # 2 represents the number of times the test is allowed to fail 
    #  test(variables go here) # If it has failed twice, run it once more so that the error displays 
    # 

    VariableMarkerOfTestStatus+=1 
Смежные вопросы