Скачать презентацию Курс Основы тестирования ПО Лекция 3 Автоматизация Скачать презентацию Курс Основы тестирования ПО Лекция 3 Автоматизация

Докучаев. Основы тестирования ПО - Лекция #3.pptx

  • Количество слайдов: 84

Курс «Основы тестирования ПО» Лекция № 3 «Автоматизация тестирования» Докучаев Сергей / руководитель группы Курс «Основы тестирования ПО» Лекция № 3 «Автоматизация тестирования» Докучаев Сергей / руководитель группы нефункционального тестирования/ Тензор, 2014

Что будет на этой лекции 1. Что такое автоматизация тестирования 2. Эффективность автоматизации 3. Что будет на этой лекции 1. Что такое автоматизация тестирования 2. Эффективность автоматизации 3. Фреймворки 4. Selenium 5. Паттерны 6. Пример с использованием ATF 7. Самостоятельное задание 2

Сначала про ошибки… Mariner-1 1962 При переводе формулы на перфокарту забыли тире, не протестировали Сначала про ошибки… Mariner-1 1962 При переводе формулы на перфокарту забыли тире, не протестировали 135 000 $ 3

Сначала про ошибки… Mars Climate Orbiter 1998 Разные команды использовали разные метрические системы. Не Сначала про ошибки… Mars Climate Orbiter 1998 Разные команды использовали разные метрические системы. Не правильно провели интеграционное тестирование 327 600 000 $ 4

Литература Mark Fewster, Dorothy Graham «Software Test Automation» Элфрид Дастин, Джеф Решка, Джон Пол Литература Mark Fewster, Dorothy Graham «Software Test Automation» Элфрид Дастин, Джеф Решка, Джон Пол «Автоматизированное тестирование программного обеспечения» David Burns «Selenium 2 Testing Tools» 5

Терминология 6 Терминология 6

По степени автоматизации • Мануальное • Автоматическое • Гибридное 7 По степени автоматизации • Мануальное • Автоматическое • Гибридное 7

Терминология Автоматизированное тестирование - это использование специального ПО (отличное от тестируемого), которое исполняет тесты Терминология Автоматизированное тестирование - это использование специального ПО (отличное от тестируемого), которое исполняет тесты и сравнивает фактическое поведение с ожидаемым 8

Терминология Автотесты - это программы, которые тестируют другие программы Да, такие программы то же Терминология Автотесты - это программы, которые тестируют другие программы Да, такие программы то же нужно тестировать Тест = автотест в рамках данной лекции 9

Терминология Автоматизированное тестирование в основном функциональное, однако сама по себе автоматизация конечно применяется и Терминология Автоматизированное тестирование в основном функциональное, однако сама по себе автоматизация конечно применяется и в других областях QA: нагрузочное тестирование, тестирование безопасности, тестирование UI, etc. 10

Терминология AUT – Application Under Test 11 Терминология AUT – Application Under Test 11

Зачем? Когда? 12 Зачем? Когда? 12

Когда нужно автоматизировать? Регрессионная спираль смерти 13 Когда нужно автоматизировать? Регрессионная спираль смерти 13

Когда нужно автоматизировать? 14 Когда нужно автоматизировать? 14

Когда нужно автоматизировать? 15 Когда нужно автоматизировать? 15

Когда нужно автоматизировать? ROI (от англ. Return of Investment) – показатель возврата инвестиций В Когда нужно автоматизировать? ROI (от англ. Return of Investment) – показатель возврата инвестиций В реальности для каждой компании свои формулы У нас методика состоит из 20 различных метрик: • время на обучение • время на разработку каждого из тестов • компьютерные ресурсы • кол-во найденных ошибок / кол-во пропущенных • etc. 16

Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 17 Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 17

Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 18

Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 19

Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 20

Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 21

Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 22

Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 23

Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный Когда нужно автоматизировать? Потенциальные грабли на пути автоматизации 1. ROI низкий 2. Отсутствует поставленный процесс тестирования 3. Отсутствует стабильный функционал 4. Завышенные ожидания 5. Отсутствие навыков в кодинге 6. Не используется 24

Подходы 25 Подходы 25

Подходы Основные подходы к автотестированию ПО 1. Тестируем код – разнообразные юнит-тесты. x. Unit Подходы Основные подходы к автотестированию ПО 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 Подходы История развития автотестирования 1. capture/playback tools 2. Scripting 3. Data-driven testing 4. Keyword-based 27

Подходы Record / Playback 1. Тестировщик включает инструмент на запись. 2. Выполняет действия 3. Подходы Record / Playback 1. Тестировщик включает инструмент на запись. 2. Выполняет действия 3. Проигрывает действия сколь угодно много раз Примеры: Selenium IDE, рекордер в Test. Complete 28

Подходы Record / Playback Плюсы: • не нужно уметь кодить • быстрое создание автотестов Подходы Record / Playback Плюсы: • не нужно уметь кодить • быстрое создание автотестов Минусы: • не всегда запись корректно срабатывает • не масштабируется • невозможно поддерживать • нельзя использовать повторно существующий код 29

Подходы Scripting Разработчики пишут код полностью, т. е. идёт обычная разработка ПО. 30 Подходы Scripting Разработчики пишут код полностью, т. е. идёт обычная разработка ПО. 30

Подходы Scripting Плюсы: • можно использовать повторно код • можно масштабировать • гибкость Минусы: Подходы Scripting Плюсы: • можно использовать повторно код • можно масштабировать • гибкость Минусы: • нужно уметь кодить • медленно создаются автотесты • тяжело поддерживать 31

Подходы Data Driven Логика пишется разработчиком, а данные тестировщиком. Каждая функциональность – отдельный скрипт Подходы Data Driven Логика пишется разработчиком, а данные тестировщиком. Каждая функциональность – отдельный скрипт Каждая набор данных – отдельный тест 32

Подходы Data Driven Плюсы: • Быстрая разработка • Повторно используется существующий код • Низкая Подходы Data Driven Плюсы: • Быстрая разработка • Повторно используется существующий код • Низкая стоимость поддержки Минусы: • Не для всех продуктов подходит 33

Подходы Table/Keyword Driven Действие Объект Открываем Данные «http: //online. sbis. ru» Ввод поисковое поле Подходы Table/Keyword Driven Действие Объект Открываем Данные «http: //online. sbis. ru» Ввод поисковое поле Кликаем кнопка «Найти» Проверяем_наличие_текста таблица с результатами «Иванов» 34

Подходы Table/Keyword Driven Плюсы: • Относительно легко поддерживать • Относительная гибкость • Не нужно Подходы Table/Keyword Driven Плюсы: • Относительно легко поддерживать • Относительная гибкость • Не нужно ни уметь кодить ни знать инструментарий Минусы: • Сам фреймворк долго и сложно разрабатывать • Не всегда возможна стабильность • Сложно ускорять 35

Подходы Живой пример 36 Подходы Живой пример 36

Selenium 37 Selenium 37

Selenium – это набор инструментов для кроссплатформенного тестирования веб-приложений Поддерживаются: Браузеры: IE, Safari, Opera, 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 Remote Webdriver Firefox Webdriver Chrome Webdriver IE Webdriver 39

Selenium Архитектура Selenium Interface Python Lib C# Lib PHP Lib Java Lib … Remote 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 Selenium Архитектура Selenium Interface JSON Ware Protocol Remote Webdriver Firefox Webdriver Chrome Webdriver IE Webdriver 41

Selenium Архитектура Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver Сервер или часть облака Selenium Архитектура Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver Сервер или часть облака IE Webdriver 42

Selenium Архитектура Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver JS сниппеты + доп. Selenium Архитектура Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver JS сниппеты + доп. механизмы IE Webdriver 43

ATF 44 ATF 44

Про ATF Фреймворк – каркас, на котором строится ПО Фреймворк в автотестировании инкапсулирует все Про ATF Фреймворк – каркас, на котором строится ПО Фреймворк в автотестировании инкапсулирует все механизмы, общие для всех тестов, оставляя последние максимально простыми 45

Про ATF – это фреймворк для разработки автотестов Для чего используется: 1. Интеграционные тесты Про ATF – это фреймворк для разработки автотестов Для чего используется: 1. Интеграционные тесты платформы 2. Приёмочные тесты 3. Тесты производительности 4. В качестве обёртки для тестов безопасности и нагрузочных тестов 5. Для тестирования методов БЛ 46

Про ATF >20 месяцев >30 пользователей 5526 строк кода 47 Про ATF >20 месяцев >30 пользователей 5526 строк кода 47

Про ATF: >18 месяцев >20 пользователей 5526 строк кода Тесты 6033 теста 50000 проверок Про ATF: >18 месяцев >20 пользователей 5526 строк кода Тесты 6033 теста 50000 проверок 100000 действий >600000 строк кода 48

Про ATF: >18 месяцев >20 пользователей 5526 строк кода Тесты: 4033 теста 34957 проверок Про 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 Про 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 Про 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 Про 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 Про 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 Про 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 Про 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 Про 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 Про 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 Про 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 Про 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 Про 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 Про 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 Про 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 Про 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 Паттерны 64

Паттерны Шаблон проектирования или паттерн (англ. design pattern) в разработке программного обеспечения — повторимая Паттерны Шаблон проектирования или паттерн (англ. design pattern) в разработке программного обеспечения — повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста. Используются как общеупотребительные (Singleton, Proxy, DSL, …), так и специфичные для автотестирования паттерны. Рассмотрим последние 65

Page Object Pattern – подход в автоматизированном тестировании, при котором происходит моделирование отдельный страниц Page Object Pattern – подход в автоматизированном тестировании, при котором происходит моделирование отдельный страниц AUT в коде Модель страницы при этом состоит из: • элементов (экземпляры классов) • регионов (классы) – по факту те же страницы 66

Page Object Pattern 67 Page Object Pattern 67

Page Object Pattern 68 Page Object Pattern 68

Page Object Pattern 69 Page Object Pattern 69

Page Object Pattern 70 Page Object Pattern 70

Page Object Pattern Два основных способа указать элемент на странице для Selenium: 1. Css Page Object Pattern Два основных способа указать элемент на странице для Selenium: 1. Css selector 2. Xpath локатор Пример:

71

Page Object Pattern Два основных способа указать элемент на странице для Selenium: 1. Css Page Object Pattern Два основных способа указать элемент на странице для Selenium: 1. Css selector 2. Xpath локатор Пример:

72

Page Object Pattern Два основных способа указать элемент на странице для Selenium: 1. сss Page Object Pattern Два основных способа указать элемент на странице для Selenium: 1. сss selector 2. xpath локатор Пример:

css selector: div[name=‘test 123’] xpath: //div[@name=‘test 123’] 73

Page Object Pattern Где брать информацию: css selectors: http: //www. w 3 schools. com/cssref/css_selectors. 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 class Contacts(atf. Page):

Page Object Pattern 76 Page Object Pattern 76

DDT – Data Driven Testing Тесты, управляемые данными. При данном подходе мы разделяем данные 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' 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 Авторизовываемся с BDD Тест «Поиск контрагента» Открываем страницу по адресу http: //online. sbis. ru Авторизовываемся с логином «Демо» и паролем «Демо» Вводим в поисковую строку строчку «Иванов» Нажимаем кнопку с текстом «Поиск» Проверяем, что в таблице с результатами есть строчка «Иванов» 79

BDD def открываем_страницу(адрес): pass def авторизовываемся(логин, пароль): pass class Page(): поисковая_строка: Text. Field(By. CSS_SELECTOR, 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 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 BDD Вкратце: 1. Model Driven Testing 2. Monkey Tester 3. Fuzzing / Crazy Bot 82

Вопросы есть? 83 Вопросы есть? 83

Спасибо за внимание! Докучаев Сергей Валерьевич / sv. dokuchaev@tensor. ru (4852) 262 -000 (доб. Спасибо за внимание! Докучаев Сергей Валерьевич / sv. dokuchaev@tensor. ru (4852) 262 -000 (доб. 3435) sbis. ru Разработка СБИС