Автоматизируем тестирование ui с ruby, cucumber и selenium
DESCRIPTION
Презентация доклада Ильи Семерханова на конференции SQADays-14, Львов 8-9 ноября 2013TRANSCRIPT
![Page 1: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/1.jpg)
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium.
Семерханов Илья, T-Systems CIS
![Page 2: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/2.jpg)
Кто я?
Семерханов Илья
Test engineer
Configuration manager
Team lead
Опыт автоматизации больше 3х лет
![Page 3: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/3.jpg)
О чем я расскажу?
![Page 4: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/4.jpg)
Зачем автоматизируют?
• Повышает качество
• Ускоряет тестирование
• Уменьшает количество однотипной работы
• Экономит бюджет и ресурсы
![Page 5: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/5.jpg)
Основные проблемы
• Сложно, Дорого и Долго
• Нужен человек который будет автоматизировать
• Нужен человек который будет это поддерживать
![Page 6: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/6.jpg)
Стоит ли оно того?
![Page 7: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/7.jpg)
Путь #1. Record&Play!
![Page 8: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/8.jpg)
Путь #2. Code It!
![Page 9: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/9.jpg)
Путь #2. Code It!
Плюсы:
• Фреймворк под конкретный проект
• Гибкость
• Удобно поддерживать
• Надежно
![Page 10: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/10.jpg)
Путь #2. Code It
Минусы:
• Нужен специалист, который сможет реализовать фреймворк.
• Специалист так же нужен и для поддержки этих тестов
• Требуется время для создания фреймворка и новых тестов
![Page 11: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/11.jpg)
Путь #3
1. Написать фреймворк при помощи автоматизатора или программиста.
2. Поддерживать тесты силами существующей команды тестировщиков, без технического специалиста.
Фреймворк должен позволять эффективно писать тесты, а не кодировать их!
![Page 12: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/12.jpg)
А Ruby тут причем?
![Page 13: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/13.jpg)
Что такое Ruby?
Ruby это:• современный• мощный• объектно-ориентированный
язык программирования с низким порогом вхождения.
![Page 14: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/14.jpg)
Преимущества
Лаконичный код без синтаксических излишков
Java: Ruby:
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; }}
class sqadays attr_accessor :presentation_name, :author_nameend
![Page 15: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/15.jpg)
Преимущества
Легко читается
Java: Ruby:
for(int i = 1; i<100; i++){System.out.println(i);
}
for number in 1..100puts number
end
![Page 16: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/16.jpg)
Преимущества
• TryRuby.org - ruby за 15 минут.
• Книга Learn to Program ~ 10 часов.
Быстро изучается
![Page 17: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/17.jpg)
Преимущества
Интерактивная оболочка IRB
![Page 18: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/18.jpg)
Ruby + другие языки
Ruby можно использовать не вместо, а вместе с другими языками, например с Java или С#.
JRuby – Java реализация Ruby. Работают все библиотеки, может запускаться из Java кода.
IronRuby – .NET реализация Ruby.
![Page 19: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/19.jpg)
Ruby + Selenium 2.0
Полностью поддерживает Selenium 2.0 Webdriver.
Все что нужно сделать:
>> gem install selenium-webdriver
И можно работать.
![Page 20: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/20.jpg)
Пример на Ruby:
require 'rubygems'require 'selenium-webdriver‘
driver = Selenium::WebDriver.for :firefoxdriver.get "http://google.com"element = driver.find_element :name => "q"element.send_keys "Cheese!"element.submitputs "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
Ruby + Selenium 2.0
![Page 21: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/21.jpg)
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(); }}
![Page 22: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/22.jpg)
В чем выгода?
• Фреймворк реализуется быстрее
• Меньше кода
• Ничего лишнего
• Можно научить не программиста азам за короткий срок
![Page 23: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/23.jpg)
Cucumber
Избавимся от кодирования на этапе написания тестов, используем подход из BDD.
http://cukes.info/
![Page 24: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/24.jpg)
Cucumber
Выполняет текстовые функциональные описания, как автоматические тесты
Использует синтаксис Gherkin, позволяющий описать поведение приложения
![Page 25: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/25.jpg)
Cucumber
Тест состоит из:• Feature• Scenario• Feature steps
Каждый Feature step описывается в Ruby коде.
![Page 26: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/26.jpg)
Cucumber
Пример feature:
Пример описания шага на Ruby:
Given /^web application is started on (.*)/do |host|
#Some ruby + selenium code here
end
Feature: Home page is workingScenario: The application has a home page
Given web application is started on <http://localhost:8080/portal>When I visit the home pageThen I should see the home page
![Page 27: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/27.jpg)
Метрики Cucumber
![Page 28: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/28.jpg)
Метрики Cucumber
![Page 29: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/29.jpg)
В итоге
• Ruby отличный выбор чтобы быстро начать писать полноценный фреймворк для тестирования
• Ruby может быть использован вместе с другими языками, как Java или C#
• При помощи Cucumber можно добиться написания автотестов без кодирования, на естественном языке
• Поддерживать такие тесты проще
![Page 30: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/30.jpg)
Ссылки
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
![Page 31: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/31.jpg)
Спасибо!
![Page 32: Автоматизируем тестирование UI с Ruby, Cucumber и Selenium](https://reader031.vdocument.in/reader031/viewer/2022013105/557cf98ed8b42a89158b4bea/html5/thumbnails/32.jpg)
Контакты
Семерханов Илья
T-Systems CIS, Санкт-Петербург
Email: [email protected]
Skype: i.semerhanov