SlideShare una empresa de Scribd logo
1 de 41
Automation Functional Testing
Андрей Ребров
Тренер по инженерным практикам
Ребров Андрей
          • ScrumTrek
            • Тренер инженерного
              направления
          • Luxoft
            • Разработчик
            • Scrum Master
Зачем заниматься автотестами?
•   Ручное тестирование отнимает много времени
•   Ручное тестирование приводит к ошибкам
•   Автоматизация позволяет делать основную работу лучше
•   Автоматизированное регрессионное тестирование служит «ремнем
    безопасности»
•   Автоматизированные тесты дают возможность получать результаты
    раньше
•   Тесты – это отличное подспорье при разработке как пример
•   Тесты являются документацией
•   Автоматизация может дать хорошее ROI
Проблемы автоматизации
•   Взаимоотношения с программистами
•   “Hump of Pain”
•   Начальный вклад
•   Код, который всегда меняется
•   «Код по наследству» (Legacy)
•   Страх
•   Старые привычки
Взаимоотношения с программистами
The “Hump of Pain”
Начальные вложения
Код, который постоянно меняется
Legacy
Страх
Старые привычки
Как преодолевать препятствия

•   Участвует вся команда
•   TDD
•   Нужен лидер
•   Надо менять культуру / отношение к работе
СТРАТЕГИЯ АВТОМАТИЗАЦИИ
Где начать
Стратегия автоматизации




http://goo.gl/MPjLD
Sprint 1
 Sprint 2
 Sprint 3
 Sprint 4
 Sprint 5
 Sprint 6
 Sprint 7
 Sprint 8
 Sprint 9
Sprint 10
Sprint 11
Sprint 12
Sprint 13
Sprint 14
                                                              Автоматизировать или нет




            Слабо
                                                     Ручное




            автоматизированно
                                Автоматизированное
Что стоит автоматизировать
•   Continuous Integration, Builds и Deployment
•   API или Web Service Testing
•   Тесты «до» GUI
•   Тестрование GUI
•   Load Tests
•   Сравниение
•   Повторяющие задачи
•   Генерация данных и настройка
Что не нужно автоматизировать
• Тестирование usability
• Исследовательское тестирование
  (Exploratory Testing)
• Тесты, которые никогда не упадут
• Одноразовые тесты
С чего начнем?
Внедрение автоматизации
тестирования
• Внедрение невозможно при отсутствии
  процесса тестирования
• Надо учесть затраты и выгоды (ROI)
• Выбрать инструмент для автоматизации
• Что должно быть автоматизировано (ROI)
• Определить правила и гайдлайны
Инструменты
Как выбирать инструменты
• Позволяют начать писать тесты сразу же
• Позволяют отделить логику тестов от реализации
• Позволяют и подталкивают к использованию известных
  практик разработки
• Позволяют использовать существующие языки
  программирования и IDE
• Имеют активное сообщество
Принципы

•   Keep It Simple (“KISS”)
•   Чаще запускать ради того, чтобы чаще иметь результат
•   Вовлечена вся команда
•   Нужно время, чтобы сделать правиль
•   Больше практики, меньше теоретики
Принципы при написании кода

•   Работа в паре
•   Рефакторинг
•   Простой дизайн
•   Модульность
•   ООП
•   Независимость
Структура Selenium 2
Selenium WebDriver
Общая суть работы с WebDriver может быть описана
так:
• реализуется код, использующий какую-либо
  имплементацию WebDriver. Данный код выполняет
  какие-либо действия с веб-страницей и сравнивает
  результат с эталонным:
• WebDriver транслирует команды в запущенный
  браузер (при использовании «браузерной»
  реализации) и сообщает результаты «обратно в
  код»
Selenium WebDriver
Локаторы и поиск элементов

•   By.id("idOfObject")
•   By.linkText("TextUsedInTheLink")
•   By.partialLinkText("partOfThelink")
•   By.tagName("theHTMLNodeType")
•   By.className("cssClassOnTheElement")
•   By.cssSelector("cssSelectorToTheElement")
•   By.xpath("//Xpath/to/the/element")
•   By.name("nameOfElement")
WebDriver - Навигация
За навигацию отвечает класс Navigate.
• void GoToUrl(string url) – перейти по указанному адресу.
   Пример: driver.Navigate().GoToUrl("some_url");
• void Back() - вернуться на предыдущую страницу.
   Пример: driver.Navigate().Back();
• void Forward() - перейти на следующую страницу.
   Пример: driver.Navigate().Forward();
• void Refresh() - обновить страницу.
   Пример: driver.Navigate().Refresh().
Работа с окошками
• void Close() - закрыть текущее окно. Закрывает браузер, если нету
  больше открытых окон;
• void Dispose() - Member of System.IDisposable. С помощью данного
  метода можно удалять, освобождать или сбрасывать
  неуправляемые ресурсы;
• Manage() - позволяет изменять настройки драйвера;
• void Quit() выход из драйвера, закрытие всех окон связанных с ним;
Работа с WebElement

• WebElement – представление HTML-элемента (тега)
  вместе с его содержимым
• Действия:
   – void click() – клик по элементу
   – void submit() – отправка формы
   – String getValue() – получение значения элемента
   – void sendKeys(keysToSend) – ввод текста в input-элемент
   – void clear() – очистка input-элемента
   – String getElementName() – получение name элемента
   – String getAttribute(java.lang.String name) – получение
     значения атрибута
   – boolean toggle() – клик по чекбоксу
Работа с WebElement
• WebElement – представление HTML-элемента (тега) вместе с его
  содержимым


Действия над элементами страницы:
• void Click() - одиночное нажатие по элементу;
• string GetAttribute(string attributeName) - возвращает значения атрибута;
• string GetCssValue(string propertyName) - возвращает значение свойства
  CSS элемента;
• void SendKeys(string text) - ввод текста в текстовые поля. При работе с
  текстовыми полями можно использовать функциональные клавиши, их
  работу обеспечивает класс Keys. Например: element.SendKeys("sds" +
  Keys.Up);
• void Submit() - отправка формы на сервер;
WebDriver
Действия над элементами страницы:
• bool Displayed { get; } - возвращает значение, которое указывает на
  то, является ли элемент невидимым;
• bool Enabled { get; } - возвращает значение, которое указывает на
  то, является ли элемент видимым;
• System.Drawing.Point Location { get; } - возвращает координаты
  элемента;
• bool Selected { get; } - возвращает значение, является ли данный
  элемент (checkboxes, radio buttons) выбранным;
• string TagName { get; } - возвращает имя тега элемента;
• string Text { get; } - возвращает innerText элемента (без пробелов);
• System.Drawing.Size Size { get; } - вовращает размеры элемента;
• void Clear() - очистка содержимого текстового элемента.
WebDriver
Выпадающие списки. Элементы множественного выбора.
 В WebDriver есть специальный класс SelectElement, который
предназначен для упрощения работы с HTML select элементами. Для
того, чтобы воспользоваться всеми прелестями данного класса нужно
подключить пространство имен OpenQA.Selenium.Support.UI. Данный
класс сожержит следующие методы:
• public void DeselectAll() - очистить все записи. Использовать только
   для элементов множественного выбора (multiple selections);
• public void DeselectByIndex(int index) - деактивировать
   опцию, используя индекс элемента;
• public void DeselectByText(string text) - деактивировать
   опцию, используя видимый текст элемента;
• public void DeselectByValue(string value) - деактивировать опцию, по
   значению элемента;
WebDriver
• public void SelectByIndex(int index) - активировать опцию, используя
  индекс элемента;
• public void SelectByText(string text) - активировать опцию, используя
  видимый текст элемента;
• public void SelectByValue(string value) - активировать опцию, по
  значению элемента;
• public System.Collections.Generic.IList AllSelectedOptions { get; } -
  возвращает все выбранные опции в пределах текущего элемента;
• public bool IsMultiple { get; } - возвращает значения, является ли
  данный элемент множественного выбора;
• public System.Collections.Generic.IList Options { get; } - возвращает
  список опций для выбранного элемента;
• public OpenQA.Selenium.IWebElement SelectedOption { get;} -
  возвращает значение текущего элемента.
WebDriver
IWebElement element = driver.FindElement(By.Id("submit"));
SelectElement select = new
SelectElement(driver.FindElement(By.XPath("//select")));
select.DeselectAll();
select.SelectByIndex(1);
select.SelectByText("TestText");
select.SelectByValue("Value2");
element.submit();
Еще возможности

•   Можно работать с куками
•   Можно использовать профили для Firefox
•   Можно выполнять JS на страницах
•   Поддержка HTML5
•   И многое другое
Задание
• Пишем тест только с WebDriver
• Рефакторим тест - выделяем
  класс PageObject, описывающий страницу с
  которой работали
• Рефакторим тест - выделяем хардкод данные в
  отдельные DataProvider`ы
• Добавляем в тест работу с базой данной.
  чтобы из нее брались данные которые
  пригодятся в тестах (опционально)
• Пишем следующий тест cразу по правилам
Полезные статьи – Автоматизация
• Test Automation Pyramid http://goo.gl/MPjLD
• Continuous Testing: Building Quality into Your Projects
  http://goo.gl/LFQGR
• Tester Developers, Developer Testers http://goo.gl/KvcYF
• How to Catch Up on Test Automation http://goo.gl/dJRQg
Полезные статьи – Selenium WebDriver
Статьи
• Debugging Tips for Selenium Test Failures
• Автоматизация тестирования HTML5-приложений на Ruby c
  помощью Selenium WebDriver
• Functional Testing with Selenium WebDriver and Scala
• Selenium Two Tutorial using C#/NUnit and
  InternetExplorerDriver
• A guide to using the python bindings for Selenium/Webdriver
Ребров Андрей
        •   andrebrov@gmail.com
        •   Twitter: andrebrov
        •   Skype: rebrov.andrey
        •   Блог: andrebrov.net

Más contenido relacionado

La actualidad más candente

Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with SeleniumSergey Shvets
 
Плюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизниПлюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизниz-tech
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
 
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQAFest
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0matroskin1980
 
Архитектура автоматизированных тестов
Архитектура автоматизированных тестовАрхитектура автоматизированных тестов
Архитектура автоматизированных тестовSQALab
 
Нагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховНагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховИлья Кожухов
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumvyacheslavmaslov
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDEISsoft
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиSQALab
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Dmitry Buzdin
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
 
6 лекция. тестирование производительности
 6 лекция. тестирование производительности 6 лекция. тестирование производительности
6 лекция. тестирование производительностиvyacheslavmaslov
 
Selenium, а давай подождем?
Selenium, а давай подождем?Selenium, а давай подождем?
Selenium, а давай подождем?SQALab
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveSQALab
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoIlya Shalyapin
 

La actualidad más candente (20)

Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with Selenium
 
Плюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизниПлюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизни
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
 
Архитектура автоматизированных тестов
Архитектура автоматизированных тестовАрхитектура автоматизированных тестов
Архитектура автоматизированных тестов
 
Нагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховНагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter Кожухов
 
Java 9 - Back to the Future
Java 9 - Back to the FutureJava 9 - Back to the Future
Java 9 - Back to the Future
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDE
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 
6 лекция. тестирование производительности
 6 лекция. тестирование производительности 6 лекция. тестирование производительности
6 лекция. тестирование производительности
 
Selenium, а давай подождем?
Selenium, а давай подождем?Selenium, а давай подождем?
Selenium, а давай подождем?
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
 

Destacado

Agile.by - Agileee season 3 - Agile Testing by Elisabeth Hendrickson
Agile.by  - Agileee season 3 - Agile Testing by Elisabeth HendricksonAgile.by  - Agileee season 3 - Agile Testing by Elisabeth Hendrickson
Agile.by - Agileee season 3 - Agile Testing by Elisabeth HendricksonNick Frolov
 
Kate Sushko - Agile testing
Kate Sushko - Agile testingKate Sushko - Agile testing
Kate Sushko - Agile testingCiklum Ukraine
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileKairat Yussupov
 
10 правил agile тестировщика IT-Brunch
10 правил agile тестировщика IT-Brunch10 правил agile тестировщика IT-Brunch
10 правил agile тестировщика IT-BrunchAndrii Dzynia
 
Cassandra:Курс молодого бойца
Cassandra:Курс молодого бойцаCassandra:Курс молодого бойца
Cassandra:Курс молодого бойцаIgor Khokhryakov
 
Agile.by - Agileee 2011 Retrospective - Тренды в Agile
Agile.by   -  Agileee 2011 Retrospective - Тренды в AgileAgile.by   -  Agileee 2011 Retrospective - Тренды в Agile
Agile.by - Agileee 2011 Retrospective - Тренды в AgileNick Frolov
 
Управление тестированием в Agile
Управление тестированием в AgileУправление тестированием в Agile
Управление тестированием в AgileAskhat Urazbaev
 

Destacado (8)

Agile.by - Agileee season 3 - Agile Testing by Elisabeth Hendrickson
Agile.by  - Agileee season 3 - Agile Testing by Elisabeth HendricksonAgile.by  - Agileee season 3 - Agile Testing by Elisabeth Hendrickson
Agile.by - Agileee season 3 - Agile Testing by Elisabeth Hendrickson
 
Kate Sushko - Agile testing
Kate Sushko - Agile testingKate Sushko - Agile testing
Kate Sushko - Agile testing
 
Agile testing
Agile testingAgile testing
Agile testing
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
 
10 правил agile тестировщика IT-Brunch
10 правил agile тестировщика IT-Brunch10 правил agile тестировщика IT-Brunch
10 правил agile тестировщика IT-Brunch
 
Cassandra:Курс молодого бойца
Cassandra:Курс молодого бойцаCassandra:Курс молодого бойца
Cassandra:Курс молодого бойца
 
Agile.by - Agileee 2011 Retrospective - Тренды в Agile
Agile.by   -  Agileee 2011 Retrospective - Тренды в AgileAgile.by   -  Agileee 2011 Retrospective - Тренды в Agile
Agile.by - Agileee 2011 Retrospective - Тренды в Agile
 
Управление тестированием в Agile
Управление тестированием в AgileУправление тестированием в Agile
Управление тестированием в Agile
 

Similar a Automation Functional Testing in Agile Projects

Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Andrey Rebrov
 
Jubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation ToolJubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation ToolCOMAQA.BY
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Организация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестированииОрганизация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестированииSQALab
 
Victor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysVictor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysLiloSEA
 
Андрей Сильчук: "Автоматическое тестирование".
Андрей Сильчук: "Автоматическое тестирование".Андрей Сильчук: "Автоматическое тестирование".
Андрей Сильчук: "Автоматическое тестирование".Hub-IT-School
 
Автоматическое тестирование и с чем его едят
Автоматическое тестирование и с чем его едятАвтоматическое тестирование и с чем его едят
Автоматическое тестирование и с чем его едятMarina Peregud
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumUladzimir Kryvenka
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGDataArt
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCAndrew Mayorov
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Mail.ru Group
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...jazzteam
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?buranLcme
 
Great functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and ThucydidesGreat functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and ThucydidesMikalai Alimenkou
 
Do you know what you are testing?
Do you know what you are testing?Do you know what you are testing?
Do you know what you are testing?Mikalai Alimenkou
 
А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?SQALab
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
Simonova CSEDays
Simonova CSEDaysSimonova CSEDays
Simonova CSEDaysLiloSEA
 
Katerina Simonova CSEDays
Katerina Simonova CSEDaysKaterina Simonova CSEDays
Katerina Simonova CSEDaysLiloSEA
 

Similar a Automation Functional Testing in Agile Projects (20)

Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
 
Jubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation ToolJubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation Tool
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Организация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестированииОрганизация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестировании
 
Victor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysVictor Kuliamin.CSEDays
Victor Kuliamin.CSEDays
 
Андрей Сильчук: "Автоматическое тестирование".
Андрей Сильчук: "Автоматическое тестирование".Андрей Сильчук: "Автоматическое тестирование".
Андрей Сильчук: "Автоматическое тестирование".
 
Автоматическое тестирование и с чем его едят
Автоматическое тестирование и с чем его едятАвтоматическое тестирование и с чем его едят
Автоматическое тестирование и с чем его едят
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из Selenium
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
 
Great functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and ThucydidesGreat functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and Thucydides
 
Do you know what you are testing?
Do you know what you are testing?Do you know what you are testing?
Do you know what you are testing?
 
А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с Codeception
 
Simonova CSEDays
Simonova CSEDaysSimonova CSEDays
Simonova CSEDays
 
Katerina Simonova CSEDays
Katerina Simonova CSEDaysKaterina Simonova CSEDays
Katerina Simonova CSEDays
 

Más de Andrey Rebrov

Agile Testing in Enterprise: Way to transform - SQA Days 2014
Agile Testing in Enterprise: Way to transform - SQA Days 2014Agile Testing in Enterprise: Way to transform - SQA Days 2014
Agile Testing in Enterprise: Way to transform - SQA Days 2014Andrey Rebrov
 
Spec By Example or How to teach people talk to each other
Spec By Example or How to teach people talk to each otherSpec By Example or How to teach people talk to each other
Spec By Example or How to teach people talk to each otherAndrey Rebrov
 
Test Automation Canvas
Test Automation CanvasTest Automation Canvas
Test Automation CanvasAndrey Rebrov
 
How engineering practices help business
How engineering practices help businessHow engineering practices help business
How engineering practices help businessAndrey Rebrov
 
Don’t turn your logs into cuneiform
Don’t turn your logs into cuneiformDon’t turn your logs into cuneiform
Don’t turn your logs into cuneiformAndrey Rebrov
 
DevOps tools cargo tools
DevOps tools cargo toolsDevOps tools cargo tools
DevOps tools cargo toolsAndrey Rebrov
 
Agile тестирование в enterpise проектов: путь трансформации
Agile тестирование в enterpise проектов: путь трансформацииAgile тестирование в enterpise проектов: путь трансформации
Agile тестирование в enterpise проектов: путь трансформацииAndrey Rebrov
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayAndrey Rebrov
 
Test Automation Canvas - не наступайте на глабли автоматизации
Test Automation Canvas - не наступайте на глабли автоматизацииTest Automation Canvas - не наступайте на глабли автоматизации
Test Automation Canvas - не наступайте на глабли автоматизацииAndrey Rebrov
 
Не превращайте ваши логи в клинопись
Не превращайте ваши логи в клинописьНе превращайте ваши логи в клинопись
Не превращайте ваши логи в клинописьAndrey Rebrov
 
Карго культ инструментов в DevOps
Карго культ инструментов в DevOpsКарго культ инструментов в DevOps
Карго культ инструментов в DevOpsAndrey Rebrov
 
как инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесукак инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесуAndrey Rebrov
 
грабли автоматизации тестирования мобильного веба с помощью Selenium 2
грабли автоматизации тестирования мобильного веба с помощью Selenium 2грабли автоматизации тестирования мобильного веба с помощью Selenium 2
грабли автоматизации тестирования мобильного веба с помощью Selenium 2Andrey Rebrov
 
DevOps от и до - что, зачем и почему
DevOps от и до - что, зачем и почемуDevOps от и до - что, зачем и почему
DevOps от и до - что, зачем и почемуAndrey Rebrov
 
Agile Testing: вопросы и ответы
Agile Testing: вопросы и ответыAgile Testing: вопросы и ответы
Agile Testing: вопросы и ответыAndrey Rebrov
 
DevOps модное слово или следующая ступень эволюции
DevOps модное слово или следующая ступень эволюцииDevOps модное слово или следующая ступень эволюции
DevOps модное слово или следующая ступень эволюцииAndrey Rebrov
 
Как научить людей общаться с помощью Spec By Example
Как научить людей общаться с помощью Spec By ExampleКак научить людей общаться с помощью Spec By Example
Как научить людей общаться с помощью Spec By ExampleAndrey Rebrov
 
Rebrov selenium camp2013
Rebrov selenium camp2013Rebrov selenium camp2013
Rebrov selenium camp2013Andrey Rebrov
 
Курс молодого бойца-автоматизатора - как остаться в живых и стать ветераном
Курс молодого бойца-автоматизатора - как остаться в живых и стать ветераномКурс молодого бойца-автоматизатора - как остаться в живых и стать ветераном
Курс молодого бойца-автоматизатора - как остаться в живых и стать ветераномAndrey Rebrov
 

Más de Andrey Rebrov (20)

Agile Testing in Enterprise: Way to transform - SQA Days 2014
Agile Testing in Enterprise: Way to transform - SQA Days 2014Agile Testing in Enterprise: Way to transform - SQA Days 2014
Agile Testing in Enterprise: Way to transform - SQA Days 2014
 
Spec By Example or How to teach people talk to each other
Spec By Example or How to teach people talk to each otherSpec By Example or How to teach people talk to each other
Spec By Example or How to teach people talk to each other
 
Test Automation Canvas
Test Automation CanvasTest Automation Canvas
Test Automation Canvas
 
How engineering practices help business
How engineering practices help businessHow engineering practices help business
How engineering practices help business
 
Don’t turn your logs into cuneiform
Don’t turn your logs into cuneiformDon’t turn your logs into cuneiform
Don’t turn your logs into cuneiform
 
DevOps tools cargo tools
DevOps tools cargo toolsDevOps tools cargo tools
DevOps tools cargo tools
 
Agile Games
Agile GamesAgile Games
Agile Games
 
Agile тестирование в enterpise проектов: путь трансформации
Agile тестирование в enterpise проектов: путь трансформацииAgile тестирование в enterpise проектов: путь трансформации
Agile тестирование в enterpise проектов: путь трансформации
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
 
Test Automation Canvas - не наступайте на глабли автоматизации
Test Automation Canvas - не наступайте на глабли автоматизацииTest Automation Canvas - не наступайте на глабли автоматизации
Test Automation Canvas - не наступайте на глабли автоматизации
 
Не превращайте ваши логи в клинопись
Не превращайте ваши логи в клинописьНе превращайте ваши логи в клинопись
Не превращайте ваши логи в клинопись
 
Карго культ инструментов в DevOps
Карго культ инструментов в DevOpsКарго культ инструментов в DevOps
Карго культ инструментов в DevOps
 
как инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесукак инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесу
 
грабли автоматизации тестирования мобильного веба с помощью Selenium 2
грабли автоматизации тестирования мобильного веба с помощью Selenium 2грабли автоматизации тестирования мобильного веба с помощью Selenium 2
грабли автоматизации тестирования мобильного веба с помощью Selenium 2
 
DevOps от и до - что, зачем и почему
DevOps от и до - что, зачем и почемуDevOps от и до - что, зачем и почему
DevOps от и до - что, зачем и почему
 
Agile Testing: вопросы и ответы
Agile Testing: вопросы и ответыAgile Testing: вопросы и ответы
Agile Testing: вопросы и ответы
 
DevOps модное слово или следующая ступень эволюции
DevOps модное слово или следующая ступень эволюцииDevOps модное слово или следующая ступень эволюции
DevOps модное слово или следующая ступень эволюции
 
Как научить людей общаться с помощью Spec By Example
Как научить людей общаться с помощью Spec By ExampleКак научить людей общаться с помощью Spec By Example
Как научить людей общаться с помощью Spec By Example
 
Rebrov selenium camp2013
Rebrov selenium camp2013Rebrov selenium camp2013
Rebrov selenium camp2013
 
Курс молодого бойца-автоматизатора - как остаться в живых и стать ветераном
Курс молодого бойца-автоматизатора - как остаться в живых и стать ветераномКурс молодого бойца-автоматизатора - как остаться в живых и стать ветераном
Курс молодого бойца-автоматизатора - как остаться в живых и стать ветераном
 

Automation Functional Testing in Agile Projects

  • 1. Automation Functional Testing Андрей Ребров Тренер по инженерным практикам
  • 2. Ребров Андрей • ScrumTrek • Тренер инженерного направления • Luxoft • Разработчик • Scrum Master
  • 3. Зачем заниматься автотестами? • Ручное тестирование отнимает много времени • Ручное тестирование приводит к ошибкам • Автоматизация позволяет делать основную работу лучше • Автоматизированное регрессионное тестирование служит «ремнем безопасности» • Автоматизированные тесты дают возможность получать результаты раньше • Тесты – это отличное подспорье при разработке как пример • Тесты являются документацией • Автоматизация может дать хорошее ROI
  • 4. Проблемы автоматизации • Взаимоотношения с программистами • “Hump of Pain” • Начальный вклад • Код, который всегда меняется • «Код по наследству» (Legacy) • Страх • Старые привычки
  • 6. The “Hump of Pain”
  • 12. Как преодолевать препятствия • Участвует вся команда • TDD • Нужен лидер • Надо менять культуру / отношение к работе
  • 16. Sprint 1 Sprint 2 Sprint 3 Sprint 4 Sprint 5 Sprint 6 Sprint 7 Sprint 8 Sprint 9 Sprint 10 Sprint 11 Sprint 12 Sprint 13 Sprint 14 Автоматизировать или нет Слабо Ручное автоматизированно Автоматизированное
  • 17. Что стоит автоматизировать • Continuous Integration, Builds и Deployment • API или Web Service Testing • Тесты «до» GUI • Тестрование GUI • Load Tests • Сравниение • Повторяющие задачи • Генерация данных и настройка
  • 18. Что не нужно автоматизировать • Тестирование usability • Исследовательское тестирование (Exploratory Testing) • Тесты, которые никогда не упадут • Одноразовые тесты
  • 20. Внедрение автоматизации тестирования • Внедрение невозможно при отсутствии процесса тестирования • Надо учесть затраты и выгоды (ROI) • Выбрать инструмент для автоматизации • Что должно быть автоматизировано (ROI) • Определить правила и гайдлайны
  • 22. Как выбирать инструменты • Позволяют начать писать тесты сразу же • Позволяют отделить логику тестов от реализации • Позволяют и подталкивают к использованию известных практик разработки • Позволяют использовать существующие языки программирования и IDE • Имеют активное сообщество
  • 23. Принципы • Keep It Simple (“KISS”) • Чаще запускать ради того, чтобы чаще иметь результат • Вовлечена вся команда • Нужно время, чтобы сделать правиль • Больше практики, меньше теоретики
  • 24. Принципы при написании кода • Работа в паре • Рефакторинг • Простой дизайн • Модульность • ООП • Независимость
  • 26. Selenium WebDriver Общая суть работы с WebDriver может быть описана так: • реализуется код, использующий какую-либо имплементацию WebDriver. Данный код выполняет какие-либо действия с веб-страницей и сравнивает результат с эталонным: • WebDriver транслирует команды в запущенный браузер (при использовании «браузерной» реализации) и сообщает результаты «обратно в код»
  • 28. Локаторы и поиск элементов • By.id("idOfObject") • By.linkText("TextUsedInTheLink") • By.partialLinkText("partOfThelink") • By.tagName("theHTMLNodeType") • By.className("cssClassOnTheElement") • By.cssSelector("cssSelectorToTheElement") • By.xpath("//Xpath/to/the/element") • By.name("nameOfElement")
  • 29. WebDriver - Навигация За навигацию отвечает класс Navigate. • void GoToUrl(string url) – перейти по указанному адресу. Пример: driver.Navigate().GoToUrl("some_url"); • void Back() - вернуться на предыдущую страницу. Пример: driver.Navigate().Back(); • void Forward() - перейти на следующую страницу. Пример: driver.Navigate().Forward(); • void Refresh() - обновить страницу. Пример: driver.Navigate().Refresh().
  • 30. Работа с окошками • void Close() - закрыть текущее окно. Закрывает браузер, если нету больше открытых окон; • void Dispose() - Member of System.IDisposable. С помощью данного метода можно удалять, освобождать или сбрасывать неуправляемые ресурсы; • Manage() - позволяет изменять настройки драйвера; • void Quit() выход из драйвера, закрытие всех окон связанных с ним;
  • 31. Работа с WebElement • WebElement – представление HTML-элемента (тега) вместе с его содержимым • Действия: – void click() – клик по элементу – void submit() – отправка формы – String getValue() – получение значения элемента – void sendKeys(keysToSend) – ввод текста в input-элемент – void clear() – очистка input-элемента – String getElementName() – получение name элемента – String getAttribute(java.lang.String name) – получение значения атрибута – boolean toggle() – клик по чекбоксу
  • 32. Работа с WebElement • WebElement – представление HTML-элемента (тега) вместе с его содержимым Действия над элементами страницы: • void Click() - одиночное нажатие по элементу; • string GetAttribute(string attributeName) - возвращает значения атрибута; • string GetCssValue(string propertyName) - возвращает значение свойства CSS элемента; • void SendKeys(string text) - ввод текста в текстовые поля. При работе с текстовыми полями можно использовать функциональные клавиши, их работу обеспечивает класс Keys. Например: element.SendKeys("sds" + Keys.Up); • void Submit() - отправка формы на сервер;
  • 33. WebDriver Действия над элементами страницы: • bool Displayed { get; } - возвращает значение, которое указывает на то, является ли элемент невидимым; • bool Enabled { get; } - возвращает значение, которое указывает на то, является ли элемент видимым; • System.Drawing.Point Location { get; } - возвращает координаты элемента; • bool Selected { get; } - возвращает значение, является ли данный элемент (checkboxes, radio buttons) выбранным; • string TagName { get; } - возвращает имя тега элемента; • string Text { get; } - возвращает innerText элемента (без пробелов); • System.Drawing.Size Size { get; } - вовращает размеры элемента; • void Clear() - очистка содержимого текстового элемента.
  • 34. WebDriver Выпадающие списки. Элементы множественного выбора. В WebDriver есть специальный класс SelectElement, который предназначен для упрощения работы с HTML select элементами. Для того, чтобы воспользоваться всеми прелестями данного класса нужно подключить пространство имен OpenQA.Selenium.Support.UI. Данный класс сожержит следующие методы: • public void DeselectAll() - очистить все записи. Использовать только для элементов множественного выбора (multiple selections); • public void DeselectByIndex(int index) - деактивировать опцию, используя индекс элемента; • public void DeselectByText(string text) - деактивировать опцию, используя видимый текст элемента; • public void DeselectByValue(string value) - деактивировать опцию, по значению элемента;
  • 35. WebDriver • public void SelectByIndex(int index) - активировать опцию, используя индекс элемента; • public void SelectByText(string text) - активировать опцию, используя видимый текст элемента; • public void SelectByValue(string value) - активировать опцию, по значению элемента; • public System.Collections.Generic.IList AllSelectedOptions { get; } - возвращает все выбранные опции в пределах текущего элемента; • public bool IsMultiple { get; } - возвращает значения, является ли данный элемент множественного выбора; • public System.Collections.Generic.IList Options { get; } - возвращает список опций для выбранного элемента; • public OpenQA.Selenium.IWebElement SelectedOption { get;} - возвращает значение текущего элемента.
  • 36. WebDriver IWebElement element = driver.FindElement(By.Id("submit")); SelectElement select = new SelectElement(driver.FindElement(By.XPath("//select"))); select.DeselectAll(); select.SelectByIndex(1); select.SelectByText("TestText"); select.SelectByValue("Value2"); element.submit();
  • 37. Еще возможности • Можно работать с куками • Можно использовать профили для Firefox • Можно выполнять JS на страницах • Поддержка HTML5 • И многое другое
  • 38. Задание • Пишем тест только с WebDriver • Рефакторим тест - выделяем класс PageObject, описывающий страницу с которой работали • Рефакторим тест - выделяем хардкод данные в отдельные DataProvider`ы • Добавляем в тест работу с базой данной. чтобы из нее брались данные которые пригодятся в тестах (опционально) • Пишем следующий тест cразу по правилам
  • 39. Полезные статьи – Автоматизация • Test Automation Pyramid http://goo.gl/MPjLD • Continuous Testing: Building Quality into Your Projects http://goo.gl/LFQGR • Tester Developers, Developer Testers http://goo.gl/KvcYF • How to Catch Up on Test Automation http://goo.gl/dJRQg
  • 40. Полезные статьи – Selenium WebDriver Статьи • Debugging Tips for Selenium Test Failures • Автоматизация тестирования HTML5-приложений на Ruby c помощью Selenium WebDriver • Functional Testing with Selenium WebDriver and Scala • Selenium Two Tutorial using C#/NUnit and InternetExplorerDriver • A guide to using the python bindings for Selenium/Webdriver
  • 41. Ребров Андрей • andrebrov@gmail.com • Twitter: andrebrov • Skype: rebrov.andrey • Блог: andrebrov.net