Upload
igor-khrol
View
5.454
Download
1
Embed Size (px)
DESCRIPTION
Когда мы говорим об автоматизации тестирования, чаще всего вспоминается Selenium, Microsoft Coded UI, QTP и другие аналогичные инструменты. Мы хотим воспроизводить действия ручного тестирования с максимальной точностью, чтобы можно было с уверенностью сказать, что тот или иной тест-скрипт повторяет какую-то часть сложившихся на проекте тестов. Когда же тестов становится чуть больше, то мы обнаруживаем, что наши тесты запускаются долго, работают нестабильно. После чего мы начинаем говорить о параллелизации, виртуализации, четырёхслойной архитектуре фреймворка и прочих жутко интересных вещах… Это всё очень хорошо, но главная цель где-то остаётся в стороне – контроль качества нашего продукта. В своём докладе я попытаюсь слегка задать направление другой альтернативе: отойти от автотестов через пользовательский интерфейс в сторону более низкоуровневых, которые значительно быстрее и стабильнее. Если вас также волнует “переворачивание” пирамиды автоматизации тестирования, то приглашаю присоединиться к обсуждению этой сложной и важной темы.
Citation preview
И никуда не надо ехать!
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с
меньшим числом посредников
Игорь Хрол
http://www.khroliz.com
О себе
• Игорь Хрол
• Более семи лет в автоматизации тестирования
• Консультант, тренер, инженер, менеджер, архитектор
• Selenium, HP QTP, TestCompete, JMeter
• Докладчик на AutoConfeT&QA’2012
О чём будем говорить?
О чём будем говорить?
Что мы понимаем под автоматизацией тестирования?
Проблема
Автоматические тесты через пользовательский интерфейс медленные
Проблема
Автоматические тесты через пользовательский интерфейс нестабильные и
хрупкие
Проблема
• Автотесты долго писать
• А что мне делать, пока работает автотест?
Причины
Большое число посредников
Проблема
Большое число посредников
Что делать?
Хороший фреймворк!
Становится лучше, но не хорошо
Тестируем функционал там, где он реализован
Поддержка
Количество тестов
Уровень
Правильная «Пирамида»
UI
API тесты
Unit тесты
Обычная картина на проектах
UI тесты
API тесты
Unit
Направления для решения
Научиться программировать
Понимать, что происходит внутри
Структурируйте тестовую методику
• Понять, что именно тестируем
• Не тестировать много раз одно и то же
Сценарий 1: авторизация
Шаг Ожидаемый результат
Открыть страницу логина Страница открыта
Заполнить имя пользователя Имя пользователя заполнено
Заполнить поле пароля Пароль введён
Нажать на кнопку «Войти» Пользователь вошёл в систему
Сценарий 2: поиск
Шаг Ожидаемый результат
Открыть страницу логина Страница открыта
Заполнить имя пользователя Имя пользователя заполнено
Заполнить поле пароля Пароль введён
Нажать на кнопку «Войти» Пользователь вошёл в систему
Найти продукт «Холодильник» Продукт найден
Сценарий 3: добавление в корзину
Шаг Ожидаемый результат
Открыть страницу логина Страница открыта
Заполнить имя пользователя Имя пользователя заполнено
Заполнить поле пароля Пароль введён
Нажать на кнопку «Войти» Пользователь вошёл в систему
Найти продукт «Холодильник» Продукт найден
Добавить продукт в корзину Продукт находится в корзине
Сценарий 1-3: авторизация, поиск и добавление в корзину
Шаг Ожидаемый результат
Открыть страницу логина Страница открыта
Заполнить имя пользователя Имя пользователя заполнено
Заполнить поле пароля Пароль введён
Нажать на кнопку «Войти» Пользователь вошёл в систему
Найти продукт «Холодильник» Продукт найден
Добавить продукт в корзину Продукт находится в корзине
Много зависимостей «Цепные» падения тестов
Шаг Ожидаемый результат
Открыть страницу логина Страница открыта
Заполнить имя пользователя Имя пользователя заполнено
Заполнить поле пароля Пароль введён
Нажать на кнопку «Войти» Пользователь вошёл в систему
Шаг Ожидаемый результат
Найти продукт «Холодильник» Продукт найден
Сценарий 1: авторизация
Сценарий 2: поиск
Шаг Ожидаемый результат
Добавить продукт в корзину Продукт находится в корзине
Сценарий 3: добавление в корзину
Предусловие: пользователь авторизован
Предусловие : страница с результатами поиска под авторизованным пользователем
Куда убрать предусловия?
• Авторизация:
– Открывать браузер уже с готовой веб-сессией или cookies
• Страница с результатами поиска:
– Открывать URL напрямую
• Любой другой способ доведения системы до нужного состояния…
Куда убрать предусловия?
Убрать генерацию тестовых данных через интерфейс
• Через веб-сервисы
• Через sql-скрипты
• Поднимать базу из snapshot’a и тестировать на одних и тех же данных каждый раз
Не переделывать работу других
• Много систем делается на основе готовых решений
Не переделывайте работу других
• Используйте готовые API третьих систем
Ваша система на основе коробочного продукта
Браузер
Автоматические тесты
API
Автоматизировать то, что тестируем, а не то, как это делается
• Наша цель – протестировать конкретный функционал, а не покрыть автотестом ручной сценарий
• Пример:
– Цель теста: проверить, что нельзя добавить продукт без названия
– Место реализации функционала: триггер в базе данных
Автоматизировать то, что тестируем, а не то, как это делается
• Эффективная реализация тестов: 1. Проверить, что данные отправляются из веб-
формы на сервер (отдельный тестовый сценарий)
2. Проверить, что сервер приложений сохраняет данные в базу
3. Попробовать добавить в базу запись и получить результат триггера
Разделяй и властвуй
• Отдельно тестируем серверную логику – Через веб-сервисы
– Через любой другой API
– Напрямую на сервере
• Отдельно проверяем работу UI – Jasmine
• Смотрим, что вместе всё также работает – Selenium, QTP (вершина пирамиды)
Недостатки
• Надо понимать, что именно и как тестируется
• При тестировании «по кусочкам» можно что-то упустить
• Вывод: следует находить «золотую середину»
Подводя итоги…
• UI-автотесты – универсальные, но длительные и нестабильные
• Как с этим бороться:
– Понимайте, что именно и как вы тестируете
– Заглядывайте внутрь вашей системы, чтобы стать ближе к объекту тестирования
– Разбивайте задачу тестирования на части
– Не переделывайте работу других
Спасибо за внимание! Вопросы?
Игорь Хрол
• E-mail: [email protected]
• Skype: igor.khrol
• LinkedIn: http://www.linkedin.com/in/khroliz
• Блог: http://ru.khroliz.com
• Facebook: https://www.facebook.com/khroliz