Выполните тесты интеграции TestNG / JUnit на удаленном сервере из среды IDE - PullRequest
8 голосов
/ 09 июня 2011

Внутри моей IDE (Eclipse или NetBeans, не имеет значения) у меня есть несколько тестовых классов TestNG (но мой вопрос также касается удаленных тестов JUnit), которые являются интеграционными тестами. Для этих тестов необходим сервер интеграции, их нельзя запустить на локальном компьютере. Им нужна полная среда сервера интеграции - не только вещи, связанные с контейнерами JavaEE (=> нет Arquillian, ни JEEUnit).

Теперь я хочу, чтобы эти тесты можно было запускать из моей среды IDE (Eclipse) - предпочтительно с помощью плагина TestNG, - но когда я их запускаю, они должны запускаться на удаленном сервере интеграции.

Можно ли запустить интеграционные тесты на удаленном сервере из моей среды IDE? Мне нравится идея иметь какого-то агента на удаленном сервере, который ожидает тестовые запросы и выполняет их. Но, как я уже сказал, было бы неплохо, если бы он запускался из плагина TestNG.

Нужен ли какой-нибудь обходной путь, например, сценарии Ant (надеюсь, нет) или магия Maven? Каковы лучшие практики?

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

Ответы [ 4 ]

4 голосов
/ 20 июня 2011

То, как вы это сделаете, во многом зависит от того, какой сервер интеграции и IDE вы используете, и какое приложение вы используете. Я предполагаю, что вы используете Eclipse; и я предполагаю, что вы используете Jenkins , поскольку IMO будет проще всего сделать так, как вы хотите.

Большая часть этого будет работать из коробки. Однако есть кое-что, что потребует дополнительной работы.

Вы хотите сделать следующее:

  1. Создать в Дженкинсе задание, которое называется «Интегрированное тестирование» (имя не имеет значения). Сконфигурируйте его для запуска тестов, которые вы хотите запускать из вашей IDE, и чтобы удаленные машины могли запускать сборки.
  2. Сделать это задание параметризованным заданием и добавить параметр файла. Предположим, это называется «TestingProgram». Это будет программа, которую задание будет проверять.
  3. Заставьте задание Integrated Testing использовать файл TestingProgram для запуска тестов. Если вашей программе требуется более одного файла, то предположим, что это будет zip-файл, содержащий все необходимые файлы.
  4. Сконфигурируйте ваш проект Eclipse для создания тех же файлов, которые ожидают задания Integration Testing (я предполагаю, что это уже происходит, так как предполагается, что он создает какую-то бинарную версию вашей программы)

Теперь перейдем к более сложной части подключения Eclipse к Дженкинсу. К сожалению, я не думаю, что есть какие-либо ранее существующие инструменты, которые будут делать именно то, что вы хотите. Хорошей новостью является то, что это должно быть очень просто сделать с помощью специального скрипта. Все, что нужно сделать сценарию:

  1. Если в вашей программе требуется несколько файлов, а eclipse еще этого не делает, нужно будет сжать эти файлы до
  2. Потребуется взять файл и прочитать его в некоторую переменную, а затем закодировать в base64. Есть много библиотек, которые позаботятся о большей части этого для вас, например эта . Предположим, этот файл считан в переменную с именем $programFile
  3. Для этого потребуется отправить HTTP-запрос на http://<your-jenkins-server>:8080/<integrated-testing-job-name>/buildwithparameters?TestingProgram=$programFile

Подробнее о запуске удаленных сборок Jenkins с параметрами вы можете прочитать в документах jenkins .

Сценарий, выполняющий эти шаги, может быть практически любым. Учитывая, что вы хотите в конечном итоге включить его в свою IDE, кажется, что наиболее логичным выбором будет сценарий ant или плагин Eclipse. Ни то, ни другое не будет слишком сложным - сценарий ant будет выполнять эти шаги, и вы можете импортировать сценарий ant в проект Eclipse специально для тестирования - и плагин может просто добавить пункт меню, который при запуске внутри проекта будет выполнять вышеуказанные шаги для этого проекта.

ПРИМЕЧАНИЕ: На самом деле существует несколько различных способов запуска сборки с параметрами с использованием Jenkins. Например, вы можете выполнить запрос POST, использовать json для передачи параметра, как описано в документах jenkins, с которыми я связан, использовать CLI Jenkins и т. Д. Не все из них работают с параметрами файла, но вы должны использовать их все в очень похожим способом - в качестве шага в вашем пользовательском скрипте вы должны выполнить удаленную сборку на Jenkins и передать файл, с которым хотите протестировать. Например, объяснение, которое я дал, предполагает, что файл тестирования очень мал; если это не так, вы можете вместо этого сделать запрос POST. Если вы столкнетесь с проблемами при использовании одного метода, его будет довольно легко переключить на другой метод, который работает лучше.

2 голосов
/ 14 января 2013

В моем решении я пообедаю на локальном сервере JNDI и добавлю удаленный объект (объект, реализующий интерфейс Remote), затем вы сможете использовать удаленный объект для синхронизации вашей локальной IDE и удаленного сервера или другого места.

2 голосов
/ 21 июня 2011

Я сам этого не делал (мои тесты локальные), но вот некоторые вещи, которые могут работать:

  • Cargo можно использовать для запуска сервера иразвертывание в нем модулей
  • Запуск тестов можно выполнить с помощью Cactus (довольно старый) или JUnitEE.В других случаях вы реализуете тесты с помощью JUnit и запускаете их удаленно.Другой вариант - написать тесты для взаимодействия с выделенным API на вашем сервере, который запускает тесты и отправляет отчеты.
2 голосов
/ 09 июня 2011

К сожалению, у меня нет готового решения, но я думаю, что могу дать вам несколько советов, так как я провел некоторое время, думая об этом.

Я не знаю о TestNG, но у JUnit есть возможность подключить вашего собственного исполнителя. Я уверен, что TestNG имеет соответствующую функциональность. Итак, найдите его и ознакомьтесь с ним. Так как вы можете контролировать, как вызывается ваш тест, вы можете даже сделать что-то еще вместо вызова методов тестового примера. Например, вызовите некоторый удаленный API, который сделает тест для удаленного запуска.

Очевидно, что это может быть веб-служба, которая заставляет удаленного агента (по вашему предложению) запускать тестирование на удаленной машине. Это хорошо, но мне больше нравятся решения без агентов или полуагенты. Что я имею в виду? Если, например, ваша удаленная машина - Unix, вы можете выполнить SSH или Telnet соединение и запустить командную строку. В этом случае вы можете создать скрипт mvn или ant, скопировать на удаленный компьютер с помощью ssh и запустить его. Скрипт запустит ваши тесты. Так что это почти агент меньше. Вам просто требуется установка Java и поддержка SSH.

Если удаленной машиной является Windows, вы можете использовать либо Telnet, либо WMI. Итак, если безопасность не является проблемой, но вам нужна межплатформенная поддержка, используйте Telnet.

Пожалуйста, не стесняйтесь обращаться ко мне, если вам нужна дополнительная помощь по SSH / Telnet.

...