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

Like this? Share it with your network

Share

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

on

  • 3,286 views

 

Statistics

Views

Total Views
3,286
Views on SlideShare
3,286
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 Presentation Transcript

  • 1. Системное тестирование приложений на Ruby on Rails с применением Rspec и Capybara Леонид Шевцов, kiev.rb, 7 марта 2011
  • 2. О презентации
    • Практическая точка зрения
    • 3. Не буду говорить о TDD
    • 4. Заранее простите за терминологию
  • 5. Способы тестирования сайтов
    • Русская рулетка
      • Проверяют сами программисты
      • 6. (ОК при прототипировании)
    • Тестировщик (QA-инженер)
      • Наиболее популярный способ
      • 7. Хорошие результаты
    • Юнит-тесты
      • Хорошо, но недостаточно
    • Acceptance-тесты?
  • 8. Acceptance-тесты — что это?
    • Проверка сайта “со стороны пользователя”, с использованием браузера или его эмулятора.
    • 9. Описывают работу сайта набором “сценариев”.
    • 10. Противоположный от юнит-тестов подход.
  • 11. Сайт — многослойная система
    • Много слоев
    • 12. Много модулей
    • 13. Покрыть все юнит-тестами — либо невозможно, либо нерентабельно
    • 14. Обычно покрывают только модель
  • 15. Сайт — многослойная система
    • На странице есть ссылка...
    • 16. На нее навешивается Javascript...
    • 17. Который формирует и делает POST-запрос...
    • 18. К определенному контроллеру...
    • 19. Который вызывает определенную модель ...
    • 20. Возвращает ответ в Javascript...
    • 21. Который в результате меняет HTML
  • 22. Ассеptance-тесты — зачем? Есть же тестер
    • Всегда быстрее человека.
    • 23. Лучшее управление состоянием системы
    • 24. Меньше проверок вручную, что значит...
    • 25. Более качественные проверки вручную.
    • 26. Упрощает жизнь и тестера, и программиста
    • 27. Живая документация
    • 28. Ответы на вопросы “а как сделать ...”
  • 29. Доступные средства
    • Selenium ( http://seleniumhq.org )
    • 30. Cucumber ( http://cukes.info )
    • 31. Rspec+Capybara NEW!
      • http://github.com/rspec/rspec-core
      • 32. http://github.com/jnicklas/capybara
  • 33. Чем Rspec+Capybara лучше... ...Selenium-а?
    • Рубистам повезло
    • 34. Более тесная связь с Rails
    • 35. Чистое окружение для каждого теста
    • 36. Быстрее (там, где нет Javascript)
  • 37. Чем Rspec+Capybara лучше... ...Cucumber-а?
    • Отсутствие лишнего слоя абстракции
    • 38. Пользователям Rspec будет удобнее
    • 39. Единое тестовое окружение, DRY
    • 40. Код нагляден сам по себе
  • 41. Инструментарий
    • Rspec
    • 42. Capybara
    • 43. Steak (или Capybara edge)
    • 44. rack_test / Selenium Webdriver
    • 45. Mongrel
    • 46. Rcov
    • 47. Spork
  • 48. Настройка JFGI
  • 49. Медленно?
    • Rspec запускает приложение с нуля...
    • 50. Даже при запуске единственного теста...
    • 51. Меееедленно! (5-20 секунд и больше)
  • 52. Spork
    • http://github.com/timcharper/spork
    • 53. Загружает приложение единожды
    • 54. Форкает себя для Rspec (как Unicorn)
    • 55. Тесты запускаются моментально
    • 56. Firefox тоже можно предзагружать
      • http://github.com/leonid-shevtsov/capybara
  • 57. 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
  • 58. Стандартные методы
    • visit '/some/page'
    • 59. click_link 'some link'
    • 60. fill_in 'some_field' , :with => 'value'
    • 61. page. should have_content ( 'foo' )
  • 62. Свои методы 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
  • 63. UrlHelper
    • Роуты не используются в тестах
    module UrlHelper def home_page '/' end def ad_page ( ad ) “ / ads / #{ad.slug}” end end
  • 64. С чего начать?
    • Покрой root_path
    • 65. Покрой авторизацию
    • 66. Прогони Rcov
    • 67. Покрывай контроллеры по алфавиту
    • 68. Цель — 100% покрытие контроллеров в Rcov
  • 69. Почему именно контроллеры?
    • Нет смысла тестировать вьюхи более, чем на предмет “дыма”
      • Невозможно оценить качество покрытия
      • 70. Невозможно проверить внешний вид
    • Нет смысла тестировать поведение моделей — для этого есть юнит-тесты.
  • 71. Когда начать?
    • Мало полезны на этапе прототипирования.
    • 72. Если сайт запущен, то уже пора.
    • 73. Чем больше страниц, тем более пора.
  • 74. Не будь жлобом — начни в неоплачиваемое время.
    • Руководству выгода не очевидна?
    • 75. Никто не хочет тратить N*100$ на тесты.
    • 76. Ты инвестируешь в собственное удобство.
  • 77. Вопросы?
      [email_address] @leonid_shevtsov