Системное тестирование  приложений на Ruby on Rails с применением Rspec и Capybara
Upcoming SlideShare
Loading in...5
×
 

Системное тестирование приложений на Ruby on Rails с применением Rspec и Capybara

on

  • 3,128 views

 

Statistics

Views

Total Views
3,128
Views on SlideShare
3,128
Embed Views
0

Actions

Likes
1
Downloads
16
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Системное тестирование  приложений на Ruby on Rails с применением Rspec и Capybara Системное тестирование приложений на Ruby on Rails с применением Rspec и Capybara Presentation Transcript

  • Системное тестирование приложений на Ruby on Rails с применением Rspec и Capybara Леонид Шевцов, kiev.rb, 7 марта 2011
  • О презентации
    • Практическая точка зрения
    • Не буду говорить о TDD
    • Заранее простите за терминологию
  • Способы тестирования сайтов
    • Русская рулетка
      • Проверяют сами программисты
      • (ОК при прототипировании)
    • Тестировщик (QA-инженер)
      • Наиболее популярный способ
      • Хорошие результаты
    • Юнит-тесты
      • Хорошо, но недостаточно
    • Acceptance-тесты?
  • Acceptance-тесты — что это?
    • Проверка сайта “со стороны пользователя”, с использованием браузера или его эмулятора.
    • Описывают работу сайта набором “сценариев”.
    • Противоположный от юнит-тестов подход.
  • Сайт — многослойная система
    • Много слоев
    • Много модулей
    • Покрыть все юнит-тестами — либо невозможно, либо нерентабельно
    • Обычно покрывают только модель
  • Сайт — многослойная система
    • На странице есть ссылка...
    • На нее навешивается Javascript...
    • Который формирует и делает POST-запрос...
    • К определенному контроллеру...
    • Который вызывает определенную модель ...
    • Возвращает ответ в Javascript...
    • Который в результате меняет HTML
  • Ассеptance-тесты — зачем? Есть же тестер
    • Всегда быстрее человека.
    • Лучшее управление состоянием системы
    • Меньше проверок вручную, что значит...
    • Более качественные проверки вручную.
    • Упрощает жизнь и тестера, и программиста
    • Живая документация
    • Ответы на вопросы “а как сделать ...”
  • Доступные средства
    • Selenium ( http://seleniumhq.org )
    • Cucumber ( http://cukes.info )
    • Rspec+Capybara NEW!
      • http://github.com/rspec/rspec-core
      • http://github.com/jnicklas/capybara
  • Чем Rspec+Capybara лучше... ...Selenium-а?
    • Рубистам повезло
    • Более тесная связь с Rails
    • Чистое окружение для каждого теста
    • Быстрее (там, где нет Javascript)
  • Чем Rspec+Capybara лучше... ...Cucumber-а?
    • Отсутствие лишнего слоя абстракции
    • Пользователям Rspec будет удобнее
    • Единое тестовое окружение, DRY
    • Код нагляден сам по себе
  • Инструментарий
    • Rspec
    • Capybara
    • Steak (или Capybara edge)
    • rack_test / Selenium Webdriver
    • Mongrel
    • Rcov
    • Spork
  • Настройка JFGI
  • Медленно?
    • Rspec запускает приложение с нуля...
    • Даже при запуске единственного теста...
    • Меееедленно! (5-20 секунд и больше)
  • Spork
    • http://github.com/timcharper/spork
    • Загружает приложение единожды
    • Форкает себя для Rspec (как Unicorn)
    • Тесты запускаются моментально
    • Firefox тоже можно предзагружать
      • http://github.com/leonid-shevtsov/capybara
  • feature “Favorite ads” do let ( :user ) { Factory ( :user ) } before do ; @ad = Factory ( :ad ) ; end #... scenario "Preserving favorites across sessions" do add_ad_to_favorites ( @ad ) login ( user ) reset_session visit favorites_page we. should_not see @ad. title login ( user ) visit favorites_page we. should see @ad. title end end
  • Стандартные методы
    • visit '/some/page'
    • click_link 'some link'
    • fill_in 'some_field' , :with => 'value'
    • page. should have_content ( 'foo' )
  • Свои методы def login ( user ) visit login_page fill_in 'user_session[login]' , :with => user. email fill_in 'user_session[password]' , :with => 'password' click_button 'Login' end def add_ad_to_favorites ( ad ) visit ad_page ( ad ) click_link 'Add to favorites' end
    • http://github.com/leonid-shevtsov/behaving_rodent
  • UrlHelper
    • Роуты не используются в тестах
    module UrlHelper def home_page '/' end def ad_page ( ad ) “ / ads / #{ad.slug}” end end
  • С чего начать?
    • Покрой root_path
    • Покрой авторизацию
    • Прогони Rcov
    • Покрывай контроллеры по алфавиту
    • Цель — 100% покрытие контроллеров в Rcov
  • Почему именно контроллеры?
    • Нет смысла тестировать вьюхи более, чем на предмет “дыма”
      • Невозможно оценить качество покрытия
      • Невозможно проверить внешний вид
    • Нет смысла тестировать поведение моделей — для этого есть юнит-тесты.
  • Когда начать?
    • Мало полезны на этапе прототипирования.
    • Если сайт запущен, то уже пора.
    • Чем больше страниц, тем более пора.
  • Не будь жлобом — начни в неоплачиваемое время.
    • Руководству выгода не очевидна?
    • Никто не хочет тратить N*100$ на тесты.
    • Ты инвестируешь в собственное удобство.
  • Вопросы?
      [email_address] @leonid_shevtsov