пятница, 18 апреля 2014 г.

Использование TeamCity в качестве системы управления запуском функциональных авто-тестов

TeamCity – это система управления распределенными процессами сборки кода и система непрерывной интеграции процессов разработки. Однако, кроме всего прочего, её можно использовать как полноценную систему для управления, запуска и анализа функциональных автотестов. TeamCity для превращения любого вашего скрипта, написанного на любом языке, в результаты теста – не требует никакого изменения логики вашей системы для функционального автотестирования.

Если вкратце, то всё, что для этого надо – это в уже имеющийся код тестов добавить пару строчек вывода в консоль нескольких специальных тегов.


Пусть, например, у вас уже имеется набор скриптов для системы функционального автотестирования. Вы добавили для их запуска новый Build Configuration в TeamCity. Как это сделать, можно прочитать в подробной инструкции. Но если вы теперь запустите ваш скрипт через TeamCity Projects Manager, то будет считаться, что вы просто сделали новый build-run, некоторую автоматизацию чего-либо. Чтобы сообщить TeamCity, что результаты запускаемого скрипта были результатами test-run, нужно добавить в логи тестов, которые наверняка у вас имеются, несколько тегов-модификаторов.

Подробная информация по всем тегам-модификаторам, которые нужно добавлять к консольному выводу вместе с логами самих тестов, есть в вики JetBrain.

Минимально необходимо выводить в консоль с логами теста следующие теги-модификаторы:

##teamcity[testSuiteStarted name='неизменное_имя_сьюита'] – вывести эту строку в начале запуска тест-сьюита.

##teamcity[testStarted name='неизменяющееся_название_теста_или_шага'] – вывести эту строку перед началом каждого тест-кейса или шага.

Для указания TeamCity случаев фейлов теста или шага, например, через ассерты, нужно добавить к логам вот этот модификатор:
##teamcity[testFailed name='неизменяющееся_название_теста_или_шага' message='failure message' details='message and stack trace']
message и details – необязательные атрибуты.
Если тега-модификатора для фейла теста не будет в логах, то TeamCity будет считать что тест успешно прошел.

##teamcity[testFinished name='неизменяющееся_название_теста_или_шага'] – вывести эту строку в конце каждого тест-кейса или шага.

##teamcity[testSuiteFinished name='неизменное_имя_сьюита'] – вывести эту строку в конце запуска тест-сьюита.

После того, как TeamCity встретит эти строки в консоли, он будет считать запущенные скрипты тест-ранами и соответствующим образом их хранить и обрабатывать. Также будет модифицирован внешний вид логов для test-run-ов. Будет отображаться разбивка тестов по сьюитам, вестись статистика по ним и по каждому тесту, вся информация о скрипте будет считаться информацией по тест-рану. Соответствующим образом изменится и внешний вид лога для test-run-а, например:


Для сьюитов допускается иерархическая вложенность. Например, можно сделать несколько вложенных тест-сьюитов:

##teamcity[testSuiteStarted name='suite_1']

        ##teamcity[testSuiteStarted name='suite_1_1']
        ... Здесь идут тесты сьюита suite_1_1
        ##teamcity[testSuiteFinished name='suite_1_1']

        ##teamcity[testSuiteStarted name='suite_1_2']
        ... Здесь идут тесты сьюита suite_1_2
        ##teamcity[testSuiteFinished name='suite_1_2']

##teamcity[testSuiteFinished name='suite_1']

Имеется множество других тегов-модификаторов, например, для игнорирования результатов теста, вывода дополнительной информации в тесты, добавления отладочной информации и многого другого (смотрите инструкцию в вики JetBrain).

Таким образом, для переводов тест-ранов в TeamCity не требуется никакой переделки логики и архитектуры уже разработанных систем функционального тестирования. Все что вам требуется, это добавить теги-модификаторы, а TeamCity сам возьмет на себя всю дальнейшую обработку информации в консоли test-run-ов и, например, предоставит вот такой результат для анализа:


Информация по функциональным test-run-ам всегда будет доступна в TeamCity в Build Results для всех запущенных скриптов. Там появится дополнительная вкладка Tests, так как эта сборка теперь будет считаться TeamCity как test-run. Подробнее об анализе результатов тестовых сборок можно прочитать в вики JetBrain.