CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны

1,524 views
1,556 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,524
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны

  1. 1. Full-stacked Ruby (on Rails) testingТЕСТИРОВАНИЕ RUBY (ON RAILS) ПРИЛОЖЕНИЙ:СТЕК, ПРАКТИКИ, ШАБЛОНЫ
  2. 2. О себеАлексей Родионов Freelance www.TopTal.com Watir-WebDriver, Page-Object, Ruby OnRails, NativeDriver Mozilla WebQA @p0deje https://github.com/p0deje p0deje@gmail.com
  3. 3. toptal
  4. 4. 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
  5. 5. В начале
  6. 6. В началеclass PublicControllerTest < ActionController::TestCase # Replace this with your real tests. test “the truth” do assert true endend
  7. 7. 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
  8. 8. Front-end фреймворкRSpec Юнит-тесты Rack-test Mock-объектыCucumber Функциональные тесты WebDriver “Живые” данные
  9. 9. Front-end фреймворкПростой сценарийScenario: Applying to job Given a new job is approved And I am logged in as developer user When I click “Jobs” link And I open this job And I apply to job Then I should see successfully apply to job message
  10. 10. Front-end фреймворк Сценарий посложнейScenario Outline: Job termination Given a new job is <job_status> And I am logged in as <role> user When I open “<tab>” tab And I open this job And I <action> job Then I should see <message> Examples: | role | tab | job_status | action | message | | company | Jobs | created | remove | successful job deletion message | | company | Jobs | approved | cancel | successful job deletion message | | company | Jobs | active | end | notice message “The job was updated successfully.” | | admin | All Jobs | created | remove | successful job deletion message | | admin | All Jobs | approved | cancel | successful job deletion message | | admin | All Jobs | active | end | notice message “The job was updated successfully.” |
  11. 11. Front-end фреймворк+ DRY+ Живая документация+ Сначала фича, потом разработка (недо-ATDD+ Тесты от клиента?
  12. 12. Front-end фреймворкScenario: End active job Given a new job is active And I am logged in as company user When I open this job And I end job Then job status should be "On Notice"
  13. 13. Front-end фреймворкScenario: Ended job is active after page refresh Given a new job is active And I am logged in as company user When I open this job And I end job And I refresh page Then job status should be "On Notice"
  14. 14. 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
  15. 15. Back-end фреймворкhttp://watirmelon.com/2011/12/03/a-tale-of-three-ruby-automated-testing-apis-re
  16. 16. Back-end фреймворкCapybara+ Легка в использовании (i.e. разработчики пишут тес+ Интеграция с Rails- Красивое, но не объектное APIWatir-WebDriver+ Мощное DOM-like API+ Никаких XPath, CSS
  17. 17. Back-end фреймворкclass HomePage < Page # # Clicks “Login” link. # @return [LoginPage] # def click_login_link menu_div.link(text: Login).click LoginPage.new end private def menu_div; browser.div(id: menu) endend # HomePage
  18. 18. 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
  19. 19. page-objectclass HomePage < Page # Elements link :login_link, id: „login_link‟end # HomePage> page = HomePage.new # Click link> page.login_link # Is link present on page?> page.login_link? # Wait until link is shown, then click> page.login_link_element.when_present.clickhttps://github.com/cheezy/page-object
  20. 20. 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
  21. 21. DRY1. Дробите страницы на блоки и выносите их в отдельные модули
  22. 22. DRY2. Класс страницы должен уметь менять набор своих методов в зависмости от контекста (polymorphous page objects)
  23. 23. DRY3. Создавайте свои DSL
  24. 24. DRYclass JobListPage < Page def jobs # ... end def job?(title) # ... end def job(title) # ... endend # JobListPage
  25. 25. 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
  26. 26. CI и CD Specs (Юнит-тесты)Features (Функциональные тесты) Deploy
  27. 27. 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
  28. 28. Параллельные тестыSelenium Grid 2Для запуска/управления браузеромparallel_testsДля распределения процессов, фич и БД
  29. 29. Параллельные тестыОколо 700 сценариев1. Одним процессом: 5 часов 10 минут2. Четыре процесса (Core Quad): 1 час 45 минут
  30. 30. 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
  31. 31. Дополнения1. Адекватное тестирование емейлов https://github.com/p0deje/action_mailer_cache_delive2. Автоматическая валидация страниц на соответстви стандартам W3C3. Хелперы, конфигурации и пр. https://github.com/p0deje/CodeFest-2012
  32. 32. Вопросы? @p0dejehttps://github.com/p0deje/CodeFest-2012

×