Слайд 2План
Проблемы автоматизации
Что такое фреймворк?
Как он решает проблемы?
Некоторые практики с фреймворка на Selenium
![План Проблемы автоматизации Что такое фреймворк? Как он решает проблемы? Некоторые практики](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-1.jpg)
RC
Слайд 3Проблемы автоматизации
В конце цикла разработки – много зависимостей
Изменения UI
Изменение бизнес-логики и тест-кейсов
BA
DEV
QA
Auto
![Проблемы автоматизации В конце цикла разработки – много зависимостей Изменения UI Изменение](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-2.jpg)
QA
Слайд 4Что такое Framework?
Каркас, структура, сфера деятельности
В информационных системах структура программной системы; программное
![Что такое Framework? Каркас, структура, сфера деятельности В информационных системах структура программной](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-3.jpg)
обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта.
Спасибо, Википедия
Слайд 5Зачем нужен Framework?
Ре-использование кода
Решение проблем одним изменением
Уменьшение количества изобретателей «велосипедов»
![Зачем нужен Framework? Ре-использование кода Решение проблем одним изменением Уменьшение количества изобретателей «велосипедов»](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-4.jpg)
Слайд 6Layering
Подход к построению архитектуры системы
![Layering Подход к построению архитектуры системы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-5.jpg)
Слайд 7UI Layer
Цель: контролировать изменения UI
Примеры:
Хранилище локаторов
Object Repository в QTP
Name Mapping в TestComplete
UI-Element
![UI Layer Цель: контролировать изменения UI Примеры: Хранилище локаторов Object Repository в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-6.jpg)
в Selenium IDE
Слайд 8Business components layer
Цель: контролировать изменения бизнес-логики
Примеры:
Reusable Actions в QTP
Functions в TestComplete или
![Business components layer Цель: контролировать изменения бизнес-логики Примеры: Reusable Actions в QTP](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-7.jpg)
любом другом инструменте
Слайд 9Utilities
Цель: вспомогательная
Примеры:
Логгирование
Работа с базой данных
Чтение настроек и тестовых данных
![Utilities Цель: вспомогательная Примеры: Логгирование Работа с базой данных Чтение настроек и тестовых данных](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-8.jpg)
Слайд 10Типичная схема
AUT / SUT
Utilities layer
UI layer
Business layer
Test scripts
![Типичная схема AUT / SUT Utilities layer UI layer Business layer Test scripts](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-9.jpg)
Слайд 11KISS
Используйте готовые решения
Усложняйте архитектуру тогда, когда это нужно
Старайтесь делать всё проще и
![KISS Используйте готовые решения Усложняйте архитектуру тогда, когда это нужно Старайтесь делать всё проще и очевидно](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-10.jpg)
очевидно
Слайд 13Запуск тестов из командной строки
Ant (http://ant.apache.org/)
Запуск selenium server
Компиляция исходных кодов
Запуск тестов
Остановка selenium
![Запуск тестов из командной строки Ant (http://ant.apache.org/) Запуск selenium server Компиляция исходных](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-12.jpg)
server
Слайд 14Как хранить общий доступ к selenium?
Передавать каждой функции
Инициализировать изначально и использовать статическое
![Как хранить общий доступ к selenium? Передавать каждой функции Инициализировать изначально и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-13.jpg)
поле для обращения к нему
Слайд 15Базовый класс для всех тест кейсов
![Базовый класс для всех тест кейсов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-14.jpg)
Слайд 16Структура тест-кейса
Preconditions
Test case
Cleanup
![Структура тест-кейса Preconditions Test case Cleanup](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-15.jpg)
Слайд 17Где хранить настройки?
Найдите грань между настройками и тестовыми данными:
Selenium host
Selenium port
Timeout
Base URL
properties-файлы
![Где хранить настройки? Найдите грань между настройками и тестовыми данными: Selenium host](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-16.jpg)
– стандарт для Java (http://download.oracle.com/javase/1.4.2/docs/api/java/util/Properties.html)
config.xml – для C#
Слайд 18Где хранить тестовые данные?
Excel
CSV-файлы
База данных
XML
![Где хранить тестовые данные? Excel CSV-файлы База данных XML](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-17.jpg)
Слайд 19Excel-хранилища данных
Табличные данные на каждом sheet
Key-value пары в столбец
Именованные диапазоны
Чем читать excel?
JDBC
![Excel-хранилища данных Табличные данные на каждом sheet Key-value пары в столбец Именованные](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-18.jpg)
(http://www.ehow.com/how_4810548_use-jdbc-connect-ms-excel.html)
POI (http://poi.apache.org/)
Слайд 20Где хранить локаторы?
Поля классов
![Где хранить локаторы? Поля классов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-19.jpg)
Слайд 21Где хранить локаторы?
Поля интерфейсов
![Где хранить локаторы? Поля интерфейсов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-20.jpg)
Слайд 22Где хранить локаторы?
properties-файлы
http://seleniumhq.org/docs/06_test_design_considerations.html#ui-mapping
![Где хранить локаторы? properties-файлы http://seleniumhq.org/docs/06_test_design_considerations.html#ui-mapping](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-21.jpg)
Слайд 23Структура UI Layer
Разбивка на страницы
Сбор «особенных» UI элементов в отдельные классы:
Различные кастомизированные
![Структура UI Layer Разбивка на страницы Сбор «особенных» UI элементов в отдельные](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-22.jpg)
кнопки-поля (нужно вызывать специальные события)
Upload-download файлов
Иерархия объектов (GWT, например)
Слайд 24Структура Business Layer
Набор статических методов, объединённых по классам
Чем проще, тем лучше
![Структура Business Layer Набор статических методов, объединённых по классам Чем проще, тем лучше](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-23.jpg)
Слайд 25Tracebility с ручным тестированием
Соотнесение тест-кейсов
Соотнесение тестовых шагов
Интеграция с существующей отчётностью
HP Quality Center
TestLink
JIRA
![Tracebility с ручным тестированием Соотнесение тест-кейсов Соотнесение тестовых шагов Интеграция с существующей](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-24.jpg)
Слайд 26Отчёты
HTML
Группировка по test suite и test case
Screenshots
Максимально user friendly
При возможности – интеграция
![Отчёты HTML Группировка по test suite и test case Screenshots Максимально user](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-25.jpg)
с существующей системой отчётности
Слайд 27Screenshots
void captureScreenshot (String filename);
Обычно делается во время ошибки
Try-catch в BaseTest
Listener в JUnit
http://www.cloudtesting.com/blog/2009/06/24/capturing-screen-shots-of-browsers-with-selenium-and-cloud-testing-part-1/
![Screenshots void captureScreenshot (String filename); Обычно делается во время ошибки Try-catch в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388079/slide-26.jpg)