automation functional testing in agile projects

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

Upload: andrey-rebrov

Post on 29-Nov-2014

1.418 views

Category:

Technology


2 download

DESCRIPTION

Об автоматических тестах писал ещё Сам Кент Бек. Ну, а автоматические функциональные тесты — это вообще лакомый кусок для современных agile методик разработки ПО. Вместе с участниками кемпа мы узнаем, с какой стороны подходить к процессу автоматизации тестирования в целом. Кроме того, мы создадим проект автотестирования с использованием одного из самых популярных продуктов для тестирования веб-приложений — Selenium 2.

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