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

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

on

  • 1,319 views

 

Statistics

Views

Total Views
1,319
Views on SlideShare
943
Embed Views
376

Actions

Likes
1
Downloads
1
Comments
0

4 Embeds 376

http://codefest.ru 332
http://2012.codefest.ru 36
http://2014.codefest.ru 5
http://2013.codefest.ru 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

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

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

    • Full-stacked Ruby (on Rails) testingТЕСТИРОВАНИЕ RUBY (ON RAILS) ПРИЛОЖЕНИЙ:СТЕК, ПРАКТИКИ, ШАБЛОНЫ
    • О себеАлексей Родионов Freelance www.TopTal.com Watir-WebDriver, Page-Object, Ruby OnRails, NativeDriver Mozilla WebQA @p0deje https://github.com/p0deje p0deje@gmail.com
    • toptal
    • 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
    • В начале
    • В началеclass PublicControllerTest < ActionController::TestCase # Replace this with your real tests. test “the truth” do assert true endend
    • 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
    • Front-end фреймворкRSpec Юнит-тесты Rack-test Mock-объектыCucumber Функциональные тесты WebDriver “Живые” данные
    • 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
    • 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.” |
    • Front-end фреймворк+ DRY+ Живая документация+ Сначала фича, потом разработка (недо-ATDD+ Тесты от клиента?
    • 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"
    • 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"
    • 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
    • Back-end фреймворкhttp://watirmelon.com/2011/12/03/a-tale-of-three-ruby-automated-testing-apis-re
    • Back-end фреймворкCapybara+ Легка в использовании (i.e. разработчики пишут тес+ Интеграция с Rails- Красивое, но не объектное APIWatir-WebDriver+ Мощное DOM-like API+ Никаких XPath, CSS
    • 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
    • 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
    • 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
    • 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
    • DRY1. Дробите страницы на блоки и выносите их в отдельные модули
    • DRY2. Класс страницы должен уметь менять набор своих методов в зависмости от контекста (polymorphous page objects)
    • DRY3. Создавайте свои DSL
    • DRYclass JobListPage < Page def jobs # ... end def job?(title) # ... end def job(title) # ... endend # JobListPage
    • 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
    • CI и CD Specs (Юнит-тесты)Features (Функциональные тесты) Deploy
    • 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
    • Параллельные тестыSelenium Grid 2Для запуска/управления браузеромparallel_testsДля распределения процессов, фич и БД
    • Параллельные тестыОколо 700 сценариев1. Одним процессом: 5 часов 10 минут2. Четыре процесса (Core Quad): 1 час 45 минут
    • 1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
    • Дополнения1. Адекватное тестирование емейлов https://github.com/p0deje/action_mailer_cache_delive2. Автоматическая валидация страниц на соответстви стандартам W3C3. Хелперы, конфигурации и пр. https://github.com/p0deje/CodeFest-2012
    • Вопросы? @p0dejehttps://github.com/p0deje/CodeFest-2012