• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Системное тестирование  приложений на Ruby on Rails с применением Rspec и Capybara
 

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

on

  • 2,867 views

 

Statistics

Views

Total Views
2,867
Views on SlideShare
2,867
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