FitNesse + TeamCity — добавь проекту тонуса

в 12:29, , рубрики: teamcity, тестирование, метки: ,

Доброго времени суток, любители зажать конструируемую систему в рамки разнообразных тестов! Многие из вас пользуются средствами для создания системных тестов. Кто-то даже использует FitNesse, о котором на Хабре немного рассказывали. Поэтому не буду повторяться и писать про то, что такое FitNesse и с чем его едят. Лучше расскажу про то, как заставить проект «заниматься фитнесом» в процессе сборки, которая протекает при помощи TeamCity.
Интересненько? Тогда добро пожаловать под кат.

Итак, дано:

  1. Проект, написанный на PHP и которому нужен внешний каркас из тестов. Разработчик хочет быть уверен, что после внесения изменений конечный пользователь будет видеть ровно то, что видел раньше плюс новую фишечку. А не новую фишечку и резко окосевший UI соседнего модуля управления отчетами.
  2. Системные тесты для контроля UI через Selenium Webdriver, написанные на базе PHPUnit. Обладают 2мя недостатками, а именно:
    • Тестировщик должен знать PHP, PHPUnit, API Webdriver'а. И при этом писать чистый код, который сможет прочитать не только он.
      FitNesse + TeamCity — добавь проекту тонуса
      Давайте облегчим ему жизнь уже :)
    • Поэтому существующие тесты написаны так, что поддерживать их — дело темное и неблагодарное. Еще темнее и неблагодарнее ситуация, когда программистам не удается с ходу понять, а почему же, собственно, слетел тест. И приходится тратить время…

  3. Автоматическая сборка проекта и прогонка всех тестов при помощи TeamCity
  4. Некоторое количество UI тестов, управляемых FitNesse. Более читаемые, чем написанные на PHP, и каждый желающий может открыть нашу FitNesse-wiki и запустить любой тест. И даже менеджерам понятно, что же там происходит на экране :). Однако, при сборке проекта эти тесты автоматически не запускаются.

Решение.

Решать будем последний пунктик путем скрещивания TeamCity Buildrunner и FitNesse. Делать это можно по-разному: можно самостоятельно настраивать связку FitNesse runner + TeamCity, а можно пойти простым путём и воспользоваться специально обученным плагином. Из коробки плагин умеет запускать FitNesse по указанному в настройках пути, прогонять тесты и выдавать краткую статистику. В общем, чудо, но расстраивает следующим:

  • Возникли проблемы при запуске на BuildAgent'е, который крутится под Linux
  • FitNesse запускается каждый раз при запуске сборки. И вырубается по ее завершении. А хочется иногда перейти на страничку конкретного теста и посмотреть ему в глаза :)

Поэтому наша команда решила взять плагинчик, допилить его под наши фантастические требования и поделиться с сообществом. Перепиленный плагин доступен на GitHub.
Кратенько опишу процесс установки и настройки. В целом он похож на тот, что описан в README оригинального плагина, однако теперь FitNesse должен быть кем-нибудь запущен на BuilAgent'е заранее. И т.к. он там будеть шуршать постоянно, можно в любой момент времени зайти и запустить любой понравившийся тест руками.

  • При помощи ant собираем проект в архив Fitnesse.zip, предназначенный для скармливания TeamCity-серверу.
  • Подсовываем TeamCity серверу наш архив в папку plugins. И перезагружаем сервер.
  • Теперь TeamCity должен обновить своих BuildAgent'ов новым плагином. Если что-то на агентах пошло не так — перезагрузите их.
  • На TeamCity сервере появился новый runner — Fitnesse runner. Теперь можно добавить еще один шаг сборки. Конфигурируется он просто, в 2 параметра:
    FitNesse host — собственно, адрес, по которому можно открыть нашу FitNesse wiki.
    Test names — перечисление тестов, которые необходимо прогнать. Имена тестов пишутся в строчку, разделитель — точка с запятой.
  • На BuildAgent'e запускаем FitNesse и настраиваем его так, чтобы он подхватывал тесты, которые соберет BuilAgent. В нашем случае это решилось заданием переменной $FITNESSE_ROOTPATH при запуске через параметр -d:
    java -jar fitnesse-standalone.jar -p 8080 -d ~/BuildAgent/work/branch/test/src/Fitnesse
    

    А т.к. при сборке BuildAgent обновляет папку branch/test/src/Fitnesse, то у FitNesse всегда в наличии будут тесты собираемой ветки.

  • Все, можно запускать сборку.

Ответ.

Примерно такие картиночки сможем наблюдать на выходе. Это увидим в результатах тестирования:
FitNesse + TeamCity — добавь проекту тонуса

А это в buil log'ах:
FitNesse + TeamCity — добавь проекту тонуса
Для полного счастья осталось заставить ссылки работать «как ссылки», в чем может помочь вот эта статья. Но это уже обсуждение другого плана.

Какой профит от FitNesse?

Во-первых, один раз разработав и задокументировав API, который доступен из FitNesse, тестировщика больше не придется просить писать PHP-код. У него появляется единственный инструмент — Wiki-разметка, которой он пишет сценарии тестов и заодно документацию. Если понадобится новая API-ручка, то ее напишет не тестировщик, а команда разработчиков. Которым за код, собственно, деньги платят :).
Во-вторых, вести документацию по системе можно прямо на страничке с тестами. Новым сотрудникам будет полезно поковыряться с такой базой знаний. Да и сам стиль написания FitNesse тестов гораздо более удобен для восприятия человеком, знакомым с английским языком. При желании можно даже менеджерам показывать — пускай видят, что «User Vasya logs in with password vasyapassword and receives alert with message „PANIC!!“ », и это реально работает :).

К сообществу.

Просьба не судить плагин чересчур строго — он еще «молодой и неопытный» :) Если кого-то заинтересовало, то не стесняйтесь его допиливать/довешивать так, как душе угодно. И пускай всем будет польза.

Автор: elgris

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js