Настройка сборки Jenkins с использованием Selenium с Browserstack

Кто-нибудь из сообщества успешно создал сборку Selenium в Jenkins, используя Browserstack в качестве своего облачного провайдера, при этом требуя локального тестового соединения за брандмауэром?

Я могу точно сказать, что Saucelabs на удивление легко запускает сборки с помощью плагина Sauce Jenkins в среде непрерывного развертывания, как это делал я. Однако я не могу сказать то же самое о Browserstack. Организация, с которой я работаю, в настоящее время использует Browserstack, и, хотя их служба поддерживает автоматическое тестирование с использованием бинарного приложения, я нахожу это проблемным с Jenkins. Мне нужно быть абсолютно уверенным, что Browserstack не является жизнеспособным решением, если это так. Мне нравится Saucelabs и то, что предоставляет их организация, но если Browserstack работает, я не хочу переключаться, если мне это не нужно.

Документация Browserstack инструктирует вас запустить команду с некоторыми доступными параметрами, чтобы создать локальное соединение перед выполнением.

nohup ./[binary file] -localIdentifier [id] [auth key] localhost,3000,0 &

Я добавил приведенный выше оператор в качестве команды оболочки шага перед сборкой. Я также должен добавить «nohup», поскольку после того, как двоичный файл создает успешное соединение, сборка никогда не запускается, поскольку я не вышел, как показано в выводе ниже.

BrowserStackLocal v3.5

Теперь вы можете получить доступ к своим локальным серверам в нашем удаленном браузере.

Нажмите Ctrl-C, чтобы выйти

Обычно я могу успешно выполнить первую сборку без проблем. Последующие конфигурации сборки с использованием той же команды никогда не подключаются. Отображается указанное выше сообщение, но во время выполнения теста Browserstack сообщает, что локальное тестовое соединение не установлено. Это меня смущает.

Чтобы вы лучше понимали, что выполняется, у меня есть 15 конфигураций сборки для различных наборов проектов и комбинаций браузеров. Существуют два исполнителя Jenkins, и у меня в любой момент времени доступно более 5 виртуальных машин Browserstack. Пять сборок автоматически начнут выполнение, когда связанный код проекта будет передан на промежуточный сервер, заполнив оба исполнителя. Один из них начнется и закончится нормально. Ни один из остальных не будет, поскольку Browserstack сообщает, что локальное тестирование недоступно.

Saucelabs, очевидно, разобрались с этим с помощью своего плагина, и это здорово. Если Browserstack требует команд оболочки для создания локальных тестовых подключений, я должен делать что-то не так, не в порядке и т. Д.

Среда:

  • Java 7
  • Селен 2,45
  • JUnit 4.11
  • Maven 3.1.1
  • Очарование 1.4.10
  • Дженкинс 1.5

Может ли кто-нибудь опубликовать информацию о том, кто использует Browserstack в среде непрерывного тестирования, одновременно используя несколько параллельных тестов, и рассказать мне, как настроена каждая сборка?

Спасибо,


person Brian Smith    schedule 09.03.2015    source источник
comment
@ BrianSmith: вы используете плагин Allure в Jenkins? Как вам удалось заставить его работать так, как рекламируется? Я хотел бы знать, как вы его настроили, поскольку я потратил 2 недели, пытаясь (и безуспешно) заставить его вообще работать.   -  person Andrew Gray    schedule 29.03.2016


Ответы (5)


Недавно я изучил BrowserStack с Selenium, и BrowserStack Plugin значительно упростил эту задачу.

Возможности

  • Управляйте своими учетными данными BrowserStack глобально или для каждого задания сборки.
  • Настройте и отключите BrowserStack Local для тестирования внутренней среды, среды разработки или промежуточной среды.
  • Встраивайте отчеты BrowserStack Automate в результаты своей работы Jenkins.

Гораздо более простая интеграция.

person Paul Whelan    schedule 19.07.2016

Это Уманг, отвечающий от имени BrowserStack.

Для начала вы используете правильную команду для настройки соединения для локального тестирования. Хотя вам не нужно указывать данные «localhost, 3000,0». Мы также предлагаем вам использовать параметр «-forcelocal» при инициализации соединения. Команда должна быть следующей:

nohup ./[двоичный файл] [ключ аутентификации] -localIdentifier [id] -forcelocal &

Параметр «-forcelocal» направит весь трафик через ваш IP-адрес. Кроме того, процесс инициации соединения перед запуском тестов верен.

Однако здесь я хотел бы подтвердить «id», который вы указали при создании соединения. Как вы поделились, существует 15 конфигураций сборки, и я понимаю, что для каждой сборки указан другой идентификатор. Убедитесь, что «id», указанный при настройке соединения для локального тестирования и в тестах («browserstack.localIdentifier» = «id»), совпадает. В противном случае вы получите сообщение об ошибке «[browserstack.local] имеет значение true, но локальное тестирование через BrowserStack не подключено»

person Umang Sardesai    schedule 10.03.2015
comment
Используя ваш рекомендованный оператор, я могу успешно завершить выполнение каждой сборки вручную. Проблема возникает, когда запускаются несколько сборок и они пытаются запускать две подряд подряд. Когда это происходит, ни один из них не запускается вообще, а сообщение о том, что локальное тестирование не подключено, отображается в каждом журнале. - person Brian Smith; 11.03.2015
comment
Я думаю, что теперь я в этом разбираюсь. Я обновил этап предварительной сборки для каждой конфигурации с помощью утверждения в ответе выше, а также нескольких других, чтобы дождаться успешного соединения, прежде чем выполнение продолжится. Я обновлю этот пост, как только на этой неделе попробую еще немного. - person Brian Smith; 12.03.2015
comment
Было бы действительно полезно, если бы локальный двоичный файл регистрировался при установлении соединений. Я не мог этого видеть даже при запуске с флагом -v. (p.s. BrowserStack отличный!) - person Ralph Cowling; 08.03.2016
comment
@RalphCowling Параметр -vv должен генерировать подробные журналы. Не могли бы вы попробовать? - person Umang Sardesai; 08.03.2016

Интеграция BrowserStack с Jenkins немного сложна, но не волнуйтесь, это вполне выполнимо :-)

Клиент BrowserStackLocal должен запускаться как фоновый процесс, согласно предложению Уманга, и именно поэтому плагин SauceLabs также работает.

Проблема в том, что когда Дженкинс видит, что вы запускаете процессы демона самостоятельно, а не через плагин, он убивает их. Вот почему вам нужно убедить его в обратном.

Я описал, как это сделать, шаг за шагом в этом статья, но если вы используете плагин конвейера , вы можете использовать приведенный ниже сценарий в качестве отправной точки:

node {
    with_browser_stack 'linux-x64', {
        // Execute tests: here's where a step like
        //  sh 'mvn clean verify'
        // would go
    }
}

// ----------------------------------------------
def with_browser_stack(type, actions) {
    // Prepare the BrowserStackLocal client
    if (! fileExists("/var/tmp/BrowserStackLocal")) {
        sh "curl -sS https://www.browserstack.com/browserstack-local/BrowserStackLocal-${type}.zip > /var/tmp/BrowserStackLocal.zip"
        sh "unzip -o /var/tmp/BrowserStackLocal.zip -d /var/tmp"
        sh "chmod +x /var/tmp/BrowserStackLocal"
    }

    // Start the connection
    sh "BUILD_ID=dontKillMe nohup /var/tmp/BrowserStackLocal 42MyAcc3sK3yV4lu3 -onlyAutomate > /var/tmp/browserstack.log 2>&1 & echo \$! > /var/tmp/browserstack.pid"

    try {
        // Execute tests
        actions()
    }
    finally {
        // Stop the connection
        sh "kill `cat /var/tmp/browserstack.pid`"
    }
}

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

Важной частью здесь является BUILD_ID, потому что его ProcessTreeKiller ищет, когда он решает, убить ваш демон-процесс или нет.

Надеюсь это поможет!

янв

person Jan Molak    schedule 05.05.2016

Ответ Пола Уилана на использование плагина Jenkin BrowserStack в настоящее время является самым простым способом интегрировать Jenkins с BrowserStack. Плагин поддерживает все версии Jenkins> 1.580.1.

Чтобы убедиться, что вы получаете отчеты о тестировании BrowserStack, вам необходимо настроить pom.xml вашего проекта, как описано в плагин вики.

person anirudha13    schedule 19.07.2016

На случай, если у кого-то еще возникли проблемы с этим

Для BrowserStackLocal v4.8 я обнаружил, что -localidentifier был удален из бинарных опционов. (Это, наверное, старые новости!)

Когда я удалил свойство capabilities['browserstack.localIdentifier'] из наших автоматических тестов, соединение начало работать.

локальный двоичный файл

browserstack <key> -v -forcelocal

настройка селена

Capybara.register_driver :browserstack do |app|
    capabilities = Selenium::WebDriver::Remote::Capabilities.new

    # If we're running the BrowserStackLocal binary, we need to
    # tell the driver as well
    capabilities['browserstack.local'] = true

    # other useful options
    capabilities['browserstack.debug'] = true
    capabilities['browserstack.javascriptEnabled'] = true
    capabilities['javascriptEnabled'] = true

    # etc ...
person Ralph Cowling    schedule 08.03.2016
comment
-localIdentifier безусловно поддерживается. Букву "I" нужно передавать в верхнем регистре, например -localIdentifier, а не -localidentifier. - person Umang Sardesai; 03.07.2016
comment
Должно быть, тогда я видел github. com / browserstack / browserstack-local-nodejs / blob / master / и подумал, что это подтверждает мое предположение о том, что это была ошибка, но я не забуду с этого момента верблюжий случай моего localIdentifier! - person Ralph Cowling; 04.07.2016