Настройка Travis CI, Circle CI для запуска автотестов

Всем привет, долго искал на различных форумах детальные инструкции по настройке #ci сервера для запуска автотестов, но так и не нашел.

Не знаю в чем проблема: или нету особого интереса, или большинство людей, отказываются предоставлять людям помощь, а тем более бесплатную в критически важных вопросах. В связи с этим предлагаю детальную инструкцию по настройке #travisci и #circleci, так как по #jenkins уже сказано много, а эти две платформы как по мне довольно интересны и популярны.

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

Travis CI

  1. Регистрируемся на оф.сайте Travis CI, а точнее входим через любой предложенный вариант, в зависимости от того где у вас тесты хранятся (#git , #bitbucket)

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

  3. Программа будет говорить вам, что нужно создать в корневой папке проекта файл “.travis.yml” (да, именно с точкой впереди). Делаем это, но только предварительно вставляем указанные ниже строки в файл, которые помогут сконфигурировать запуск тестов). Лично я пробовал ранить тесты для селениума на java, по этому и код соответствующий. Поэдитайте его для своего проэкта.

language: java # set desired language

dist: trusty

addons:
  apt:
    sources:
      - google-chrome # if your project contains tests need to be run on chrome include these lines
    packages:
      - google-chrome-stable

addons:
   firefox: "38.0" # if your project contains tests need to be run on firefox include these lines


before_install:
  - "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024" # running virtual display on desired port with desired settings
  - sleep 3 

before_script:
  # Selenium server
  - "wget http://selenium-release.storage.googleapis.com/2.45/selenium-server-standalone-2.45.0.jar" - # download selenium-server
  - "wget %url_of_your_lib% # download your framework or framework dependencies (selenium libs, etc.)
  - "java -jar selenium-server-standalone-2.45.0.jar > /dev/null 2>/dev/null &" # starting selenium-server
  - sleep 20 # gives enough time to Selenium to start

script:
  # perform build and run commands here
  - %your_framework build command%
  - %your_framework run command%

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

  • before_script
  • before_install
  • script и т.д (в оф.доке они есть и понять, что они значат также не составит труда)
  1. Пушим файлик конфига на гит и ждем…

  2. CI-ка увидит, что был коммит и автоматически начнет ранить тесты, если все было сделано правильно, то пойдут выполняться комманды, которые вы указали. Обращайте внимание на ошибки - они помогут.

На этом для Travis CI все. Кстати на почту также начнут сыпаться уведомления об успешном или зафейленом прохождении тестов, если что)

Circle CI

  1. Регистрируемся на оф.сайте Circle CI, а точнее входим через любой предложенный вариант, в зависимости от того где у вас тесты хранятся (Git, Bitbucket)

  2. После успешной авторизации заходим в профиль добавляем любой проект из вашей репы.

  3. Программа будет говорить вам, что нужно создать в корневой папке проекта файл “circle.yml” (да, уже без точки впереди). Делаем это, но только предварительно вставляем указанные ниже строки в файл, которые помогут сконфигурировать запуск тестов).

machine:
  java:
    version: 1.8
    
general:
  branches:
    only:
      - master # list of branches to build
      
dependencies:
  pre:
    - wget http://url_for_your_libs
    - wget http://selenium-release.storage.googleapis.com/2.45/selenium-server-standalone-2.45.0.jar #download selenium-server
    - /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024
    - sleep 3
    - java -jar selenium-server-standalone-2.45.0.jar > /dev/null 2>/dev/null:
        background: true  #run selenium server in background
    - sleep 30
    
test:
  override:
    - #here should be build commands and run commands for your tests

  1. Пушим файлик конфига на гит и ждем…

  2. CI-ка увидит, что был коммит и автоматически начнет ранить тесты, если все было сделано правильно, то пойдут выполняться комманды, которые вы указали. Обращайте внимание на ошибки - они помогут.

На этом для Circle CI все. С Circle CI все должно быть проще скажу сразу, он “умнее” и в некоторых случах некоторым людям даже не приходится иметь файл конфига. Параметры в конфиге можно менять как угодно, ну только в соответствии с докуменнтацией), обращайте внимание на глобальные переменные, они помогут сэкономнить время при ране тестов. Также не забудьте указать комманду, которая бы сохраняла репорты в отдельную папку на CI сервере.

На этом все. Если что, пишите.

5 лайков

Спасибо за инструкцию!

Подскажите, пожалуйста, в случае запуска тестов для мобильных платформ (iOS, Android) написанных с помощью Appium, какие будут изменентя в настройке?

Отличаться будет как правило только комманда для компиляции вашего когда CI-сервером. Ну например, подумайте какие комманды вы в терминале запускаете для того, что бы ранить аппиум тесты у себя локально. Такие же комманды необходимо прописать и в конфиге файле.

Если я запускал в примере выше тесты для #java + #webdriver , то я сначала качаю селениум-либы, затем запускаю selenium-server (что я и указал коммандами) + если испольузется maven, то указывайте также комманды которыми мавен билдит и ранит ваши тесты, включая все ключи, которые используете вы

1 лайк

Круто! я вот Automation Remarks писал о настройке Travis для генерации “живой” документации к проекту

1 лайк

О Circle CI ранее ничего не слышал, надо будет его попробывать…
Лёш, а что ты для себя выбрал (да, я видел, что обкатал оба, но все же)?

Для себя лично ничего. Так как pet projects отсутствуют). Да и вообще, думаю смотреть надо по требованиям всегда. Jenkins ведь тоже хорош и может почти всегда полностью удовлетворить потребностям, просто нужно понимать, что Circle CI, Travis и прочие новомодные CI-ки не зря платными сделали и не зря они так обороты набирают сейчас.

Ребят скажи честно, пробовал Jenkins и CI. Но вот к примеру заказчик попросил проверять Seo теги на странице фун-ми тестами. И большой минус в CI оказался тайм аут, то есть дольше чем 120 минут просто прерывает тесты. Так как все теги на сайте примерно 2-3 часа проходят

Скорее всего, проблема не в CI. Надо смотреть логи и т.п. что стопает тесты.

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

Из форума Circle CI

There is a hard limit of 120 minutes per command—this helps us ensure that the infrastructure can be redeployed fast enough in case of a security vulnerability while still not breaking your build and not leaving it in an inconsistent state.
Would it be possible to use multiple containers in parallel and split the tests / simulations between them? This should allow you to stay under the 2h limit.

Так вы сами и ответили на свой вопрос - надо использовать параллельный запуск тестов, чтобы успевали в 2 часа. А 2 часа - это ограничение Circle CI.

Привет, советую для начала выбрать правильный инструмент для автоматизации именно в вашей доменной области. Проще говоря: не ту тулзовину используете. Советую взять Casper.js - если будет потребность сделаю по ней туториал аналогичный этому.Штука простая но делает именно то, что вам надо - а функциональными тестами доставить теги или проверять СЕО - ну это ж “дикий запад”)

Есть ли у кого опыт настройки CI +Appium + реальный iOS девайс? Руководство хочет именно такой вариант.

Вы ошиблись темой - ни на Travis, ни на Circle нету пула реал девайсов.