BDD (Bihavior-Driven Development) — разработка с опережающим описанием поведения программы. Другими словами сначала мы описываем в спецификации то, как должна себя вести программа, а затем пишем саму программу.
capybara
capybara-mechanize
selenium-webdriver
Браузер + селениум IDE + firebug
На cucumber мы пишет наши тесты простым языком, а сами шаги реализуем с испльзованием Capybara. А Capybara уже взаимодействует с webdriver'ом
Gem файлы:
cucumbercapybara
capybara-mechanize
selenium-webdriver
Браузер + селениум IDE + firebug
Структура:
current\ features\ user.feature step_definitions\ user_steps.rb support\ env.rb
в папке «features» находятся наши «фичи» написанные по правилам Cucumber. В папке «step_definitions» шаги для реализации задуманного функционала. В папке «support» какие-нибудь конфигурационные файлы, библиотеки. А так же файл env.rb — к которому обращается Cucmber сразу после запуска (где происходит инициализация драйвера; первоначальная настройка).
Cucumber
Итак, Cucumber. Он позволяет описать поведение системы с позиции внешнего наблюдателя ( «заказчика, конечного пользователя»). При этом описание дается на естественно языке, никаких вам begin end. Каждый вариант использования системы в огурце называется «фичей» (feature). Все они лежат в одноименной папочке features с расширением файла *.feature.
В каждом файле описывается один или несколько «сценариев» (scenario), характеризующих фичу. Сценарии состоят из ряда шагов, объявленных в файлах из папки features/step_definitions/*_steps.rb.
Шаги бывают трех типов:
Given (что-то данное, некоторое предварительное условие),
When (что-то, что происходит, какие-то действия пользователя)
Then (результат, реакция, отклик)
Одна из фич :
In order know that the portal is alive
As a regular user
I want to see who is online
Background:
Given the section "Personal profiles" exists
Scenario Outline: See a special label next to the name of a user who is online
Given nobody has been on the portal for a lot time
And a user exists with name: "<name>"
When the user "<name>" <user action> the portal
And I go to the profile of the user "<name>"
Then I should <my action> the online label for the user "<name>"
When I go to the section "Personal profiles"
Then I should <my action> the online label for the user "<name>"
Examples:
| name | user action | my action |
| Victoria | visits | see |
| Michael | does not visit | not see |
Ключевое слово "Feature" предшествует имени фичи, по правилам должно кратко и ясно описывать действия пользователя. Три строчки под ним говорят, для чего, кто и что хочет. Раздел "Background" по желанию, задает общие шаги для всех сценариев фичи. Далее идут либо "Scenario", либо "Scenario Outline". Первое описывает сценарий без параметров, второе — с параметрами, идущими после ключевого слова "Examples" снизу. Через собачку (@) расставляются метки, позволяющие наложить дополнительные условия на всю фичу или конкретный сценарий, а так же выборочно выполнить тест. В принципе все читабельно. В идеале должно быть так, чтобы заказчик взял этот файл, открыл простым текстовым редактором и не напрягаясь прочел, все понял, осознал и подтвердил: «Оно!»
Что касается настройки огурца, то она проводится в сгенерированном файле features/support/env.rb. Там добавляются необходимые строчки кода для подключения всего, что необходимо для тестирования.
Устанавливаем Gem
После того как установлены Ruby and RubyGems, Cucumber устанавливается следующей командой:
gem install cucumber
Начнем знакомство при помощи команды
--help
cucumber --help
Запускаем
cucumber features/user.feature
RSpec
RSpec тоже используется для описания внешнего поведения системы, однако больше подходит для копания в ее внутренностях. Каждый файл у RSpec в простонародье называется «спекой» (spec, от specification), находится в папке spec и заканчивается на*_spec.rb. Принято файлы в папке spec разбивать по вложенным папкам, чтобы они отражали структуру рельсового проекта (models, controllers, helpers, etc.). Вот пример:
describe User do
it { should ensure_length_of(:email).is_at_least(6).is_at_most(100) }
it { should validate_format_of(:email).with('ma1f0rmed emai1 address') }
subject { Factory :user }
it { should validate_uniqueness_of :email }
it { should validate_uniqueness_of :address }
end
Конфигурация RSpec сконцентрирована в файле spec/spec_helper.rb. Аналогично env.rb у Cucumber сюда идут все вспомогательные require и прочее.
Подробненькая статья про мачеры
Подробненькая статья про мачеры
Устанавливаем Gem
Устанавливается следующей командой:
gem install rspec
Начнем знакомство при помощи команды
--help
rspec --help
Запускаем
rspec feature/step_defenitions/user_steps.rb
Capybara
Capybara — это удобная штука для автоматизации «браузерного» тестирования приложения. Джем дает множество вспомогательных методов в тестовое окружение, в результате чего с легкостью можно проверить такие вещи как, например, переход по ссылкам, заполнение форм (поля ввода, выпадающие списки, чекбоксы и так далее), наличие какого-либо элемента на странице. Более того, при подключении к нему Selenium, позволяет проходить шаги тестового сценария прямо в браузере. У вас откроется браузер и странички будут бегать одна за другой. В случае Cucumber для этого достаточно открыть файл env.rb и добавить следующий код с указанием нужного браузера (список доступных смотрим в документации по Selenium):
Capybara.register_driver :selenium do |app|
Capybara::Driver::Selenium.new app, :browser => :chrome
end
Factory Girl Rails
Эту библиотеку используют для удобного создания экземпляров моделей. Другими словами, нужно же на примере чего-то тестировать. Нам нужны и пользователи (User) какие-нибудь, и статьи (Article), и проекты (Project) с задачами (Task). Не создавать же каждый раз объекты с заполнением всех обязательных полей. Вот тут-то на помощь и приходят подобные фабрики. Достаточно один раз определить шаблон и далее генерировать новые сущности на его основе. В связке с RSpec фабрики обычно хранятся в папке spec/factories или напрямую в spec/factories.rb. Например, вот такая:
Factory.define :user do |factory|
factory.sequence(:email) { |i| "user#{ i }@example.org" }
factory.password 'password'
factory.password_confirmation { |user| user.password }
factory.confirmed_at Time.now
end
Все, теперь в тестах достаточно Factory(:user) и у нас валидный юзер.
export RAILS_ENV=test и запуск через bundle exec
ОтветитьУдалить