Всем привет. Хотел узнать такой вопрос, у меня есть тесты которые более менее нормально ранаются, однако иногда не понятно почему падают. Какие то глюки с таймаутом. Как бы запустить упавший тест повторно?
Я юзаю HTMLTestRunner:
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)
Ну вроде как лучше, но иногда просто лаги случаются и все. С другой стороны мой wait тоже почему то не пашет. Но на это лучше наверное я создам отдельный вопрос.
do
{
boolean result = true;
try
{
<Test operations there>
}
catch (TimeoutException e)
{
result = false;
}
}
while (!(result))
Склепал на коленке, так что работоспособность без допиливания не гарантируется
А вообще, если wait не работае(ю)т - может быть, дело в jQuery / Ajax calls на странице? Если да - погуглите selenium ajax wait - быстро найдёте скрипты, которые необходимо инжектить для того, чтобы правильно определять финиш отработки ajax запросов.
100% согласен, такого рода обходы только прикрывают проблему, а не решают ее. Лучше уж постараться и выявить причину проблемы и устранить ее, нежели делать “затычки”, которые еще тоже могут боком вылезти.
У данной библиотеке нет такой возможности. Надо хакать код, что тоже не есть очень хорошо.
В общем, есть несколько способов как это можно сделать:
В режиме runtime проверять упал ли тест и проганять его
Сохранять список упавших тестов и динамически формировать с них новый тест сьют и прогонять еще раз
Вам нужно подправить метод run(self, test) и делать проверку после того, упал ли тест или нет. Если да, то перезапускать еще раз.
def run(self, test):
"Run the given test case or test suite."
result = _TestResult(self.verbosity)
test(result)
self.stopTime = datetime.datetime.now()
self.generateReport(test, result)
print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)
return result