Системное тестирование приложений на Ruby on Rails с применением Rspec и Capybara Леонид Шевцов, kiev.rb, 7 марта 2011
О презентации <ul><li>Практическая точка зрения
Не буду говорить о TDD
Заранее простите за терминологию </li></ul>
Способы тестирования сайтов <ul><li>Русская рулетка </li><ul><li>Проверяют сами программисты
(ОК при прототипировании) </li></ul><li>Тестировщик (QA-инженер) </li><ul><li>Наиболее популярный способ
Хорошие результаты </li></ul><li>Юнит-тесты </li><ul><li>Хорошо, но недостаточно </li></ul><li>Acceptance-тесты? </li></ul>
Acceptance-тесты — что это? <ul><li>Проверка сайта “со стороны пользователя”,  с использованием браузера или его эмулятора.
Описывают работу сайта набором “сценариев”.
Противоположный от юнит-тестов подход. </li></ul>
Сайт — многослойная система <ul><li>Много слоев
Много модулей
Покрыть все юнит-тестами —  либо невозможно, либо нерентабельно
Обычно покрывают только модель </li></ul>
Сайт — многослойная система <ul><li>На странице есть ссылка...
На нее навешивается Javascript...
Который формирует и делает POST-запрос...
К определенному контроллеру...
Который вызывает  определенную   модель ...
Возвращает ответ в Javascript...
Который в результате меняет HTML </li></ul>
Ассеptance-тесты — зачем? Есть же тестер <ul><li>Всегда быстрее человека.
Лучшее управление состоянием системы
Upcoming SlideShare
Loading in...5
×

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

3,064

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,064
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
24
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

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

    Clipping is a handy way to collect important slides you want to go back to later.

×