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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

  • 2,747 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,747
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
18
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

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. Инструментарий
  • 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