
Докучаев. Основы тестирования ПО - Лекция #3.pptx
- Количество слайдов: 84
Курс «Основы тестирования ПО» Лекция № 3 «Автоматизация тестирования» Докучаев Сергей / руководитель группы нефункционального тестирования/ Тензор, 2014
Что будет на этой лекции 1. Что такое автоматизация тестирования 2. Эффективность автоматизации 3. Фреймворки 4. Selenium 5. Паттерны 6. Пример с использованием ATF 7. Самостоятельное задание 2
Сначала про ошибки… Mariner-1 1962 При переводе формулы на перфокарту забыли тире, не протестировали 135 000 $ 3
Сначала про ошибки… Mars Climate Orbiter 1998 Разные команды использовали разные метрические системы. Не правильно провели интеграционное тестирование 327 600 000 $ 4
Литература Mark Fewster, Dorothy Graham «Software Test Automation» Элфрид Дастин, Джеф Решка, Джон Пол «Автоматизированное тестирование программного обеспечения» David Burns «Selenium 2 Testing Tools» 5
Терминология 6
По степени автоматизации • Мануальное • Автоматическое • Гибридное 7
Терминология Автоматизированное тестирование - это использование специального ПО (отличное от тестируемого), которое исполняет тесты и сравнивает фактическое поведение с ожидаемым 8
Терминология Автотесты - это программы, которые тестируют другие программы Да, такие программы то же нужно тестировать Тест = автотест в рамках данной лекции 9
Терминология Автоматизированное тестирование в основном функциональное, однако сама по себе автоматизация конечно применяется и в других областях QA: нагрузочное тестирование, тестирование безопасности, тестирование UI, etc. 10
Терминология AUT – Application Under Test 11
Зачем? Когда? 12
Когда нужно автоматизировать? Регрессионная спираль смерти 13
Когда нужно автоматизировать? 14
Когда нужно автоматизировать? 15
Когда нужно автоматизировать? ROI (от англ. Return of Investment) – показатель возврата инвестиций В реальности для каждой компании свои формулы У нас методика состоит из 20 различных метрик: • время на обучение • время на разработку каждого из тестов • компьютерные ресурсы • кол-во найденных ошибок / кол-во пропущенных • etc. 16
Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 17
Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 18
Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 19
Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 20
Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 21
Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 22
Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 23
Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 24
Подходы 25
Подходы Основные подходы к автотестированию ПО 1. Тестируем код – разнообразные юнит-тесты. x. Unit фреймворки (e. g. Nunit, JUnit), TDD 2. Тестируем API 3. Тестируем UI – предмет обсуждения на данной лекции 26
Подходы История развития автотестирования 1. capture/playback tools 2. Scripting 3. Data-driven testing 4. Keyword-based 27
Подходы Record / Playback 1. Тестировщик включает инструмент на запись. 2. Выполняет действия 3. Проигрывает действия сколь угодно много раз Примеры: Selenium IDE, рекордер в Test. Complete 28
Подходы Record / Playback Плюсы: • не нужно уметь кодить • быстрое создание автотестов Минусы: • не всегда запись корректно срабатывает • не масштабируется • невозможно поддерживать • нельзя использовать повторно существующий код 29
Подходы Scripting Разработчики пишут код полностью, т. е. идёт обычная разработка ПО. 30
Подходы Scripting Плюсы: • можно использовать повторно код • можно масштабировать • гибкость Минусы: • нужно уметь кодить • медленно создаются автотесты • тяжело поддерживать 31
Подходы Data Driven Логика пишется разработчиком, а данные тестировщиком. Каждая функциональность – отдельный скрипт Каждая набор данных – отдельный тест 32
Подходы Data Driven Плюсы: • Быстрая разработка • Повторно используется существующий код • Низкая стоимость поддержки Минусы: • Не для всех продуктов подходит 33
Подходы Table/Keyword Driven Действие Объект Открываем Данные «http: //online. sbis. ru» Ввод поисковое поле Кликаем кнопка «Найти» Проверяем_наличие_текста таблица с результатами «Иванов» 34
Подходы Table/Keyword Driven Плюсы: • Относительно легко поддерживать • Относительная гибкость • Не нужно ни уметь кодить ни знать инструментарий Минусы: • Сам фреймворк долго и сложно разрабатывать • Не всегда возможна стабильность • Сложно ускорять 35
Подходы Живой пример 36
Selenium 37
Selenium – это набор инструментов для кроссплатформенного тестирования веб-приложений Поддерживаются: Браузеры: IE, Safari, Opera, Firefox, Chrome, etc. Windows, Os X, Linux, Solaris, etc. Java, C#, PHP, Python, Ruby, etc. 38
Selenium Архитектура Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver IE Webdriver 39
Selenium Архитектура Selenium Interface Python Lib C# Lib PHP Lib Java Lib … Remote Webdriver Firefox Webdriver Chrome Webdriver IE Webdriver 40
Selenium Архитектура Selenium Interface JSON Ware Protocol Remote Webdriver Firefox Webdriver Chrome Webdriver IE Webdriver 41
Selenium Архитектура Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver Сервер или часть облака IE Webdriver 42
Selenium Архитектура Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver JS сниппеты + доп. механизмы IE Webdriver 43
ATF 44
Про ATF Фреймворк – каркас, на котором строится ПО Фреймворк в автотестировании инкапсулирует все механизмы, общие для всех тестов, оставляя последние максимально простыми 45
Про ATF – это фреймворк для разработки автотестов Для чего используется: 1. Интеграционные тесты платформы 2. Приёмочные тесты 3. Тесты производительности 4. В качестве обёртки для тестов безопасности и нагрузочных тестов 5. Для тестирования методов БЛ 46
Про ATF >20 месяцев >30 пользователей 5526 строк кода 47
Про ATF: >18 месяцев >20 пользователей 5526 строк кода Тесты 6033 теста 50000 проверок 100000 действий >600000 строк кода 48
Про ATF: >18 месяцев >20 пользователей 5526 строк кода Тесты: 4033 теста 34957 проверок 50304 действий 389388 строк кода За неделю >40000 запусков 0. 5 % надёжность 40 -50 уникальных ошибок 49
Про ATF Python Standard Library Браузер ATF Selenium 2. 0 Webdriver HTML/XML Page Object Тест 50
Про ATF Python Standard Library Браузер ATF Selenium 2. 0 Webdriver HTML/XML Page Object Тест 51
Про ATF Python Standard Library Браузер ATF Selenium 2. 0 Webdriver HTML/XML Page Object Тест 52
Про ATF Python Standard Library Браузер ATF Selenium 2. 0 Webdriver HTML/XML Page Object Тест 53
Про ATF Python Standard Library Браузер ATF Selenium 2. 0 Webdriver HTML/XML Page Object Тест 54
Про ATF config unittest email XMLTest. Runner helpers Region Element Page Button ATFSuite rpc Text. Field asserts logfactory reporter Browser matchers Table run_browser >15 классов run 55
Про ATF config unittest email XMLTest. Runner helpers Region Element Page Button ATFSuite rpc Text. Field asserts logfactory reporter Browser matchers Table run_browser >15 классов run 56
Про ATF config unittest email XMLTest. Runner helpers Region Element Page Button ATFSuite rpc Text. Field asserts logfactory reporter Browser matchers Table run_browser >15 классов run 57
Про ATF config unittest email XMLTest. Runner helpers Region Element Page Button ATFSuite rpc Text. Field asserts logfactory reporter Browser matchers Table run_browser >15 классов run 58
Про ATF config unittest email XMLTest. Runner helpers Region Element Page Button ATFSuite rpc Text. Field asserts logfactory reporter Browser matchers Table run_browser >15 классов run 59
Про ATF config unittest email XMLTest. Runner helpers Region Element Page Button ATFSuite rpc Text. Field asserts logfactory reporter Browser matchers Table run_browser >15 классов run 60
Про ATF config unittest email XMLTest. Runner helpers Region Element Page Button ATFSuite rpc Text. Field asserts logfactory reporter Browser matchers Table run_browser >15 классов run 61
Про ATF config unittest email XMLTest. Runner helpers Region Element Page Button ATFSuite rpc Text. Field asserts logfactory reporter Browser matchers Table run_browser >15 классов run 62
Про ATF config unittest email XMLTest. Runner helpers Region Element Page Button ATFSuite rpc Text. Field asserts logfactory reporter Browser matchers Table run_browser >15 классов run 63
Паттерны 64
Паттерны Шаблон проектирования или паттерн (англ. design pattern) в разработке программного обеспечения — повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста. Используются как общеупотребительные (Singleton, Proxy, DSL, …), так и специфичные для автотестирования паттерны. Рассмотрим последние 65
Page Object Pattern – подход в автоматизированном тестировании, при котором происходит моделирование отдельный страниц AUT в коде Модель страницы при этом состоит из: • элементов (экземпляры классов) • регионов (классы) – по факту те же страницы 66
Page Object Pattern 67
Page Object Pattern 68
Page Object Pattern 69
Page Object Pattern 70
Page Object Pattern Два основных способа указать элемент на странице для Selenium: 1. Css selector 2. Xpath локатор Пример:
Page Object Pattern Два основных способа указать элемент на странице для Selenium: 1. Css selector 2. Xpath локатор Пример:
Page Object Pattern Два основных способа указать элемент на странице для Selenium: 1. сss selector 2. xpath локатор Пример:
Page Object Pattern Где брать информацию: css selectors: http: //www. w 3 schools. com/cssref/css_selectors. asp xpath: https: //www. simple-talk. com/dotnet/. net-framework/xpath, -css, -dom-and-seleniumthe-rosetta-stone/ Как учить: 0. Устанавливаем firebug в firefox 1. Открываем страницу 2. Выбираем рандомный элемент 3. Наводим на него указатель firebug 4. Анализируем структуру DOM дерева 5. Составляем и тестируем локатор 74
Page Object Pattern 76
DDT – Data Driven Testing Тесты, управляемые данными. При данном подходе мы разделяем данные и логику теста. При этом мы итеративно проходимся по данным, прогоняя всю логику теста раз за разом. 77
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, msg, tmp_request) 78
BDD Тест «Поиск контрагента» Открываем страницу по адресу http: //online. sbis. ru Авторизовываемся с логином «Демо» и паролем «Демо» Вводим в поисковую строку строчку «Иванов» Нажимаем кнопку с текстом «Поиск» Проверяем, что в таблице с результатами есть строчка «Иванов» 79
BDD def открываем_страницу(адрес): pass def авторизовываемся(логин, пароль): pass class Page(): поисковая_строка: Text. Field(By. CSS_SELECTOR, "сюда ввести локатор", "сюда ввести отображаемое имя") кнопка_1: Button(By. TEXT, "Поиск", "сюда ввести отображаемое имя") таблица_с_результатами: Table(By. CSS_SELECTOR, "сюда ввести локатор", "сюда ввести отображаемое имя") def test_01(): открываем_страницу("http: //online. sbis. ru") авторизовываемся("Демо", "Демо") поисковая_строка. ввести_текст("Иванов") кнопка_1. кликаем() проверяем_что('Иванов', в(таблица_с_результатами)) 80
BDD Вкратце: 1. Model Driven Testing 2. Monkey Tester 3. Fuzzing / Crazy Bot 81
BDD Вкратце: 1. Model Driven Testing 2. Monkey Tester 3. Fuzzing / Crazy Bot 82
Вопросы есть? 83
Спасибо за внимание! Докучаев Сергей Валерьевич / sv. dokuchaev@tensor. ru (4852) 262 -000 (доб. 3435) sbis. ru Разработка СБИС