Автоматизируем тестирование UI с Ruby, Cucumber и Selenium.
Семерханов Илья, T-Systems CIS
Кто я?
Семерханов Илья
Test engineer
Configuration manager
Team lead
Опыт автоматизации больше 3х лет
О чем я расскажу?
Зачем автоматизируют?
• Повышает качество
• Ускоряет тестирование
• Уменьшает количество однотипной работы
• Экономит бюджет и ресурсы
Основные проблемы
• Сложно, Дорого и Долго
• Нужен человек который будет автоматизировать
• Нужен человек который будет это поддерживать
Стоит ли оно того?
Путь #1. Record&Play!
Путь #2. Code It!
Путь #2. Code It!
Плюсы:
• Фреймворк под конкретный проект
• Гибкость
• Удобно поддерживать
• Надежно
Путь #2. Code It
Минусы:
• Нужен специалист, который сможет реализовать фреймворк.
• Специалист так же нужен и для поддержки этих тестов
• Требуется время для создания фреймворка и новых тестов
Путь #3
1. Написать фреймворк при помощи автоматизатора или программиста.
2. Поддерживать тесты силами существующей команды тестировщиков, без технического специалиста.
Фреймворк должен позволять эффективно писать тесты, а не кодировать их!
А Ruby тут причем?
Что такое Ruby?
Ruby это:• современный• мощный• объектно-ориентированный
язык программирования с низким порогом вхождения.
Преимущества
Лаконичный код без синтаксических излишков
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
Преимущества
Легко читается
Java: Ruby:
for(int i = 1; i<100; i++){System.out.println(i);
}
for number in 1..100puts number
end
Преимущества
• TryRuby.org - ruby за 15 минут.
• Книга Learn to Program ~ 10 часов.
Быстро изучается
Преимущества
Интерактивная оболочка IRB
Ruby + другие языки
Ruby можно использовать не вместо, а вместе с другими языками, например с Java или С#.
JRuby – Java реализация Ruby. Работают все библиотеки, может запускаться из Java кода.
IronRuby – .NET реализация Ruby.
Ruby + Selenium 2.0
Полностью поддерживает Selenium 2.0 Webdriver.
Все что нужно сделать:
>> gem install selenium-webdriver
И можно работать.
Пример на 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
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(); }}
В чем выгода?
• Фреймворк реализуется быстрее
• Меньше кода
• Ничего лишнего
• Можно научить не программиста азам за короткий срок
Cucumber
Избавимся от кодирования на этапе написания тестов, используем подход из BDD.
http://cukes.info/
Cucumber
Выполняет текстовые функциональные описания, как автоматические тесты
Использует синтаксис Gherkin, позволяющий описать поведение приложения
Cucumber
Тест состоит из:• Feature• Scenario• Feature steps
Каждый Feature step описывается в Ruby коде.
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
Метрики Cucumber
Метрики Cucumber
В итоге
• Ruby отличный выбор чтобы быстро начать писать полноценный фреймворк для тестирования
• Ruby может быть использован вместе с другими языками, как Java или C#
• При помощи Cucumber можно добиться написания автотестов без кодирования, на естественном языке
• Поддерживать такие тесты проще
Ссылки
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
Спасибо!
Контакты
Семерханов Илья
T-Systems CIS, Санкт-Петербург
Email: [email protected]
Skype: i.semerhanov