Курс «Основы тестирования ПО» Лекция № 3 «Автоматизация
10-dokuchaev._osnovy_testirovaniya_po_-_lekciya_#3.pptx
- Количество слайдов: 84
Курс «Основы тестирования ПО» Лекция № 3 «Автоматизация тестирования» Докучаев Сергей / руководитель группы нефункционального тестирования/ Тензор, 2014
2 Что будет на этой лекции Что такое автоматизация тестирования Эффективность автоматизации Фреймворки Selenium Паттерны Пример с использованием ATF Самостоятельное задание
3 Сначала про ошибки… Mariner-1 1962 При переводе формулы на перфокарту забыли тире, не протестировали 135 000 000 $
4 Сначала про ошибки… Mars Climate Orbiter 1998 Разные команды использовали разные метрические системы. Не правильно провели интеграционное тестирование 327 600 000 $
5 Литература Mark Fewster, Dorothy Graham «Software Test Automation» Элфрид Дастин, Джеф Решка, Джон Пол «Автоматизированное тестирование программного обеспечения» David Burns «Selenium 2 Testing Tools»
6 Терминология
7 По степени автоматизации Мануальное Автоматическое Гибридное
8 Терминология Автоматизированное тестирование - это использование специального ПО (отличное от тестируемого), которое исполняет тесты и сравнивает фактическое поведение с ожидаемым
9 Терминология Автотесты - это программы, которые тестируют другие программы Да, такие программы то же нужно тестировать Тест = автотест в рамках данной лекции
10 Терминология Автоматизированное тестирование в основном функциональное, однако сама по себе автоматизация конечно применяется и в других областях QA: нагрузочное тестирование, тестирование безопасности, тестирование UI, etc.
11 Терминология AUT – Application Under Test
12 Зачем? Когда?
13 Когда нужно автоматизировать? Регрессионная спираль смерти
14 Когда нужно автоматизировать?
16 Когда нужно автоматизировать? ROI (от англ. Return of Investment) – показатель возврата инвестиций В реальности для каждой компании свои формулы У нас методика состоит из 20 различных метрик: время на обучение время на разработку каждого из тестов компьютерные ресурсы кол-во найденных ошибок / кол-во пропущенных etc.
17 Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации
18 Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации ROI низкий Отсутствует поставленный процесс тестирования Отсутствует стабильный функционал Завышенные ожидания Отсутствие навыков в кодинге Не используется
19 Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации ROI низкий Отсутствует поставленный процесс тестирования Отсутствует стабильный функционал Завышенные ожидания Отсутствие навыков в кодинге Не используется
20 Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации ROI низкий Отсутствует поставленный процесс тестирования Отсутствует стабильный функционал Завышенные ожидания Отсутствие навыков в кодинге Не используется
21 Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации ROI низкий Отсутствует поставленный процесс тестирования Отсутствует стабильный функционал Завышенные ожидания Отсутствие навыков в кодинге Не используется
22 Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации ROI низкий Отсутствует поставленный процесс тестирования Отсутствует стабильный функционал Завышенные ожидания Отсутствие навыков в кодинге Не используется
23 Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации ROI низкий Отсутствует поставленный процесс тестирования Отсутствует стабильный функционал Завышенные ожидания Отсутствие навыков в кодинге Не используется
24 Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации ROI низкий Отсутствует поставленный процесс тестирования Отсутствует стабильный функционал Завышенные ожидания Отсутствие навыков в кодинге Не используется
25 Подходы
26 Подходы Основные подходы к автотестированию ПО Тестируем код – разнообразные юнит-тесты. xUnit фреймворки (e.g. Nunit, JUnit), TDD Тестируем API Тестируем UI – предмет обсуждения на данной лекции
27 Подходы История развития автотестирования capture/playback tools Scripting Data-driven testing Keyword-based
28 Подходы Record / Playback Тестировщик включает инструмент на запись. Выполняет действия Проигрывает действия сколь угодно много раз Примеры: Selenium IDE, рекордер в TestComplete
29 Подходы Record / Playback Плюсы: не нужно уметь кодить быстрое создание автотестов Минусы: не всегда запись корректно срабатывает не масштабируется невозможно поддерживать нельзя использовать повторно существующий код
30 Подходы Scripting Разработчики пишут код полностью, т.е. идёт обычная разработка ПО.
31 Подходы Scripting Плюсы: можно использовать повторно код можно масштабировать гибкость Минусы: нужно уметь кодить медленно создаются автотесты тяжело поддерживать
32 Подходы Data Driven Логика пишется разработчиком, а данные тестировщиком. Каждая функциональность – отдельный скрипт Каждая набор данных – отдельный тест
33 Подходы Data Driven Плюсы: Быстрая разработка Повторно используется существующий код Низкая стоимость поддержки Минусы: Не для всех продуктов подходит
34 Подходы Table/Keyword Driven
35 Подходы Table/Keyword Driven Плюсы: Относительно легко поддерживать Относительная гибкость Не нужно ни уметь кодить ни знать инструментарий Минусы: Сам фреймворк долго и сложно разрабатывать Не всегда возможна стабильность Сложно ускорять
36 Подходы Живой пример
37 Selenium
38 Selenium Selenium – это набор инструментов для кроссплатформенного тестирования веб-приложений Поддерживаются: Браузеры: IE, Safari, Opera, Firefox, Chrome, etc. Windows, Os X, Linux, Solaris, etc. Java, C#, PHP, Python, Ruby, etc.
39 Selenium Архитектура Selenium Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver IE Webdriver
40 Selenium Архитектура Selenium Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver IE Webdriver Python Lib C# Lib PHP Lib Java Lib …
41 Selenium Архитектура Selenium Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver IE Webdriver JSON Ware Protocol
42 Selenium Архитектура Selenium Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver IE Webdriver Сервер или часть облака
43 Selenium Архитектура Selenium Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver IE Webdriver JS сниппеты + доп. механизмы
44 ATF
45 Про ATF Фреймворк – каркас, на котором строится ПО Фреймворк в автотестировании инкапсулирует все механизмы, общие для всех тестов, оставляя последние максимально простыми
46 Про ATF ATF – это фреймворк для разработки автотестов Для чего используется: Интеграционные тесты платформы Приёмочные тесты Тесты производительности В качестве обёртки для тестов безопасности и нагрузочных тестов Для тестирования методов БЛ
47 Про ATF ATF >20 месяцев >30 пользователей 5526 строк кода
48 Про ATF ATF: >18 месяцев >20 пользователей 5526 строк кода Тесты 6033 теста 50000 проверок 100000 действий >600000 строк кода
49 Про ATF ATF: >18 месяцев >20 пользователей 5526 строк кода Тесты: 4033 теста 34957 проверок 50304 действий 389388 строк кода За неделю >40000 запусков 0.5 % надёжность 40-50 уникальных ошибок
50 Про ATF Тест Page Object Selenium 2.0 Webdriver Браузер HTML/XML ATF Python Standard Library
51 Про ATF Тест Page Object Selenium 2.0 Webdriver Браузер HTML/XML ATF Python Standard Library
52 Про ATF Тест Page Object Selenium 2.0 Webdriver Браузер HTML/XML ATF Python Standard Library
53 Про ATF Тест Page Object Selenium 2.0 Webdriver Браузер HTML/XML ATF Python Standard Library
54 Про ATF Тест Page Object Selenium 2.0 Webdriver Браузер HTML/XML ATF Python Standard Library
55 Про ATF Region Page Element Button TextField Table >15 классов Browser ATFSuite XMLTestRunner asserts matchers unittest config helpers email logfactory reporter rpc run_browser run
56 Про ATF Region Page Element Button TextField Table >15 классов Browser ATFSuite XMLTestRunner asserts matchers unittest config helpers email logfactory reporter rpc run_browser run
57 Про ATF Region Page Element Button TextField Table >15 классов Browser ATFSuite XMLTestRunner asserts matchers unittest config helpers email logfactory reporter rpc run_browser run
58 Про ATF Region Page Element Button TextField Table >15 классов Browser ATFSuite XMLTestRunner asserts matchers unittest config helpers email logfactory reporter rpc run_browser run
59 Про ATF Region Page Element Button TextField Table >15 классов Browser ATFSuite XMLTestRunner asserts matchers unittest config helpers email logfactory reporter rpc run_browser run
60 Про ATF Region Page Element Button TextField Table >15 классов Browser ATFSuite XMLTestRunner asserts matchers unittest config helpers email logfactory reporter rpc run_browser run
61 Про ATF Region Page Element Button TextField Table >15 классов Browser ATFSuite XMLTestRunner asserts matchers unittest config helpers email logfactory reporter rpc run_browser run
62 Про ATF Region Page Element Button TextField Table >15 классов Browser ATFSuite XMLTestRunner asserts matchers unittest config helpers email logfactory reporter rpc run_browser run
63 Про ATF Region Page Element Button TextField Table >15 классов Browser ATFSuite XMLTestRunner asserts matchers unittest config helpers email logfactory reporter rpc run_browser run
64 Паттерны
65 Паттерны Шаблон проектирования или паттерн (англ. design pattern) в разработке программного обеспечения — повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста. Используются как общеупотребительные (Singleton, Proxy, DSL, …), так и специфичные для автотестирования паттерны. Рассмотрим последние
66 Page Object Pattern Page Object Pattern – подход в автоматизированном тестировании, при котором происходит моделирование отдельный страниц AUT в коде Модель страницы при этом состоит из: элементов (экземпляры классов) регионов (классы) – по факту те же страницы
67 Page Object Pattern
68 Page Object Pattern
69 Page Object Pattern
70 Page Object Pattern
71 Page Object Pattern Два основных способа указать элемент на странице для Selenium: Css selector Xpath локатор Пример:
72 Page Object Pattern Два основных способа указать элемент на странице для Selenium: Css selector Xpath локатор Пример:
73 Page Object Pattern Два основных способа указать элемент на странице для Selenium: сss selector xpath локатор Пример:
css selector: div[name=‘test123’] xpath: //div[@name=‘test123’]74 Page Object Pattern Где брать информацию: css selectors: http://www.w3schools.com/cssref/css_selectors.asp xpath: https://www.simple-talk.com/dotnet/.net-framework/xpath,-css,-dom-and-selenium-the-rosetta-stone/ Как учить: 0. Устанавливаем firebug в firefox 1. Открываем страницу 2. Выбираем рандомный элемент 3. Наводим на него указатель firebug 4. Анализируем структуру DOM дерева 5. Составляем и тестируем локатор
75 Page Object Pattern class Contacts(atf.Page): """Класс, моделирующий основную страницу раздела Профиль""" workplace_lnk = atf.Link( By.CSS_SELECTOR, "[name='ЧастноеЛицоРасширение.РабочееМесто'] .ws-editAtPlace-inner", "Рабочее место") workplace_inp = atf.TextField( By.CSS_SELECTOR, "input[id='fld-ЧастноеЛицоРасширение.РабочееМесто']", "Рабочее место") work_phone_lnk = atf.Link( By.CSS_SELECTOR, "[name='ЧастноеЛицо.Телефон'] .ws-editAtPlace-inner", "Рабочий телефон") work_phone_inp = atf.TextField( By.CSS_SELECTOR, "input[id='fld-ЧастноеЛицо.Телефон']", "Рабочий телефон") home_phone_lnk = atf.Link( By.CSS_SELECTOR, "[sbisname='ОБР_ЧастноеЛицо.ДомашнийТелефон'] .ws-editAtPlace-inner", "Домашний телефон") home_phone_inp = atf.TextField( By.CSS_SELECTOR, "input[id='fld-ЧастноеЛицо.ДомашнийТелефон']", "Домашний телефон") mobile_phone_lnk = atf.Link( By.CSS_SELECTOR, "[sbisname='ОБР_ЧастноеЛицо.МобильныйТелефон'] .ws-editAtPlace-inner", "Мобильный телефон") mobile_phone_inp = atf.TextField( By.CSS_SELECTOR, "input[id='fld-ЧастноеЛицо.МобильныйТелефон']", "Мобильный телефон") email_lnk = atf.Link( By.CSS_SELECTOR,"[name='ЧастноеЛицо.email'] .ws-editAtPlace-inner", "email") email_inp = atf.TextField( By.CSS_SELECTOR,"[id='fld-ЧастноеЛицо.email']", "email") icq_lnk = atf.Link( By.CSS_SELECTOR,"[name='ЧастноеЛицоРасширение.ICQ'] .ws-editAtPlace-inner", "ICQ") icq_inp = atf.TextField( By.CSS_SELECTOR, "input[id='fld-ЧастноеЛицоРасширение.ICQ']", "ICQ") skype_lnk = atf.Link( By.CSS_SELECTOR,"[name='ЧастноеЛицоРасширение.Skype'] .ws-editAtPlace-inner", "Skype") skype_inp = atf.TextField( By.CSS_SELECTOR, "input[id='fld-ЧастноеЛицоРасширение.Skype']", "Skype")
76 Page Object Pattern
77 DDT DDT – Data Driven Testing Тесты, управляемые данными. При данном подходе мы разделяем данные и логику теста. При этом мы итеративно проходимся по данным, прогоняя всю логику теста раз за разом.
78 DDT @ddt(file=Config().TEST_DATA) def test_01(self, msg, file_request, file_response, code=200, user_agent='', comment=''): log('Запускаем тест %s' % msg) log('Считываем из файлов запросы', "[d]") tmp_response = read_file(file_response) tmp_request = read_file(file_request) tmp_response = json.loads(tmp_response) log('Посылаем запрос', "[d]") response = self.client.send_json(test_json=tmp_request, code=int(code), header=user_agent) assert_json(tmp_response, response, msg, tmp_request)
79 BDD Тест «Поиск контрагента» Открываем страницу по адресу http://online.sbis.ru Авторизовываемся с логином «Демо» и паролем «Демо» Вводим в поисковую строку строчку «Иванов» Нажимаем кнопку с текстом «Поиск» Проверяем, что в таблице с результатами есть строчка «Иванов»
80 BDD def открываем_страницу(адрес): pass def авторизовываемся(логин, пароль): pass class Page(): поисковая_строка: TextField(By.CSS_SELECTOR, "сюда ввести локатор", "сюда ввести отображаемое имя") кнопка_1: Button(By.TEXT, "Поиск", "сюда ввести отображаемое имя") таблица_с_результатами: Table(By.CSS_SELECTOR, "сюда ввести локатор", "сюда ввести отображаемое имя") def test_01(): открываем_страницу("http://online.sbis.ru") авторизовываемся("Демо", "Демо") поисковая_строка.ввести_текст("Иванов") кнопка_1.кликаем() проверяем_что('Иванов', в(таблица_с_результатами))
81 BDD Вкратце: Model Driven Testing Monkey Tester Fuzzing / Crazy Bot
82 BDD Вкратце: Model Driven Testing Monkey Tester Fuzzing / Crazy Bot
83 Вопросы есть?
Спасибо за внимание! Разработка СБИС Докучаев Сергей Валерьевич / [email protected] (4852) 262-000 (доб. 3435) sbis.ru