SlideShare a Scribd company logo
1 of 38
Грязная автоматизация 
Станислав Бахарев. Performance Lab
Привет! 
Станислав Бахарев, 
инженер по обеспечению 
качества 
E-mail: s.bakharev@pflb.ru
План 
• Что такое автоматизация тестирования и как она 
делается? 
• Краткий рассказ о средствах автоматизации 
тестирования. 
• Мой последний проект.
Автоматизация: базовые вещи 
• Объекты интерфейса любой системы образуют 
дерево. 
• Каждый объект имеет набор свойств. 
• Маппинг объектов – это привязка к конкертному узлу 
дерева индивидуального имени. 
• В конечном итоге автоматизированный сценарий – 
это всегда программный код.
Автоматизированный тест 
• Поиск объектов 
• Имитация действий человека 
• Проверки корректности результатов действий
Подходы к автоматизации 
Автоматизация через 
графический интерфейс 
Запись и 
воспроизведение 
Программирование 
фреймворка
Запись и воспроизведение 
• Нажать RECORD 
• Сделать что-то 
• Нажать STOP 
• Доработать получившийся код 
• Нажать PLAY 
• … 
• PROFIT!!!
Запись и воспроизведение: 
когда нельзя 
• Динамическая структура элементов интерфейса 
• Динамические имена/идентификаторы объектов 
• Частые обновления интерфейса системы 
• Нетривиальная логика сценариев
Фреймворк для автотестирования 
• Минусы: 
– Нужен программист или несколько 
– Долго делать 
– Надо обучать тест-дизайнеров 
• Плюсы: 
– Отказоустойчивость 
– Код тестов читабелен 
– Изначальный контроль над происходящим 
– Не стыдно
Дружелюбность фреймворка 
MainWindow main = new MainWindow(); 
main.clickMenu("Администрирование", "Настройки сервера"); 
main.clickTab("Параметры сервера"); 
CachedEditObject edit = main.findEdit("Название сервера:"); 
edit.setText("!@#$%^&*()"); 
CachedButtonObject button = main.findButton("Сохранить"); 
if (!button.isEnabled()) { 
Logger.logSuccess("Кнопка сохранения недоступна"); 
} else { 
Logger.logFail("Кнопка сохранения доступна"); 
}
«Дружелюбность» 
сгенерированного кода
Хорошая автоматизация 
• Фреймворк: 
– Использует API средства автоматизации 
– Низкоуровневые операции целиком возлагает на средство 
автоматизации 
• Тесты создаются исключительно в рамках 
написанного фреймворка
Средства автоматизации 
тестирования 
• Берут начало в конце 1990-х – начале 2000х 
• Работают с несколькими доменами тестирования 
• Общий API для работы с разными доменами 
• Пытаются быть как IDE 
• Работают медленно 
• Глючат (зачастую непредсказуемо)
Rational Functional Tester: плюсы 
• Базируется на Eclipse, код на Java 
• Относительная стабильность и завершённость 
продукта 
• Неплохой API 
• Поддержка тестирования экзотических доменов
Rational Functional Tester: минусы 
• Неполная и не всегда понятная документация 
• Цена не разглашается 
• Баги, недоработки и скорость работы 
• Не знает про мобильные платформы 
• Инструменты автоматизатора глючат и неудобны в 
использовании
Тестируемая система 
• Графическая оболочка для генерации запросов к 
базе данных и отображения их результатов в 
интерфейсе пользователя. 
• Предназначение – выявление случаев 
мошенничества в операциях с бумажными 
документами. 
• Написана на Java под JRE версии 1.6.
Тестируемая система
Тестируемая система
Дерево объектов 
• Окно основано на контейнерах класса 
«SWT_Window0», так или иначе все объекты 
содержатся в них. 
• Уровень вложенности дерева достигает 15. 
• Реальное дерево объектов не всегда соотносится с 
внешим видом элементов окна.
Скорость операций 
• Стандартные операции над объектами: 
– Запрос свойств(а) объекта 
– Получение родительского объекта 
– Получение дочерних объектов 
– Проверка существования и видимости объекта 
– Поиск среди дочерних объектов 
– Ввод или чтение значений полей 
– Имитация действий пользователя 
Занимают от 150 до 400 милисекунд
Проверка видимости объекта 
• Стандартные методы объекта isShowing() и 
ensureObjectIsVisible() не работают. 
• RFT не генерирует исключений при попытке 
манипуляций с недоступным объектом. 
• Нужно использовать свойство «.visible» у цепочки 
родительских объектов, чтобы понять, видим ли 
объект.
Проверка видимости объекта 
• Кешировать всё дерево объектов на старте теста. 
• Кешировать все свойства объектов, кроме 
динамических (например, «.visible»). 
• Ввести понятие «интервалов заморозки» свойств, в 
которые динамические свойства могут 
запрашиваться с реального объекта не более одного 
раза.
Гибкий интерфейс 
• Вся структура окна видоизменяема, что позволяет 
использовать маппинг объектов только на верхних 
уровнях дерева. 
• Поиск должен осуществляться только среди видимых 
объектов.
Гибкий интерфейс 
• Составляется список всех панелей окна и список 
видимых панелей в данный момент. 
• Поиск объектов написан с нуля. 
• Поиск объектов считается интервалом «заморозки 
свойств» объектов.
Контекст поиска 
• Для ускорения поиска объектов нужно выбирать 
максимально узкий диапазон поиска – в идеале, 
корневую панель вкладки, на которую был сделан 
последний переход. 
• Из-за особенности структуры дерева нельзя найти 
корневую панель вкладки среди дочерних объектов 
контроллера вкладок.
Контекст поиска 
Главное окно 
Главное меню 
Куча панелей 
Вкладки и их 
содержимое 
Заголовки вкладок и их 
клиентские области 
(прямоугольники области 
содержимого) 
Контекст 
поиска
Контекст поиска 
• Определение контекста поиска осуществляется 
путём сравнения координат видимых панелей и 
координат клиентской области вкладки. 
• Поиск объектов отказывается «заходить» внутрь 
невидимых панелей.
Этого мало? 
• Кешировать результаты поиска в рамках контекста! 
• Кешировать данные, ассоциированные с объектом! 
• Кешировать все заголовки вкладок в окне! 
• Кешировать все заголовки страниц! 
• Главное окно – не окно! Поиск всегда переадресуется 
на одну из его основных панелей.
Как это работает: 1 
Кеширование дерева… 
Если в начале теста 
фреймворку была отправлена 
команда клика по вкладке 
«Выборки», то сначала 
запускается долгий процесс 
кеширования всего дерева 
объектов.
Как это работает: 2 
Поиск панелей и вкладок… 
После кеширования 
фреймворк обнаружит в 
дереве объектов все панели и 
заголовки вкладок, которых в 
окне в прямом смысле сотни.
Как это работает: 3 
Поиск видимых панелей… 
Затем среди всех панелей 
будет составлен список тех, 
которые отображаются на 
экране в настоящий момент. 
Их значительно больше, чем 
изображено на рисунке.
Как это работает: 4 
Клиентская область… 
Затем, с помощью 
привязанного к заголовку 
вкладки прямоугольника 
клиентской области будут 
отсеяны все вкладки, не 
попадающие в неё.
Как это работает: 5 
Определение контекста… 
В итоге контекстом поиска 
будет считаться самая 
высокоуровневая панель из 
тех, которые вписываются в 
клиентскую область.
Итоги: скорость работы 
Кеширование дерева объектов 5 – 30 секунд 
Кеширование панелей и вкладок 2 – 6 секунд 
Определение видимых панелей 1,5 – 3 секунды 
Определение контекста < 200 мс 
Поиск объектов в контексте 1 – 6 секунд
Итоги 
Сложность фреймворка 
Дружелюбность и простота тестов 
Скорость работы 
Стабильность 
Отказоустойчивость 
Время разработки фреймворка
Выводы 
• Автоматизировать можно почти всё что угодно 
• Средства автоматизации дефективные удивительные 
• Иногда нельзя сделать всё красиво
Время вопросов 
Доклад подготовил и озвучил 
Станислав Бахарев, инженер по 
обеспечению качества 
E-mail: s.bakharev@pflb.ru
Грязная автоматизация

More Related Content

What's hot

Cовременный контроль качества: давай сделаем это по-быстрому...
Cовременный контроль качества: давай сделаем это по-быстрому...Cовременный контроль качества: давай сделаем это по-быстрому...
Cовременный контроль качества: давай сделаем это по-быстрому...
Igor Khrol
 
Архитектура автоматизированных тестов
Архитектура автоматизированных тестовАрхитектура автоматизированных тестов
Архитектура автоматизированных тестов
SQALab
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDE
ISsoft
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
vyacheslavmaslov
 
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
Igor Khrol
 

What's hot (20)

Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформы
 
Cовременный контроль качества: давай сделаем это по-быстрому...
Cовременный контроль качества: давай сделаем это по-быстрому...Cовременный контроль качества: давай сделаем это по-быстрому...
Cовременный контроль качества: давай сделаем это по-быстрому...
 
Архитектура автоматизированных тестов
Архитектура автоматизированных тестовАрхитектура автоматизированных тестов
Архитектура автоматизированных тестов
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDE
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
 
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
 
Qa Automation - отбрасываем лишнее и тестируем суть
Qa Automation - отбрасываем лишнее и тестируем сутьQa Automation - отбрасываем лишнее и тестируем суть
Qa Automation - отбрасываем лишнее и тестируем суть
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
 
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
 
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
 
Automation testing desktop applications
Automation testing desktop applicationsAutomation testing desktop applications
Automation testing desktop applications
 

Viewers also liked

Viewers also liked (8)

SOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработка
 
Эффективный тест-менеджмент... и как с ним бороться
Эффективный тест-менеджмент... и как с ним боротьсяЭффективный тест-менеджмент... и как с ним бороться
Эффективный тест-менеджмент... и как с ним бороться
 
Приключения белого ящика в стране покрытий
Приключения белого ящика в стране покрытийПриключения белого ящика в стране покрытий
Приключения белого ящика в стране покрытий
 
Коммуникации в тестировании
Коммуникации в тестированииКоммуникации в тестировании
Коммуникации в тестировании
 
ISTQB Сертификация. Приводим знания в порядок
ISTQB Сертификация. Приводим знания в порядокISTQB Сертификация. Приводим знания в порядок
ISTQB Сертификация. Приводим знания в порядок
 
Тестовые оракулы на основе концепции EI/EQ (эмоционального интеллекта)
Тестовые оракулы на основе концепции EI/EQ (эмоционального интеллекта)Тестовые оракулы на основе концепции EI/EQ (эмоционального интеллекта)
Тестовые оракулы на основе концепции EI/EQ (эмоционального интеллекта)
 
Как оценить команду тестирования и как направить их развитие в нужное русло
Как оценить команду тестирования и как направить их развитие в нужное руслоКак оценить команду тестирования и как направить их развитие в нужное русло
Как оценить команду тестирования и как направить их развитие в нужное русло
 
The fast and the continuous
The fast and the continuousThe fast and the continuous
The fast and the continuous
 

Similar to Грязная автоматизация

Практики масштабирования гибкой разработки
Практики масштабирования гибкой разработкиПрактики масштабирования гибкой разработки
Практики масштабирования гибкой разработки
Askhat Urazbaev
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
Stanfy
 
Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1
Technopark
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
Computer Science Club
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
PVasili
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF
Aleksey Shipilev
 
Java. Lecture 07. Advanced XML
Java. Lecture 07. Advanced XMLJava. Lecture 07. Advanced XML
Java. Lecture 07. Advanced XML
colriot
 
Виталий Каторгин, Wamba
Виталий Каторгин, WambaВиталий Каторгин, Wamba
Виталий Каторгин, Wamba
Ontico
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
Stanfy
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
drupalconf
 

Similar to Грязная автоматизация (20)

ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
PowerShell
PowerShellPowerShell
PowerShell
 
Практики масштабирования гибкой разработки
Практики масштабирования гибкой разработкиПрактики масштабирования гибкой разработки
Практики масштабирования гибкой разработки
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
Отладка веб-приложений на Javascript
Отладка веб-приложений на JavascriptОтладка веб-приложений на Javascript
Отладка веб-приложений на Javascript
 
Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла
 
Java. Lecture 07. Advanced XML
Java. Lecture 07. Advanced XMLJava. Lecture 07. Advanced XML
Java. Lecture 07. Advanced XML
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
 
Виталий Каторгин, Wamba
Виталий Каторгин, WambaВиталий Каторгин, Wamba
Виталий Каторгин, Wamba
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Sivko
SivkoSivko
Sivko
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 

More from SQALab

More from SQALab (20)

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестов
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIs
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
 
Истинная сила тестировщика - информация
Истинная сила тестировщика - информацияИстинная сила тестировщика - информация
Истинная сила тестировщика - информация
 

Грязная автоматизация

  • 2. Привет! Станислав Бахарев, инженер по обеспечению качества E-mail: s.bakharev@pflb.ru
  • 3. План • Что такое автоматизация тестирования и как она делается? • Краткий рассказ о средствах автоматизации тестирования. • Мой последний проект.
  • 4. Автоматизация: базовые вещи • Объекты интерфейса любой системы образуют дерево. • Каждый объект имеет набор свойств. • Маппинг объектов – это привязка к конкертному узлу дерева индивидуального имени. • В конечном итоге автоматизированный сценарий – это всегда программный код.
  • 5. Автоматизированный тест • Поиск объектов • Имитация действий человека • Проверки корректности результатов действий
  • 6. Подходы к автоматизации Автоматизация через графический интерфейс Запись и воспроизведение Программирование фреймворка
  • 7. Запись и воспроизведение • Нажать RECORD • Сделать что-то • Нажать STOP • Доработать получившийся код • Нажать PLAY • … • PROFIT!!!
  • 8. Запись и воспроизведение: когда нельзя • Динамическая структура элементов интерфейса • Динамические имена/идентификаторы объектов • Частые обновления интерфейса системы • Нетривиальная логика сценариев
  • 9. Фреймворк для автотестирования • Минусы: – Нужен программист или несколько – Долго делать – Надо обучать тест-дизайнеров • Плюсы: – Отказоустойчивость – Код тестов читабелен – Изначальный контроль над происходящим – Не стыдно
  • 10. Дружелюбность фреймворка MainWindow main = new MainWindow(); main.clickMenu("Администрирование", "Настройки сервера"); main.clickTab("Параметры сервера"); CachedEditObject edit = main.findEdit("Название сервера:"); edit.setText("!@#$%^&*()"); CachedButtonObject button = main.findButton("Сохранить"); if (!button.isEnabled()) { Logger.logSuccess("Кнопка сохранения недоступна"); } else { Logger.logFail("Кнопка сохранения доступна"); }
  • 12. Хорошая автоматизация • Фреймворк: – Использует API средства автоматизации – Низкоуровневые операции целиком возлагает на средство автоматизации • Тесты создаются исключительно в рамках написанного фреймворка
  • 13. Средства автоматизации тестирования • Берут начало в конце 1990-х – начале 2000х • Работают с несколькими доменами тестирования • Общий API для работы с разными доменами • Пытаются быть как IDE • Работают медленно • Глючат (зачастую непредсказуемо)
  • 14. Rational Functional Tester: плюсы • Базируется на Eclipse, код на Java • Относительная стабильность и завершённость продукта • Неплохой API • Поддержка тестирования экзотических доменов
  • 15. Rational Functional Tester: минусы • Неполная и не всегда понятная документация • Цена не разглашается • Баги, недоработки и скорость работы • Не знает про мобильные платформы • Инструменты автоматизатора глючат и неудобны в использовании
  • 16. Тестируемая система • Графическая оболочка для генерации запросов к базе данных и отображения их результатов в интерфейсе пользователя. • Предназначение – выявление случаев мошенничества в операциях с бумажными документами. • Написана на Java под JRE версии 1.6.
  • 19. Дерево объектов • Окно основано на контейнерах класса «SWT_Window0», так или иначе все объекты содержатся в них. • Уровень вложенности дерева достигает 15. • Реальное дерево объектов не всегда соотносится с внешим видом элементов окна.
  • 20. Скорость операций • Стандартные операции над объектами: – Запрос свойств(а) объекта – Получение родительского объекта – Получение дочерних объектов – Проверка существования и видимости объекта – Поиск среди дочерних объектов – Ввод или чтение значений полей – Имитация действий пользователя Занимают от 150 до 400 милисекунд
  • 21. Проверка видимости объекта • Стандартные методы объекта isShowing() и ensureObjectIsVisible() не работают. • RFT не генерирует исключений при попытке манипуляций с недоступным объектом. • Нужно использовать свойство «.visible» у цепочки родительских объектов, чтобы понять, видим ли объект.
  • 22. Проверка видимости объекта • Кешировать всё дерево объектов на старте теста. • Кешировать все свойства объектов, кроме динамических (например, «.visible»). • Ввести понятие «интервалов заморозки» свойств, в которые динамические свойства могут запрашиваться с реального объекта не более одного раза.
  • 23. Гибкий интерфейс • Вся структура окна видоизменяема, что позволяет использовать маппинг объектов только на верхних уровнях дерева. • Поиск должен осуществляться только среди видимых объектов.
  • 24. Гибкий интерфейс • Составляется список всех панелей окна и список видимых панелей в данный момент. • Поиск объектов написан с нуля. • Поиск объектов считается интервалом «заморозки свойств» объектов.
  • 25. Контекст поиска • Для ускорения поиска объектов нужно выбирать максимально узкий диапазон поиска – в идеале, корневую панель вкладки, на которую был сделан последний переход. • Из-за особенности структуры дерева нельзя найти корневую панель вкладки среди дочерних объектов контроллера вкладок.
  • 26. Контекст поиска Главное окно Главное меню Куча панелей Вкладки и их содержимое Заголовки вкладок и их клиентские области (прямоугольники области содержимого) Контекст поиска
  • 27. Контекст поиска • Определение контекста поиска осуществляется путём сравнения координат видимых панелей и координат клиентской области вкладки. • Поиск объектов отказывается «заходить» внутрь невидимых панелей.
  • 28. Этого мало? • Кешировать результаты поиска в рамках контекста! • Кешировать данные, ассоциированные с объектом! • Кешировать все заголовки вкладок в окне! • Кешировать все заголовки страниц! • Главное окно – не окно! Поиск всегда переадресуется на одну из его основных панелей.
  • 29. Как это работает: 1 Кеширование дерева… Если в начале теста фреймворку была отправлена команда клика по вкладке «Выборки», то сначала запускается долгий процесс кеширования всего дерева объектов.
  • 30. Как это работает: 2 Поиск панелей и вкладок… После кеширования фреймворк обнаружит в дереве объектов все панели и заголовки вкладок, которых в окне в прямом смысле сотни.
  • 31. Как это работает: 3 Поиск видимых панелей… Затем среди всех панелей будет составлен список тех, которые отображаются на экране в настоящий момент. Их значительно больше, чем изображено на рисунке.
  • 32. Как это работает: 4 Клиентская область… Затем, с помощью привязанного к заголовку вкладки прямоугольника клиентской области будут отсеяны все вкладки, не попадающие в неё.
  • 33. Как это работает: 5 Определение контекста… В итоге контекстом поиска будет считаться самая высокоуровневая панель из тех, которые вписываются в клиентскую область.
  • 34. Итоги: скорость работы Кеширование дерева объектов 5 – 30 секунд Кеширование панелей и вкладок 2 – 6 секунд Определение видимых панелей 1,5 – 3 секунды Определение контекста < 200 мс Поиск объектов в контексте 1 – 6 секунд
  • 35. Итоги Сложность фреймворка Дружелюбность и простота тестов Скорость работы Стабильность Отказоустойчивость Время разработки фреймворка
  • 36. Выводы • Автоматизировать можно почти всё что угодно • Средства автоматизации дефективные удивительные • Иногда нельзя сделать всё красиво
  • 37. Время вопросов Доклад подготовил и озвучил Станислав Бахарев, инженер по обеспечению качества E-mail: s.bakharev@pflb.ru