CasperJS Tests in Maven Build

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Я являюсь большим поклонником автоматизированного тестирования в общем и интеграционного тестирования в частности. Я крепко верю, что затраты на написание тестов - это прямые инвестиции в качество и стабильность продукта, находящегося в разработке.

CasperJS - это тестовый фреймворк на основе PhantomJS, который является браузером без графического интерфейса. Используя CasperJS, мы можем убедиться, что наше приложение правильно реагирует на запросы, отправляемые обычным веб-браузером.

Это пример теста CasperJS, который выполняет HTTP-запрос на домашнюю страницу работающего WAR-приложения и проверяет, что ответ имеет HTTP-статусный код 200.

Я храню этот тест в файле src/test/casperjs/home-page.js. Давайте посмотрим, как CasperJS может быть автоматически запущен при каждой сборке Maven.

Вот сценарий тестирования, реализованный с помощью комбинации плагинов Maven:

  1. Install CasperJS

  2. Зарезервировать случайный TCP порт

  3. Запустите Tomcat на этом TCP-порту (со встроенным WAR-файлом)

  4. Запустите тесты CasperJS и направьте их на работающий Tomcat.

  5. Shutdown Tomcat

Я использую комбинацию плагинов. Давайте пройдем по шагам по очереди.

Кстати, в приведенных ниже примерах я не показываю версии плагинов, в первую очередь потому, что большинство из них находятся в активной разработке. Проверьте их версии на Maven Central (да, все они доступны там).

Прежде всего, нам нужно скачать исполняемый файл PhantomJS. Это бинарный файл, зависящий от платформы. Благодаря Кайлу Либеру у нас есть готовый к использованию плагин Maven: phantomjs-maven-plugin, который самостоятельно определяет текущую платформу и автоматически загружает соответствующий бинарный файл, помещая его в каталог target.

Точное название загруженного бинарного файла хранится в свойстве Maven ${phantomjs.binary}.

К сожалению, для установки CasperJS не существует аналогичного плагина (по крайней мере, я не нашел ни одного до сих пор). Поэтому я использую обычный git (вы должны его установить на вашей сборочной машине).

3. Reserve TCP Port

Мне нужно получить случайный TCP-порт, на котором будет запущен Tomcat. Порт должен быть доступен на машине сборки. Я хочу иметь возможность запускать несколько сборок Maven параллельно, поэтому получаю случайный порт при каждой сборке.

В других примерах вы можете видеть, как люди используют фиксированные номера портов, например, 5555 или что-то подобное. Это очень плохая практика. Всегда резервируйте новый случайный порт, когда вам это нужно.

Плагин резервирует порт и устанавливает его значение в свойство Maven ${tomcat.port}.

Теперь пришло время запустить Tomcat с вложенным WAR-пакетом. Я использую tomcat7-maven-plugin, который запускает настоящий сервер Tomcat7 и настраивает его на обслуживание на ранее зарезервированном порту.

Из-за опции fork, установленной в значение true, Tomcat7 продолжает работать после завершения выполнения плагина. Именно это мне и нужно.

Теперь пришло время запустить CasperJS. Несмотря на то, что для этого существуют некоторые плагины, я использую обычный exec-maven-plugin, в основном потому, что он более настраиваемый.

Переменная среды PHANTOMJS_EXECUTABLE - это не задокументированная функция, благодаря которой весь этот сценарий становится возможным. Она настраивает расположение исполняемого файла PhantomJS, который был скачан несколько шагов назад.

На последнем шаге я выключил сервер Tomcat.

Real Example

Если вы хотите увидеть, как все это работает на деле, взгляните на stateful.co. Это веб-приложение на Java, размещенное на CloudBees. Его исходный код открыт и доступен в GitHub.

Его файл pom.xml содержит точно те же конфигурации, объединенные вместе.

Если у вас есть вопросы, пожалуйста, не стесняйтесь задавать их ниже.

PS. Также, проверьте это: PhantomJS как HTML-валидатор.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-16 at 15:40

sixnines availability badge   GitHub stars