Недавно получил вопрос «как настроить TeamCity для запуска тестов, написанных на Selenium WebDriver и C#». Сначала хотел ответить человеку расписав всё в ответном сообщении, однако потом понял, что это не один десяток строк займёт. Немного подумав решил написать данную статью, так как у многих возникают такие вопросы. Настройкой TeamCity занимался год назад и с тех пор иногда меняю некоторые параметры в проекте, а целыми проектами уже не настраиваю, так как нет надобности, поэтому при написании данной статьи обновлю и свои знания.

Используемые технологии:
— тип проекта — DLL;
— тесты написаны на Selenium WebDriver + C# + NUnit;
— GIT -> Bitbucket.

При написании статьи параллельно все действия буду производить на виртуальной машине (скрины ведь нужно откуда-то брать). Тестовый проект для подключения к TeamCity возьмём отсюда (в конце той статьи есть ссылка на скачивание).

У нас должно быть следующее:
— GIT, в котором находится наш тестовый проект;
— учётная запись в GIT для TeamCity, с помощью её TeamCity будет забирать исходники из GIT (если проект и доступ к нему открыты, то учётная запись не нужна);
— установленный TeamCity;
— на компьютере, где установлен TeamCity Agent, также должен быть установлен MSBuild 2015 (мы будем настраивать TeamCity на сборку DLL в Visual Studio 2015);
— в TeamCity должен быть установлен пакет NuGet требуемой нам версии, которая потом будет нами указываться в настраиваемом проекте по запуску тестов:

Настроить TeamCity на запуск функциональных тестов для сайтов

Как должен быть подготовлен тестовый проект:
— в проекте все возможные пакеты должны быть подключены через NuGet, если много DLL подключено вручную, то убедитесь, что при сборке они копируются в каталог с собираемым проектом. TeamCity будет с помощью NuGet подтягивать все подключённые к проекту пакеты.

Установку TeamCity я не буду описывать, так как она элементарная: скачать, запустить, установить. У меня TeamCity установлен на Windows (поклонники Linux, устанавливайте на Linux). Приступим к настройке.

Входим в TeamCity. Создаём новый проект:

Настроить TeamCity на запуск функциональных тестов для сайтов

Тип проекта «Manually». Задаём «Name» (имя проекта) и «Project ID» (уникальный идентификатор), описание заполняете на своё усмотрение и нажимаем кнопку «Create»:

Настроить TeamCity на запуск функциональных тестов для сайтов

Далее создаём конфигурацию «Build Configurations»:

Настроить TeamCity на запуск функциональных тестов для сайтов
Настроить TeamCity на запуск функциональных тестов для сайтов

Нажимаем на кнопку «Create».

Далее сразу переходим к созданию VCS roots, который будет основан на GIT. В VCS roots указываем откуда TeamCity будет скачивать исходный код тестов:

Настроить TeamCity на запуск функциональных тестов для сайтов

«Fetch URL» берётся нами в GIT требуемого нами проекта:

Настроить TeamCity на запуск функциональных тестов для сайтов

Не указывайте «Fetch URL» у себя тот что на картинке, так как он будет недоступен вам. Ещё нам важно указать с какой ветки TeamCity будет брать код (по умолчанию «master»), а также учётные данные к GIT:

Настроить TeamCity на запуск функциональных тестов для сайтов

Остальное оставляем по умолчанию или настраиваем под себя, если знаете, что делаете.

Перед тем как нажать «Create» проверьте, что TeamCity может подключиться к GIT, для этого нажмите на кнопку «Test conntection».

Следующим шагом будет добавление «Build steps»:
1. Получение с помощью NuGet пакетов, подключённых к проекту.
2. Сборка DLL перед запуском тестов.
3. Запуск тестов с помощью NUnit.

Настроить TeamCity на запуск функциональных тестов для сайтов

Build steps 1

Добавляем шаг (кнопка «Add build Step»). И прописываем как указано на картинке:

Настроить TeamCity на запуск функциональных тестов для сайтов

Остальное оставляем по умолчанию и нажимаем кнопку «Save».

Build steps 2

Добавляем очередной шаг (см. картинку):

Настроить TeamCity на запуск функциональных тестов для сайтов

Остальное оставляем по умолчанию и нажимаем кнопку «Save».

Build steps 3

Добавляем последний шаг (см. картинки):

Настроить TeamCity на запуск функциональных тестов для сайтов
Настроить TeamCity на запуск функциональных тестов для сайтов

Остальное оставляем по умолчанию и нажимаем кнопку «Save».

Последний шаг требует подробного пояснения в некоторых местах.

«Path to NUnit console tool» указывается путь к «nunit3-console.exe», который и будет запускать тесты из DLL. Мы указали следующее:

%teamcity.build.checkoutDir%\packages\NUnit.ConsoleRunner.3.7.0\tools\nunit3-console.exe

%teamcity.build.checkoutDir% — рабочий каталог TeamCity агента. У меня он имеет путь:

c:\TeamCity\buildAgent\work\646371f74808e053

«646371f74808e053» — автоматически формируется такое наименование (у вас будет другое). У вас при первом запуске тестов может появляться ошибка, в которой будет говориться, что не найден «nunit3-console.exe» по определённому пути:

Настроить TeamCity на запуск функциональных тестов для сайтов

Тогда вам надо будет вычислить рабочий каталог и сверить с тем что указан в ошибке и, при необходимости, поправить путь в третьем Build steps.

«Run tests from» — из какого файла запускать тесты. Здесь мы указали путь к нашей DLL, которая будет собирается на втором шаге:

%teamcity.build.checkoutDir%\AutoTest\bin\Release\AutoTest.dll

Как и в случае с путями к «nunit3-console.exe» у вас может возникать при первых запусках ошибка следующего вида:

Настроить TeamCity на запуск функциональных тестов для сайтов

Это значит вы неправильно указали путь к DLL. Вычислите полный путь до DLL в рабочем каталоге и поправьте при необходимости в третьем Build steps.

«Additional command line parameters» — тут указываются параметры, с которыми должны запускаться тесты. Я указал «—result=TestResult.xml» — это означает, что «nunit3-console.exe» должен писать отчёт о результатах в файл «TestResult.xml». Отчёт не удобен для чтения, но хоть что-то. Можете формировать отчёт сами прочитав статью Как генерировать собственный отчёт в тестах NUnit.

«Include categories» — тесты какой категории запускать. Если не указать, то будут запущены все тесты. Если указать категорию тестов, то будут запущены тесты только определённой категории:

Настроить TeamCity на запуск функциональных тестов для сайтов

Проверка агента

Также нам необходимо проверить, чтобы TeamCity агент, который будет запускать тесты был доступен для нашего проекта:

Настроить TeamCity на запуск функциональных тестов для сайтов

Если он недоступен, то это означает, что характеристики компьютера, где установлен агент, не соответствуют проекту. Пример: на компьютере с агентом установлен MSBuild 2013, а в проекте мы укажем, что он собираться должен с помощью Visual Studio 2015. В этом случае агент не будет нам доступен, и мы не сможем запускать тесты. Возможны и другие причины недоступности.

Если перейти в свойства агента, то там можно указывать какие проекты на нём запускать и т.д.

Запуск тестов

После того как всё настроили можно запускать тесты перейдя на главную страницу:

Настроить TeamCity на запуск функциональных тестов для сайтов

Если хотите запускать тесты по расписанию, при появлении нового кода тестов и т.д., то это настраивается в настройках проекта в триггерах:

Настроить TeamCity на запуск функциональных тестов для сайтов