среда, 6 ноября 2013 г.

Robot Framework: перезапуск "упавших" тестов

В автоматизированном тестировании есть хорошая практика делать независимые друг от друга автоматизированные тесты.  
Это означает, в частности, то, что вы можете запускать любой автоматический тест отдельно от остальных и он должен работать корректно: сообщать об ошибках, если они есть и сообщать что "все хорошо" если так и есть ) 
Вторая хорошая практика - это делать стабильные автоматизированные тесты, перезапуск которых для той же версии продукта в том же окружении должен заканчиваться с одинаковым результатом.
Этого добиться всегда сложно и иногда проще просто запускать автоматизированные тесты несколько раз для того чтобы убрать "ложно отрицательные" результаты из отчётов.
Robot Framework имеет на этот случай специальный ключ --runfailed, указав который можно запустить только "упавшие" тесты ещё раз и получить для этих тестов новый отчёт:

# запускаем тесты первый раз:
pybot -outputdir dir1 tests.txt 
# ... чистим окружение ...  
# запускаем "упавшие" тесты повторно:
 pybot --outputdir dir2 --runfailed dir1/output.xml tests.txt || true
 
После этого мы получим две папки с результатами, которые можно объединить с помощью rebot: 

python -m robot.rebot -d . -o output.xml */*.xml 
 
При этом мы получаем отчёт, в котором видно все тесты, в том числе завершённые с ошибкой, а так же результаты их повторного запуска.
Такой "отчёт" понятен только для оценки "нестабильности" автоматизированных тестов. По нему сложно судить об ошибках в тестах или в тестируемом функционале.
Для того чтобы сформировать более понятный отчет необходимо определить стратегию принятия решения о том, какой тест считается "пройденным".
Если "успешно пройденным" тестом считается только пройденный с первого раза, то запускать тесты второй раз для того же окружения уже не имеет смысла.
Если же "успешно прошедшим" тестом считать тот, который хотя бы раз завершился успешно, то необходимо не просто объединять отчёты, оставив информацию о неудачных результатах тестов, а заменить неудачные результаты результатами повторного выполнения этих же тестов.
Для этого мы написали простой скрипт, который может быть применён для "объединения" XML отчётов Robot Framework:

python merge_robot_results.py dir1/output.xml dir2/output.xml

После применения этого скрипта будет создан файл result.xml, который можно передать rebot для создания итогового отчёта:

python -m robot.rebot -d . -o output.xml result.xml

Возможность редактирования XML файлов с результатами тестов открывает большие возможности для создания хороших отчётов о тестировании, можно, например,
- Автоматически находить тесты, которые завершились с ошибками из за уже обнаруженных и описанных ранее багов (делать это не просто с помощью тегов, вручную, а автоматически, скриптами) и оставлять комментарии к таким тестам.
- Разбирать результаты автоматических тестов и проставлять их в тест-менеджмент системе (если не используется TestLink, для которого есть специальный Jenkins плагин)
- Анализировать статистику за любой период, генерировать различные расширенные варианты отчётов.