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:
Install CasperJS
Зарезервировать случайный TCP порт
Запустите Tomcat на этом TCP-порту (со встроенным WAR-файлом)
Запустите тесты CasperJS и направьте их на работающий Tomcat.
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