Параллельное программирование, весна 2014: Шаблоны || программирования
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails)...
Transcript of CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails)...
![Page 1: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/1.jpg)
Full-stacked Ruby (on Rails) testingТЕСТИРОВАНИЕ RUBY (ON RAILS) ПРИЛОЖЕНИЙ: СТЕК, ПРАКТИКИ, ШАБЛОНЫ
![Page 2: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/2.jpg)
О себе
Алексей Родионов
Freelance www.TopTal.com
Watir-WebDriver, Page-Object, Ruby On Rails, NativeDriver Mozilla WebQA
@p0deje https://github.com/p0deje [email protected]
![Page 3: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/3.jpg)
toptal
![Page 4: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/4.jpg)
1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
![Page 5: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/5.jpg)
В начале
![Page 6: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/6.jpg)
![Page 7: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/7.jpg)
В начале
class PublicControllerTest < ActionController::TestCase # Replace this with your real tests. test “the truth” do assert true endend
![Page 8: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/8.jpg)
1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
![Page 9: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/9.jpg)
Front-end фреймворк
RSpecЮнит-тестыRack-testMock-объекты
CucumberФункциональные тестыWebDriver“Живые” данные
![Page 10: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/10.jpg)
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
![Page 11: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/11.jpg)
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.” |
Сценарий посложней
![Page 12: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/12.jpg)
Front-end фреймворк
+ DRY+ Живая документация+ Сначала фича, потом разработка (недо-ATDD)+ Тесты от клиента?
![Page 13: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/13.jpg)
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"
![Page 14: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/14.jpg)
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"
![Page 15: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/15.jpg)
![Page 16: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/16.jpg)
1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
![Page 17: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/17.jpg)
Back-end фреймворк
http://watirmelon.com/2011/12/03/a-tale-of-three-ruby-automated-testing-apis-redux/
![Page 18: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/18.jpg)
Back-end фреймворк
Capybara+ Легка в использовании (i.e. разработчики пишут тесты)+ Интеграция с Rails- Красивое, но не объектное API
Watir-WebDriver+ Мощное DOM-like API+ Никаких XPath, CSS
![Page 19: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/19.jpg)
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') end
end # HomePage
![Page 20: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/20.jpg)
1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
![Page 21: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/21.jpg)
page-object
class 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.click
https://github.com/cheezy/page-object
![Page 22: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/22.jpg)
1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
![Page 23: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/23.jpg)
DRY
1. Дробите страницы на блоки и выносите их в отдельные модули
![Page 24: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/24.jpg)
DRY
2. Класс страницы должен уметь менять набор своих методов в зависмости от контекста (polymorphous page objects)
![Page 25: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/25.jpg)
DRY
3. Создавайте свои DSL
![Page 26: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/26.jpg)
DRY
class JobListPage < Page
def jobs # ... end
def job?(title) # ... end
def job(title) # ... end end # JobListPage
![Page 27: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/27.jpg)
1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
![Page 28: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/28.jpg)
CI и CD
Specs (Юнит-тесты)
Features (Функциональные тесты)
Deploy
![Page 29: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/29.jpg)
1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
![Page 30: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/30.jpg)
Параллельные тесты
Selenium Grid 2Для запуска/управления браузером
parallel_testsДля распределения процессов, фич и БД
![Page 31: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/31.jpg)
Параллельные тесты
Около 700 сценариев
1. Одним процессом: 5 часов 10 минут2. Четыре процесса (Core Quad): 1 час 45 минут
![Page 32: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/32.jpg)
1. В началe2. Front-end фреймворк3. Back-end фреймворк4. page-object5. DRY6. CI и CD с помощью Jenkins7. Параллельные тесты8. Дополнения
![Page 33: CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, практики, шаблоны](https://reader036.fdocument.pub/reader036/viewer/2022062303/55878b80d8b42a42318b4752/html5/thumbnails/33.jpg)
Дополнения
1. Адекватное тестирование емейловhttps://github.com/p0deje/action_mailer_cache_delivery
2. Автоматическая валидация страниц на соответствиестандартам W3C
3. Хелперы, конфигурации и пр.https://github.com/p0deje/CodeFest-2012