Все дела сделаны и теперь есть время черкануть пару строк об автоматизации тестирования…
Думаю не стоит рассказывать о том, что такое тестирование или автоматизации тестирования. Я так же не буду вводить в начальный курс Cucumber, Capybara или Selenium-Webdriver, так как некоторую информацию можно найти на просторах интернета.
Вся «работа» будет проходить в режиме реального взаимодействия с web-браузером. Т.е. web-браузер будет запускатсья, эмулировать действия реального пользователя и закрываться по завершению тестов. Запуск реального браузера позволяет автоматизировать ajax запросы и различные JS «фишки». Хотя, если работа с JS не требуется, то можно не запускать web-браузер, a работать из консоли, и тем самым сохранить некоторое время, ускорить работу тестов. Для этих целей вместо Selenium-Webdriver можно использовать Capybara-mechanize драйвер.
Для тех, кто все еще не смог успел познакомиться с Cucumber и Capybara, скажу так: «огурец» будем использовать, как «парсер» текста, Capybara — как прослойку между Cucumber и драйвером, а так же для написания шагов автоматизации. Иными словами… на cucumber мы пишет наши тесты простым языком, а сами шаги реализуем с испльзованием Capybara. А Capybara уже взаимодействует с webdriver'ом, но это уже совсем другая история ;)
Предполагается, что у вас установлен ruby со всеми соответствующими настройками. Рассмотрим на примере с FF браузером. И так… Поехали!
Устанавливаем gem's:
(ubuntu) # sudo gem install cucumber capybara selenium-webdriver capybara-mechanize --pre
Gem файлы которые установлены на моей машине:
cucumber — 1.1.4
capybara — 1.1.2
capybara-mechanize — 0.3.0.rc3
selenium-webdriver — 2.17.0
Допустим у нас уже есть написанныя фича, на Cucumber. Рассмотрим структу папок необходимую для корректной работы.
MyProject features step_definitions/ user_steps.rb support env.rb
Пару слов о самой структуре:
в папке «features» находятся наши «фичи» написанные по правилам Cucumber.
в папке «step_definitions» шаги для реализации задуманного функционала.
в папке «support» какие-нибудь конфигурационные файлы, библиотеки. А так же файл env.rb — к которому обращается Cucmber сразу после запуска; где происходит инициализация драйвера; первоначальная настройка.
Вроде все предельно просто. Перейдем непосредственно к самой настройке нашего env.rb файла.
Открываем env.rb. И подключаем необходимые файлы:
require 'cucumber/formatter/unicode'
require 'capybara'
require 'capybara/dsl'
require 'capybara/session'
require 'selenium-webdriver'
require 'capybara/cucumber'
require 'capybara/mechanize/cucumber'
Заставляем Capybara игнорировать срытые элементы, устанавливаем время ожидания и хост по умолчанию:
Capybara.ignore_hidden_elements = true
Capybara.default_wait_time = 15
Capybara.app_host = «http://my_site.com»
Регистрируем сами драйвера:
Capybara.register_driver :selenium do |app|
profile = Selenium::WebDriver::Firefox::Profile.new # только если мы хотим создать ноый профиль для FF.
Selenium::WebDriver::Firefox.path = File.expand_path('~/path/to/firefox') # можем не указывать, тогда будет вызван FF по умолчанию.
Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => profile)
end
# регистрация драйвера для тестирования без участия web-браузера
Capybara.register_driver :mechanize do |app|
Capybara::Mechanize::Driver.new(app)
end
Cucumber перед выполнением того или иного сценария, вызывает секцию Before do … end. А после завершения сценария — After do … end. Если вы помните, то Cucumber поддерживает работу с тегами, т. е. мы можем указать перед сценарием какое-нибудь имя тега и в секции «Before» устанавливать драйвер для Capybara. Так же можно выводить названия не пройденных тестов из раздела «After», или отправлять письма, отчеты и так далее. Ради справедливости хочется заметить, что Capybara поддерживает не которые драйверы, по умолчанию, но я вам советую переопределять их самим. :)
Before do |scenario|
if scenario.source_tag_names.include?('@no_browser') and Capybara.default_driver != :mechanize
Capybara.default_driver = :mechanize
elsif !scenario.source_tag_names.include?('@no_browser') and Capybara.default_driver != :selenium
Capybara.default_driver = :selenium
end
end
After do |scenario|
if scenario.failed?
puts scenario.name
puts scenario.exception.message
end
end
В новых версиях Capybara после каждого сценария, gem'ка сбрасывает сессию. Это грозит тем, что, если у вас есть система авторизации, то в каждом новом сценарии надо опять ее проходить. Этого можно избежать, если заблокировать данное действие. Необходимо перейти к gem файлу (ubuntu: …/gems/capybara-VERSION/lib/capybara/cucumber.rb) и поставить коммент перед «Capybara.reset_sessions!» в самой первой секции (секция After do … end). Это не все «новшества» обновлений: так же после каждого сценария, «Capybara» переводит браузер на чистую страницу. От этого так же не сложно «избавиться», если поставить комментарий перед «@browser.navigate.to('about:blank')» в «…/gems/capybara-VERSION/lib/capybara/selenium/driver.rb» файле.
Хочется так же отметить, что на некоторых тестовых окружения есть так называемая basic authority, это можно обойти путем передачи имени и пароля непосредственно в URL'е:
Capybara.visit("http://#{$name}:#{$pass}@#{url}")
После этого действия FF может выдать еще одно окно, с уточнением (ох уж этот FF… ).
От этого «окна» избавляются путем добавления одного параметра в сам браузер. Вот как это можно сделать:
Открываем about:config страницу в FF. Создаем новый целочисленный ключ (правое нажатие мыши → новый → целочисленный): network.http.phishy-userpass-length со значение 255
Оригинал тут.
Вот и все. Настрой закончена… Теперь достаточно писать шаги и делать тестируемое приложение лучше :)
Можно рассмотреть как создаются шаги (steps), как пишутся сценарии (scenario), или удариться в еще какую-нибудь «область» Cucumber / Capybara / WebDriver. Если будет интересно — пишите!
Спасибо за внимание и всем удачи!
P.S. Несколько ссылок:
cucumber github
capybara github
selenium
Автор: AlexMrKlim