Top Banner
Automation Functional Testing Андрей Ребров Тренер по инженерным практикам
41

Automation Functional Testing in Agile Projects

Nov 29, 2014

Download

Technology

Andrey Rebrov

Об автоматических тестах писал ещё Сам Кент Бек. Ну, а автоматические функциональные тесты — это вообще лакомый кусок для современных agile методик разработки ПО. Вместе с участниками кемпа мы узнаем, с какой стороны подходить к процессу автоматизации тестирования в целом. Кроме того, мы создадим проект автотестирования с использованием одного из самых популярных продуктов для тестирования веб-приложений — Selenium 2.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Automation Functional Testing in Agile Projects

Automation Functional Testing

Андрей РебровТренер по инженерным практикам

Page 2: Automation Functional Testing in Agile Projects

Ребров Андрей

• ScrumTrek• Тренер инженерного

направления• Luxoft• Разработчик• Scrum Master

Page 3: Automation Functional Testing in Agile Projects

Зачем заниматься автотестами?• Ручное тестирование отнимает много времени• Ручное тестирование приводит к ошибкам• Автоматизация позволяет делать основную работу лучше• Автоматизированное регрессионное тестирование служит «ремнем

безопасности»• Автоматизированные тесты дают возможность получать результаты

раньше• Тесты – это отличное подспорье при разработке как пример• Тесты являются документацией• Автоматизация может дать хорошее ROI

Page 4: Automation Functional Testing in Agile Projects

Проблемы автоматизации• Взаимоотношения с программистами• “Hump of Pain” • Начальный вклад• Код, который всегда меняется• «Код по наследству» (Legacy)• Страх• Старые привычки

Page 5: Automation Functional Testing in Agile Projects

Взаимоотношения с программистами

Page 6: Automation Functional Testing in Agile Projects

The “Hump of Pain”

Page 7: Automation Functional Testing in Agile Projects

Начальные вложения

Page 8: Automation Functional Testing in Agile Projects

Код, который постоянно меняется

Page 9: Automation Functional Testing in Agile Projects

Legacy

Page 10: Automation Functional Testing in Agile Projects

Страх

Page 11: Automation Functional Testing in Agile Projects

Старые привычки

Page 12: Automation Functional Testing in Agile Projects

Как преодолевать препятствия

• Участвует вся команда• TDD• Нужен лидер• Надо менять культуру / отношение к работе

Page 13: Automation Functional Testing in Agile Projects

СТРАТЕГИЯ АВТОМАТИЗАЦИИ

Page 14: Automation Functional Testing in Agile Projects

Где начать

Page 15: Automation Functional Testing in Agile Projects

Стратегия автоматизации

http://goo.gl/MPjLD

Page 16: Automation Functional Testing in Agile Projects

Автоматизировать или нет

Sprin

t 1

Sprin

t 2

Sprin

t 3

Sprin

t 4

Sprin

t 5

Sprin

t 6

Sprin

t 7

Sprin

t 8

Sprin

t 9

Sprin

t 10

Sprin

t 11

Sprin

t 12

Sprin

t 13

Sprin

t 14

РучноеАвтоматизированноеСлабо автоматизированно

Page 17: Automation Functional Testing in Agile Projects

Что стоит автоматизировать

• Continuous Integration, Builds и Deployment• API или Web Service Testing• Тесты «до» GUI• Тестрование GUI• Load Tests• Сравниение• Повторяющие задачи• Генерация данных и настройка

Page 18: Automation Functional Testing in Agile Projects

Что не нужно автоматизировать

• Тестирование usability• Исследовательское тестирование

(Exploratory Testing)• Тесты, которые никогда не упадут• Одноразовые тесты

Page 19: Automation Functional Testing in Agile Projects

С чего начнем?

Page 20: Automation Functional Testing in Agile Projects

Внедрение автоматизации тестирования

• Внедрение невозможно при отсутствии

процесса тестирования

• Надо учесть затраты и выгоды (ROI)

• Выбрать инструмент для автоматизации

• Что должно быть автоматизировано (ROI)

• Определить правила и гайдлайны

Page 21: Automation Functional Testing in Agile Projects

Инструменты

Page 22: Automation Functional Testing in Agile Projects

Как выбирать инструменты

• Позволяют начать писать тесты сразу же• Позволяют отделить логику тестов от реализации• Позволяют и подталкивают к использованию известных

практик разработки• Позволяют использовать существующие языки

программирования и IDE• Имеют активное сообщество

Page 23: Automation Functional Testing in Agile Projects

Принципы

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

Page 24: Automation Functional Testing in Agile Projects

Принципы при написании кода

• Работа в паре• Рефакторинг• Простой дизайн• Модульность• ООП• Независимость

Page 25: Automation Functional Testing in Agile Projects

Структура Selenium 2

Page 26: Automation Functional Testing in Agile Projects

Selenium WebDriver

Общая суть работы с WebDriver может быть описана так:• реализуется код, использующий какую-либо

имплементацию WebDriver. Данный код выполняет какие-либо действия с веб-страницей и сравнивает результат с эталонным:

• WebDriver транслирует команды в запущенный браузер (при использовании «браузерной» реализации) и сообщает результаты «обратно в код»

Page 27: Automation Functional Testing in Agile Projects

Selenium WebDriver

Page 28: Automation Functional Testing in Agile Projects

Локаторы и поиск элементов

• 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")

Page 29: Automation Functional Testing in Agile Projects

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().

Page 30: Automation Functional Testing in Agile Projects

Работа с окошками

• void Close() - закрыть текущее окно. Закрывает браузер, если нету больше открытых окон;

• void Dispose() - Member of System.IDisposable. С помощью данного метода можно удалять, освобождать или сбрасывать неуправляемые ресурсы;

• Manage() - позволяет изменять настройки драйвера;• void Quit() выход из драйвера, закрытие всех окон связанных с ним;

Page 31: Automation Functional Testing in Agile Projects

Работа с 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() – клик по чекбоксу

Page 32: Automation Functional Testing in Agile Projects

Работа с 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() - отправка формы на сервер;

Page 33: Automation Functional Testing in Agile Projects

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() - очистка содержимого текстового элемента.

Page 34: Automation Functional Testing in Agile Projects

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) - деактивировать опцию, по

значению элемента;

Page 35: Automation Functional Testing in Agile Projects

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;} - возвращает значение текущего элемента.

Page 36: Automation Functional Testing in Agile Projects

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();

Page 37: Automation Functional Testing in Agile Projects

Еще возможности

• Можно работать с куками• Можно использовать профили для Firefox• Можно выполнять JS на страницах• Поддержка HTML5• И многое другое

Page 38: Automation Functional Testing in Agile Projects

Задание

• Пишем тест только с WebDriver• Рефакторим тест - выделяем класс PageObject,

описывающий страницу с которой работали• Рефакторим тест - выделяем хардкод данные в

отдельные DataProvider`ы• Добавляем в тест работу с базой данной.

чтобы из нее брались данные которые пригодятся в тестах (опционально)

• Пишем следующий тест cразу по правилам

Page 39: Automation Functional Testing in Agile Projects

Полезные статьи – Автоматизация• 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

Page 40: Automation Functional Testing in Agile Projects

Полезные статьи – 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

Page 41: Automation Functional Testing in Agile Projects

Ребров Андрей

[email protected] • Twitter: andrebrov• Skype: rebrov.andrey• Блог: andrebrov.net