Автоматизируем тестирование UI с Ruby, Cucumber и Selenium

5,754 views

Published on

Презентация доклада Ильи Семерханова на конференции SQADays-14, Львов 8-9 ноября 2013

Published in: Education
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,754
On SlideShare
0
From Embeds
0
Number of Embeds
1,315
Actions
Shares
0
Downloads
33
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Автоматизируем тестирование UI с Ruby, Cucumber и Selenium

  1. 1. Автоматизируем тестирование UI с Ruby, Cucumber и Selenium. Семерханов Илья, T-Systems CIS
  2. 2. Кто я? Семерханов Илья Test engineer Configuration manager Team lead Опыт автоматизации больше 3х лет
  3. 3. О чем я расскажу?
  4. 4. Зачем автоматизируют? • Повышает качество • Ускоряет тестирование • Уменьшает количество однотипной работы • Экономит бюджет и ресурсы
  5. 5. Основные проблемы • Сложно, Дорого и Долго • Нужен человек который будет автоматизировать • Нужен человек который будет это поддерживать
  6. 6. Стоит ли оно того?
  7. 7. Путь #1. Record&Play!
  8. 8. Путь #2. Code It!
  9. 9. Путь #2. Code It! Плюсы: • Фреймворк под конкретный проект • Гибкость • Удобно поддерживать • Надежно
  10. 10. Путь #2. Code It Минусы: • Нужен специалист, который сможет реализовать фреймворк. • Специалист так же нужен и для поддержки этих тестов • Требуется время для создания фреймворка и новых тестов
  11. 11. Путь #3 1. Написать фреймворк при помощи автоматизатора или программиста. 2. Поддерживать тесты силами существующей команды тестировщиков, без технического специалиста. Фреймворк должен позволять эффективно писать тесты, а не кодировать их!
  12. 12. А Ruby тут причем?
  13. 13. Что такое Ruby? Ruby это: • современный • мощный • объектно-ориентированный язык программирования с низким порогом вхождения.
  14. 14. Преимущества Лаконичный код без синтаксических излишков Java: class SQADays{ private String presentationName; private String authorName; public void setPresenationName(String name){ this.presentationName = name; } public String getPresenationName(){ return presentationName; } public void setAuthorName(String name){ this.authorName = name; } public String getAuthorName(){ return authorName; } } Ruby: class sqadays attr_accessor :presentation_name, :author_name end
  15. 15. Преимущества Легко читается Java: Ruby: for(int i = 1; i<100; i++){ System.out.println(i); } for number in 1..100 puts number end
  16. 16. Преимущества Быстро изучается • TryRuby.org - ruby за 15 минут. • Книга Learn to Program ~ 10 часов.
  17. 17. Преимущества Интерактивная оболочка IRB
  18. 18. Ruby + другие языки Ruby можно использовать не вместо, а вместе с другими языками, например с Java или С#. JRuby – Java реализация Ruby. Работают все библиотеки, может запускаться из Java кода. IronRuby – .NET реализация Ruby.
  19. 19. Ruby + Selenium 2.0 Полностью поддерживает Selenium 2.0 Webdriver. Все что нужно сделать: >> gem install selenium-webdriver И можно работать.
  20. 20. Ruby + Selenium 2.0 Пример на Ruby: require 'rubygems' require 'selenium-webdriver‘ driver = Selenium::WebDriver.for :firefox driver.get "http://google.com" element = driver.find_element :name => "q" element.send_keys "Cheese!" element.submit puts "Page title is #{driver.title}" wait = Selenium::WebDriver::Wait.new(:timeout => 10) wait.until { driver.title.downcase.start_with? "cheese!" } puts "Page title is #{driver.title}" driver.quit
  21. 21. Ruby + Selenium 2.0 Тот же пример на Java: package org.openqa.selenium.example; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; public class Selenium2Example { public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com"); WebElement element = driver.findElement(By.name("q")); element.sendKeys("Cheese!"); element.submit(); System.out.println("Page title is: " + driver.getTitle()); (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase().startsWith("cheese!"); } }); System.out.println("Page title is: " + driver.getTitle()); driver.quit(); } }
  22. 22. В чем выгода? • Фреймворк реализуется быстрее • Меньше кода • Ничего лишнего • Можно научить не программиста азам за короткий срок
  23. 23. Cucumber Избавимся от кодирования на этапе написания тестов, используем подход из BDD. http://cukes.info/
  24. 24. Cucumber Выполняет текстовые функциональные описания, как автоматические тесты Использует синтаксис Gherkin, позволяющий описать поведение приложения
  25. 25. Cucumber Тест состоит из: • Feature • Scenario • Feature steps Каждый Feature step описывается в Ruby коде.
  26. 26. Cucumber Пример feature: Feature: Home page is working Scenario: The application has a home page Given web application is started on <http://localhost:8080/portal> When I visit the home page Then I should see the home page Пример описания шага на Ruby: Given /^web application is started on (.*)/do |host| #Some ruby + selenium code here end
  27. 27. Метрики Cucumber
  28. 28. Метрики Cucumber
  29. 29. В итоге • Ruby отличный выбор чтобы быстро начать писать полноценный фреймворк для тестирования • Ruby может быть использован вместе с другими языками, как Java или C# • При помощи Cucumber можно добиться написания автотестов без кодирования, на естественном языке • Поддерживать такие тесты проще
  30. 30. Ссылки Ruby: http://www.ruby-lang.org/en/ http://tryruby.org Ruby in 15 minutes http://rubymonk.com/ Learn Ruby Cucumber: http://cukes.info/ https://github.com/cucumber/cucumber/wiki/Cucumber-Backgrounder Selenium + Ruby: http://selenium2.ru/docs/appendix/client-ruby.html
  31. 31. Спасибо!
  32. 32. Контакты Семерханов Илья T-Systems CIS, Санкт-Петербург Email: ilya.semerhanov@t-systems.com Skype: i.semerhanov

×