Your SlideShare is downloading. ×
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Automation Functional Testing in Agile Projects

1,114

Published on

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

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,114
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Automation Functional TestingАндрей РебровТренер по инженерным практикам
  • 2. Ребров Андрей • ScrumTrek • Тренер инженерного направления • Luxoft • Разработчик • Scrum Master
  • 3. Зачем заниматься автотестами?• Ручное тестирование отнимает много времени• Ручное тестирование приводит к ошибкам• Автоматизация позволяет делать основную работу лучше• Автоматизированное регрессионное тестирование служит «ремнем безопасности»• Автоматизированные тесты дают возможность получать результаты раньше• Тесты – это отличное подспорье при разработке как пример• Тесты являются документацией• Автоматизация может дать хорошее ROI
  • 4. Проблемы автоматизации• Взаимоотношения с программистами• “Hump of Pain”• Начальный вклад• Код, который всегда меняется• «Код по наследству» (Legacy)• Страх• Старые привычки
  • 5. Взаимоотношения с программистами
  • 6. The “Hump of Pain”
  • 7. Начальные вложения
  • 8. Код, который постоянно меняется
  • 9. Legacy
  • 10. Страх
  • 11. Старые привычки
  • 12. Как преодолевать препятствия• Участвует вся команда• TDD• Нужен лидер• Надо менять культуру / отношение к работе
  • 13. СТРАТЕГИЯ АВТОМАТИЗАЦИИ
  • 14. Где начать
  • 15. Стратегия автоматизацииhttp://goo.gl/MPjLD
  • 16. Sprint 1 Sprint 2 Sprint 3 Sprint 4 Sprint 5 Sprint 6 Sprint 7 Sprint 8 Sprint 9Sprint 10Sprint 11Sprint 12Sprint 13Sprint 14 Автоматизировать или нет Слабо Ручное автоматизированно Автоматизированное
  • 17. Что стоит автоматизировать• Continuous Integration, Builds и Deployment• API или Web Service Testing• Тесты «до» GUI• Тестрование GUI• Load Tests• Сравниение• Повторяющие задачи• Генерация данных и настройка
  • 18. Что не нужно автоматизировать• Тестирование usability• Исследовательское тестирование (Exploratory Testing)• Тесты, которые никогда не упадут• Одноразовые тесты
  • 19. С чего начнем?
  • 20. Внедрение автоматизациитестирования• Внедрение невозможно при отсутствии процесса тестирования• Надо учесть затраты и выгоды (ROI)• Выбрать инструмент для автоматизации• Что должно быть автоматизировано (ROI)• Определить правила и гайдлайны
  • 21. Инструменты
  • 22. Как выбирать инструменты• Позволяют начать писать тесты сразу же• Позволяют отделить логику тестов от реализации• Позволяют и подталкивают к использованию известных практик разработки• Позволяют использовать существующие языки программирования и IDE• Имеют активное сообщество
  • 23. Принципы• Keep It Simple (“KISS”)• Чаще запускать ради того, чтобы чаще иметь результат• Вовлечена вся команда• Нужно время, чтобы сделать правиль• Больше практики, меньше теоретики
  • 24. Принципы при написании кода• Работа в паре• Рефакторинг• Простой дизайн• Модульность• ООП• Независимость
  • 25. Структура Selenium 2
  • 26. Selenium WebDriverОбщая суть работы с WebDriver может быть описанатак:• реализуется код, использующий какую-либо имплементацию WebDriver. Данный код выполняет какие-либо действия с веб-страницей и сравнивает результат с эталонным:• WebDriver транслирует команды в запущенный браузер (при использовании «браузерной» реализации) и сообщает результаты «обратно в код»
  • 27. Selenium 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. WebDriverIWebElement element = driver.FindElement(By.Id("submit"));SelectElement select = newSelectElement(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

×