Курс «Основы тестирования ПО» Лекция № 3 «Автоматизация

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

10-dokuchaev._osnovy_testirovaniya_po_-_lekciya_#3.pptx

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>26 Подходы Основные подходы к автотестированию ПО Тестируем код – разнообразные юнит-тесты. xUnit фреймворки 26 Подходы Основные подходы к автотестированию ПО Тестируем код – разнообразные юнит-тесты. xUnit фреймворки (e.g. Nunit, JUnit), TDD Тестируем API Тестируем UI – предмет обсуждения на данной лекции

>27 Подходы История развития автотестирования capture/playback tools  Scripting  Data-driven testing  Keyword-based 27 Подходы История развития автотестирования capture/playback tools Scripting Data-driven testing Keyword-based

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

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

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

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

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

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

>34 Подходы Table/Keyword Driven 34 Подходы Table/Keyword Driven

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

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

>37 Selenium 37 Selenium

>38 Selenium 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 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 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 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 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 43 Selenium Архитектура Selenium Selenium Interface Remote Webdriver Firefox Webdriver Chrome Webdriver IE Webdriver JS сниппеты + доп. механизмы

>44 ATF 44 ATF

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

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

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

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

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

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

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

>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

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

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

>73 Page Object Pattern Два основных способа указать элемент на странице для Selenium: сss 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/ 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):     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 76 Page Object Pattern

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

>80 BDD def открываем_страницу(адрес):     pass   def авторизовываемся(логин, пароль): 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 81 BDD Вкратце: Model Driven Testing Monkey Tester Fuzzing / Crazy Bot

>82 BDD Вкратце:  Model Driven Testing  Monkey Tester  Fuzzing / Crazy 82 BDD Вкратце: Model Driven Testing Monkey Tester Fuzzing / Crazy Bot

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

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

>