Распараллеливание теста BDD на Cucumber на нескольких машинах с использованием Gems или Jenkins (или обоих)
Я управляю проектом с использованием BDD с Cucumber (с гемом page_object), Watir и Jenkins. Сейчас мы ищем лучший способ распараллелить тестирование, чтобы сократить время тестирования на нескольких виртуальных машинах, с разными навигаторами и так далее.
Я думаю, что есть два подхода:
- использовать инструмент Ruby, такой как parallel_test, Hydra, TestJour, TestBot...
- или организовать все через Jenkins, используя пути, теги и т. д.
- использовать оба в некотором роде
Чтобы правильно приложить усилия... Считаете ли вы, что Jenkins - это хороший вариант для параллельного тестирования на нескольких машинах, или я должен дать шанс другому инструменту? Предложения приветствуются:)
3 ответа
Дженкинс - это только часть решения. Вы можете использовать параллельные тесты для одновременного запуска нескольких циклов (если ваш сервер Jenkins не работает в Windows), но вам все еще нужно больше.
Вам нужно будет настроить сетку серверов для обработки тестов Watir. Я настоятельно рекомендую вам взглянуть на Selenium Grid 2 (http://code.google.com/p/selenium/wiki/Grid2). Настройте узлы на ваших удаленных виртуальных машинах и запустите концентратор на вашем сервере Jenkins. Затем parallel_tests может запустить тесты параллельно, подключив их к локальному концентратору, который, в свою очередь, отправит их на удаленные серверы для выполнения.
Одно замечание - для того, чтобы это работало хорошо, вам нужна хорошая стратегия управления тестовыми данными. Каждый тест должен быть в состоянии выполнить самостоятельно. Кроме того, каждый из них должен отвечать за настройку необходимых данных для запуска теста, а затем очищать эти данные после его выполнения.
Я использую Дженкинс для разделения рабочих мест на различные подчиненные машины. Когда параллельные тесты не требуются, это также позволяет тестировать разные среды разными пользователями (тестирование тестеров, устранение неполадок разработчиков и т. Д.). Очень легко настроить!
Вы можете распараллелить, распределив свои тесты по разным тегам, а затем запустив разные наборы тегов на каждом тестовом компьютере.
require 'rubygems'
require 'cucumber'
require 'cucumber/rake/task'
Cucumber::Rake::Task.new( :features) do |t|
t.cucumber_opts = "features --tags @testset_1 "
end