Запуск WebDriver C# тестов на TeamCity c MbUnit

Здравствуйте

Есть проект на C# UI WebDriver тестов. Запускаем тесты на Gallio Icarus Test Runner, соответственно тестовый фреймворк MbUnit.

Разработчики подняли TeamCity для юнит-тестов. Соответственно, было бы здорово настроить там же и запуск UI тестов.

Пожалуйста, может кто делал, кто может поделиться линками/туториалами/мануалами по настройке связки TeamCity + MbUnit + Selenium WebDriver.

Очень хочеться сохранить MbUnit, где то читал, что можно в TeamCity подтягивать отчет MbUnit о проходжении тестов (нам он очень нравиться), но как сделать - внятной информации не нашел.

А позвоните в поддержку - вам ответят или посоветуют. На прошлой работе народ юзал тимсити для небольших проектов, где хватает бесплатной версии. Так не все были англоязычными, таковые радовались, когда им отвечали по-русски (к примеру, один бывший наш сотрудник как раз перебрался туда - это даже была такая шутка: разберись с тимсити, позвони Мише в джетбрейнс :))

Недавно настраивала в точности всё то же, что вы описали.
Могу помочь, если еще актуально.

Да, пожалуйста, еще актуально.

не получилось к сожалению запустить у себя на ноуте тимсити,–поэтому, вы уж извините, буду писать, опираясь на свои записи и память…

  1. создаем в тимсити новый проект (Administration → Projects → Create project): даем ему имя, сохраняем. переходим на следующий шаг
  2. create build configuration
  3. create and attach VCS root: выбрать свою систему контроля версий из выпадающего списка. В моем случае это был Git.

Заполняем:

  1. VCS root name как считаем нужным (git_root например)
  1. Fetch URL (репозиторий, откуда будет браться код тестов). У меня это к
    примеру был: git@git.assembla.com:work.git
  1. Clone repository to: имя папки в тимсити, куда склонируется код из репозитория
  1. Authentication method: тут понятно–ваш способ аутентификации в системе контроля версий. У меня это было по private key. Для этого еще указала Private key path: C:\Users%user%.ssh\id_rsa (это будет путь к приватному сгенерированному ssh-ключу git-а, чтобы возможно было расшифровать данные, приходящие из репозитория). И еще сюда указывается ваш пароль (если есть) для ключа в поле passphrase.

4.Add build step.

  1. Выбираем Runner type: MSBuild. Это кем будет билдиться проект, чтобы получить наш скомпиллированный dll-файл.
  1. Build file path: относительный путь к солюшену. У меня это к примеру было: auto-tests/MyProj/MyProj.sln
  1. MSBuild version. Тут вроде всё ясно. Я например выбирала Microsoft .NET framework 4.0.
  1. Run platform. В моем случае было x64.

5.Add build step.

  1. Выбираем Runner type: Command line.
  1. Working dir: относительный путь к скопмилированному проекту. У меня это было: auto-tests/MyProj/bin/Debug
  1. Custom script: команда, которую мы писали бы в консоли, если бы хотели запустить тесты из консоли. Если не ошибаюсь, у галлио тест-раннером является Gallio.Echo.exe. Поэтому пишем: %path_to_Gallio%/Gallio.Echo.exe MyProj.dll
1 лайк

Как настроить запуск тестов по расписанию: где-то в администрировании тимсити поищите пункт Build triggers -> Add new trigger. Вам нужен Schedule trigger. Дальше уже с легкостью настраиваете частоту запуска тестов и время запуска.

1 лайк

Иногда нужно знать, куда в тимсити копируются проекты из репозитория: C:\TeamCity\buildAgent\work…
Мне это понадобилось узнать, чтобы понять, получается ли у тимсити стянуть код из репо.
Ну и иногда возникала необходимость почистить эту папку (простите, уже не помню, какая проблема у меня возникала, что я таким образом ее решала).

1 лайк

Чтобы настроить рассылку на мыло о результатах выполнения тестов: смотрите в шапке выпадающий список рядом с именем юзера -> My Settings & Tools -> Email notifier -> Edit -> Add new rule. И тут выбираем проект и случаи, в которых присылать письмо.

1 лайк

А, предварительно нужно настроить Email Notifier.

Вобще вам понадобятся настройки вашей почты (SMTP host, port etc.).

Как это сделать: в шапке интерфейса тимсити Administration → Server Administration → Email Notifier.
И дальше описываете… Как было у меня:

SMTP host: mail.mysite.com

SMTP port: 26

Send email from: autotest@mysite.com

SMTP login: autotest@mysite.com

SMTP password: *********

Secure connection: none

1 лайк

Вот. Надеюсь, я смогла ответить на ваш вопрос.
Если нет–пишите уточняющие вопросы:)

Спасибо за столь развернутый ответ!
Есть вопросы.

Для начала опишу что сделано:

Есть комп_1 (Windows 7 x64), на котором установлен TeamCity сервер.

На комп_2 устанавливаем: Gallio, .Net Framework 4.0, TeamCity агент.

В TeamCity создан проект с запуском на агенте комп_2, Build Configuration c двумя Build Steps - первый билдит, второй запускает.

Первый шаг проходит, со вторым проблемы.
Раньше тесты запускал Windows Task Scheduler с батника, в котором прописано следующее:

"c:\Program Files\Gallio\bin\Gallio.Echo.exe" D:\Projects\Auto\trunk\DNet.AT\bin\Debug\DNet.AT.dll /f:"Type:DailyReport and Member:AlertsDailyCount" /rd:"D:\Projects\Auto\trunk\DNet.AT\bin\Debug\Reports" /rnf:"Daily Report for {0} at {1}" /rt:"html" /sr

если скопировать это в Custom script поле второго степа, то билд падает вот так:

Exit code 10    
Build errors
    [19:03:29]  Step 2/2: second_step (Command Line)
    [19:03:30]  [Step 2/2] Step second_step (Command Line) failed

Не знаю пока в чем проблема моего скрипта, попытался запустить блокнот:

"C:\Windows\notepad.exe"

В итоге второй степ у меня крутился 5 минут, пока я его не остановил.

Посему возникли вопросы:

  1. а как вообще сервис (а агент запускаєтся как сервис) может работать с GUI приложением в Windows, это возможно? Если да, то что с блокнотом не так?

  2. второе:

Тесты делают скриншоты так:

 TestLog.EmbedImage( "title" , Capture.Screenshot() );

и вот так:

Capture.AutoEmbedScreenshot( TriggerEvent.TestFailedOrInconclusive , "Last screen" , new CaptureParameters() { Zoom = 0.4 } );

но если в момент снятия скрина комп будет залочен, Gallio не прикрепит скрин в отчет (или ошибка, или белое окно). Пришлось не лочить при запуске тестов. (Почему не использовать инструмент вебдрайвера для скринов? Потому что у нас на страницах плагины Flash и PDF, их драйвер не видит внутри)

Вопрос, собственно, как с этим справится агент TeamCity?

Похоже, не ответил именно Вам, см. выше.

У меня было что-то похожее когда я переходил с “запуска из батника” на запуск через TeamCity. Дело в сессии юзера, от лица которого выполняются команды. Когда запускаем через Task Scheduler, то это обычная сессия юзера (просто юзер на машине или сеанс удалённого соединения). А когда программа (тесты) запускается из TeamCity, то она работает в сессии “services”, от имени того же юзера.
Есть стандартная программа qwinsta.exe, она показвает какие юзеры работают на данном компьютере и какие у них сессии. Сессии, насколько я помню, могут быть console, RDP и services. Console - это когда юзер просто зашёл на комп, RDP - если зашёл по удалёнке, services - это если что-то запущено от имени юзера, но одиним из сервисов виндовс. И прикол в том, что приложения в “services” сессии не имеют права просто так работать с экраном (фишка виндовс, секьюрность, все дела - можете поискать соотв. статьи)

Мы у себя это обходили так: TeamCity запускает вспомогательную программу “А”, а Task Scheduler с какой-то периодичностью постоянно вызывает вспомогательную программу “Б”. Когда в TeamCity срабатывает событие запуска, то запускается “А”. Эта “А” ждёт пока в очередной раз запустится “Б”, и даёт ей команду запускать тесты. И тогда тесты запускаются из-под вспомогательной программы “Б”, которая работает в console или RDP сессии, и проблем с экраном не возникает. Грубо, некрасиво, но работает. Вы при желании можете облагородить такой вариант, сделать не периодический запуск “Б”, а чтобы она постоянно работала и слушала нет ли команд от “А”.

(Кстати, если кто-нибудь знает вариант получше чем жонглирование с “А” и “Б”, то я бы послушал)

Собственно, проблема с сервисом и Windows решилась так:

  • buildAgent нужно запускать с консоли, открытой от имени текущего юзера;
  • команда …\TeamCity\buildAgent\bin\agent.bat start;

В таком случае агент имеет доступ к UI, запускается браузер и тесты успешно делают свое дело.
Помогла тема на форуме JetBrains.

1 лайк

Но хочется все-таки видеть Gallio отчет в TeamCity, а не скудные " 10 tests passed"…

И Gallio report прикручен.

В общем, как получилось:

Первый билд степ тянет код и компилирует его;
Второй билд степ запускает скрипт:

"c:\Program Files\Gallio\bin\Gallio.Echo.exe" %system.teamcity.build.workingDir%\XPi.DNet.AT\bin\Debug\XPi.DNet.AT.dll /f:"Type:DailyReport and Member:AlertsDailyCount" /rd:"%system.teamcity.build.workingDir%\XPi.DNet.AT\bin\Debug\Reports" /rnf:"Daily Report" /rt:"html" /sr

Кто здесь кто:

"c:\Program Files\Gallio\bin\Gallio.Echo.exe" - путь к Gallio.Echo.exe на машине билд агента;

`%system.teamcity.build.workingDir%\XPi.DNet.AT\bin\Debug\XPi.DNet.AT.dll` - путь к нашей dll с тестами;

/f:"Type:DailyReport and Member:AlertsDailyCount" - ключ, какой тест-клас запускать и какой конкретно тест в нем;

/rd:"%system.teamcity.build.workingDir%\XPi.DNet.AT\bin\Debug\Reports" - куда сохранять отчет Gallio. Далее этот путь нужно добавить в артефакты билда.

/rnf:"Daily Report" - имя файла отчета. Его нужно выбрать когда будем создавать Report Tab;

/rt:"html" - тип отчета;

/sr - я хочу чтоб отчет тут же открывался и в браузере.

Как написано здесь, создадим Report Tab. Теперь на страничке проекта в TeamCity появился дополнительный таб с Gallio Runner Report.

2 лайка