2011-12-29 3 views
4

, поэтому я работаю над веб-сайтом здесь, и я хотел бы запускать несколько тестов браузера за один раз. Я имею в виду, что он должен выполнять мои тесты дыма, например, firefox и chrome, и сообщать результаты каждого браузера. В настоящее время я тестирую только с помощью rpsec и watir-webdriver, но хотел бы автоматизировать для других 2 браузеров. Существуют ли какие-либо существующие драгоценные камни (я не смог их найти), если бы не лучший способ решить эту проблему?Несколько параллельных тестов браузера с помощью watir-webdriver через разные браузеры

ответ

3

Вы должны попробовать WatirGrid.

Это не сделает всю работу за вас, но это даст вам платформу для запуска сразу нескольких тестов. Вы можете запустить один и тот же тест 3 раза, изменив целевой браузер, и сетка будет обрабатывать, где они будут выполнены.

2

Почему не нужно ничего, кроме watir-webdriver, для запуска нескольких браузеров на одном компьютере.

ie = Watir::Browser.new :ie 
firefox = Watir::Browser.new :firefox 
chrome = Watir::Browser.new :chrome 
opera = Watir::Browser.new :opera 
+0

, который отлично работает, если вы хотите последовательно запускать свои тесты .. –

+0

Ну, в то же время «невозможно» в любом случае. Что означает «в то же время» в любом случае? На той же секунде? Миллисекунду? Вы можете открыть все браузеры, сделать что-то в одном браузере, сделать то же самое в другом браузере ... Когда вы закончите со всеми браузерами, сделайте что-то еще в первом браузере, втором браузере ... Промыть, повторить. –

+0

LOL - это общий рефрейм для меня, когда люди дают слишком свободные критерии проверки загрузки. Особенно учитывая, что большинство сетей посылают данные поочередно, чтобы иметь установку, где сервер может фактически получать несколько запросов одновременно », довольно сложно, когда вы начинаете нарезая время действительно мелко. Но в этом случае я думаю, что, возможно, он имеет в виду, что скрипты работают параллельно, возможно, на нескольких системах или виртуальных машинах, чтобы сократить время между тем, когда сборка готова, и результаты теста могут быть известны. –

1

Если вы хотите запустить тот же тестовый код для тестирования вам необходимо будет экстернализовать тип браузера, либо в качестве переменной окружения, или файл YAML или сконвертировано.

У Ruby есть материал, который упрощает работу с файлами yaml (мне нужно написать запись в блоге на этом), чтобы вы могли поместить что-то наверху своего скрипта, который вызывает метод для получения информации о конфигурации, а затем установите тип браузера соответственно.

В моем YAML файл testconfig.yml у меня есть:

global: 
    browser: ie    #possible values: ie, ff, chrome 

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

У меня есть метод read_config, определенный в readconfig.rb файл, который выглядит (в части), как этот

require 'yaml' 

def read_config 
    config = YAML.load_file('testconfig.yml') 
    $browser_type = config['global']['browser'] 
end 

И в верхней части моих тестов есть подобный код

require 'rubygems' 
require 'readconfig' 
require 'watir-webdriver' 
read_config 

$browser = Watir::Browser.new $browser_type.to_sym 

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

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

+0

Это кажется хорошей идеей, я буду ждать вашего сообщения в блоге. – cody

+0

Это может быть время. Тем временем, если какой-либо из этих ответов вам очень помог, вы, возможно, захотите его принять. в противном случае сообщите нам, что еще мы могли бы сделать, чтобы дать вам лучший ответ. –

2

Если у вас есть несколько машин или виртуальных машин для работы с, Jenkins в ответе. Мой подход похож на Chuck, но вместо плоского файла конфигурации я позволяю Jenkins запрашивать эти значения через раскрывающееся меню и т. Д. Jenkins легко настраивается и может автоматически распределять тестовые задания на любую доступную машину для тестирования.

Итак, я нажимаю «Google Search Test» и выбираю «Internet Explorer» ... тогда я делаю то же самое и выбираю другой браузер. Параллельные тесты в различных браузерах с выходом HTML/электронной почты и большой историей журнала.

Я также буду писать об этом больше, но я все еще в отпуске!

Вот пример файла конфигурации (они присваивают значения по умолчанию, если, например, Jenkins не используется для их запуска). ПРИМЕЧАНИЕ: «|| =» означает «если nil, используйте это значение. Если не nil, используйте текущее значение». Я только устанавливаю значения, если Дженкинс еще этого не сделал.

ENV['BROWSER'] ||= "firefox" 

ENV['ENVIRONMENT'] ||= "qa" 

ENV['LIMIT'] ||= "10" 

ENV['DISTRICT'] ||= "any" 

ENV['TYPE'] ||= "pkg-new" 

# Not necessary, but added for sanity/cleanliness: 
$type = ENV['TYPE'].downcase 
$browser = ENV['BROWSER'].downcase 
$env = ENV['ENVIRONMENT'].downcase 
$district = ENV['DISTRICT'].downcase 

puts "\t** Testing #{$env.upcase} using #{$browser.upcase}... **" 

Часть Дженкинса на удивление проста - так легко, что я не думал, что это было настроено. Вы создаете переменную для своего скрипта, и все, что вы называете переменной, становится ENV ["VariableName"] - и сразу же доступно для вашего скрипта.

Итак, у меня есть переменная с именем «BROWSER», которая устанавливается с помощью опций Firefox, IE и Chrome. У пользователя нет места, чтобы путать сценарий со свободным текстом, и они могут запускать собственный тест, когда захотят. Мои Devs/PM/Пользователи меня любят: D.

+0

как вы позаботитесь о том, чтобы Дженкинс рассказывал сценарии, какие использовать браузер? это параметр командной строки? или у вас есть несколько версий ваших сценариев для разных браузеров, и он запускает соответствующий? –

+0

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

+1

Ах да, волшебство переменных окружения.Это еще один отличный способ экстернализировать эти значения из сценариев, я могу в конечном итоге переключиться на это по дороге. Я мог бы, например, даже обновить метод readconfig, чтобы проверить переменную ENV и использовать ее, если она найдена, в противном случае получить значение из файла конфигурации. Тогда вы могли бы в принципе иметь свой выбор, каким образом управлять вещами, с одним «перепрыгиванием» другого. и СПАСИБО за то, что вы нашли время во время отпуска, чтобы поделиться этим с нами. –