Доклад с SQA Days — Автоматизация тестирования: отбрасываем лишнее и проверяем суть

в 9:25, , рубрики: автоматизация рутины, автоматизация тестирования, автоматизированное тестирование, Блог компании Лаборатория тестирования, Программирование, Тестирование IT-систем, тестирование по

Приводим доклад Игоря Хрола, компания Wargaming, Минск, с конференции SQA Days 15.

Видео доклада:
vimeo.com/93944414

Презентация:
www.slideshare.net/slideshow/embed_code/33725306#


Я 8 лет работаю в этой отрасли, и я считаю, что у нас есть проблемы )

Прежде всего, тестирование считается неинтересной профессией. Что из этого следует? В отрасль приходят неопытные люди, либо недостаточно квалифицированные. Сложную работу, т.к. люди неопытные, некому делать. И получается, что мы делаем несложную работу. А т.к. мы делаем несложную работу, то нам мало платят, т.к. бизнесу мы приносим не так много, как хотели бы. И круг замыкается.

Доклад с SQA Days — Автоматизация тестирования: отбрасываем лишнее и проверяем суть

В результате, если в тестирование попадают талантливые люди, то случайно. И потом они все равно уходят в разработку. То есть тестирование считается простой и неинтересной IT-профессией, и качество тестирования оставляет желать лучшего.

В первую очередь, я призываю вас вспомнить: Кто мы? Software testing engineer. Инженеры. То есть мы не называемся тестерами, тестировщиками и проч., мы — инженеры. И я считаю, что ситуацию как раз могут менять инженеры своими техническими навыками, своими подходами.

Мне бы хотелось отметить, что наша работа сложнее, чем кажется на первый взгляд. Я сейчас говорю про тестирование, но для меня тестирование и автоматизация слились в единое, потому что я считаю, что основным инструментом тестировщика должна быть автоматизация.

Название играет роль.
• Автоматизация тестирования (мы что-то делаем руками, и мы это автоматизируем)
• Автоматическое тестирование (что он нас хочет бизнес? чтобы тестирование шло как-то само, автоматом, а мы там логи смотрели и проч. Цель — не автоматизировать тестирование, а сделать тестирование автоматическим)
• Эффективное автоматическое тестирование

Рассмотрим абстрактный проект в вакууме.
Это — модель, она описывает жизненную ситуацию в какой-то мере приближения.
У нас есть 5 модулей. В первом надо протестировать 5 вариантов, во втором — 8, а третьем — 2 варианта и т.д. Всего надо провести 800 тестов, чтобы убедиться, что все работает.

Доклад с SQA Days — Автоматизация тестирования: отбрасываем лишнее и проверяем суть

Меняем цифры на V: V1 * V2* V3*...*Vn В итоге Vn — средняя сложность модуля. Что такое Vn? Математическая сложность и экспонента. Все строится на том, что задача, имеющая такую сложность решается очень плохо.
Экспоненциальная сложность. См график.

Доклад с SQA Days — Автоматизация тестирования: отбрасываем лишнее и проверяем суть

Зеленый график, который долгое время держится ниже других, но в какой-то момент уходит стремительно вверх. И когда мы тестируем методом черного ящика, когда мы пытаемся перебрать все варианты, у нас получается, что черный ящик (сложность такого тестирования) — это экспоненциальная сложность. У нас появляется много автотестов, которые работают часами, что мы дальше делаем? Запускаем их параллельно. Мы делим эту сложность на константу. У нас та же экспонента, но чуть-чуть уменьшенная константа. То есть это не решает проблему.

Доклад с SQA Days — Автоматизация тестирования: отбрасываем лишнее и проверяем суть

Разделяй и властвуй

Давайте посмотрим на нашу задачу с другой стороны.
У нас было 26 тестов (если тестировать каждый модуль по-отдельности). Но вы скажете, что надо убедиться, что все это вместе работает. Хорошо, давайте протестируем отдельным тест-кейсом каждую связь и прогоним какой-нибудь сквозной сценарий. Получился 31 тест. В итоге, мы экспоненциальную сложность меняем на линейную. И задача становится эффективно решаема. То есть если мы плохо тестировали, и наняли еще 10 тестировщиков, то мы просто распараллелили на 10, а если мы поменяли саму сложность задачи, то не надо так сильно увеличивать ресурсы, требуемые для тестирования.

Если у нас есть некая абстрактная система, которая имеет по одному варианту, а в конце — 10, если перемножим, то у нас 10 тест-кейсов, а суммарно — 14. А плюс еще связи проверить — 19. Но тесты стали проще. Вместо одного длинного теста, мы пишем 10 маленьких. То есть по факту сложность тестов все равно упрощается.

Доклад с SQA Days — Автоматизация тестирования: отбрасываем лишнее и проверяем суть

“Пирамида” автоматизации.

Если мы не будет строить наши тесты на этой “пирамиде”, мы получил экспоненциальную сложность нашей задачи, нашего тестирования. Самый мелкий модуль декомпозиции задач — это отдельные классы, отдельные методы. Главное — это декомпозиция задач. Если она — односложна, то мы получаем умножение, если нет, то мы получаем сложение, и в долгосрочной перспективе это будет лучше.

Тестирование — не такое простое. Потому что чтобы провести такую декомпозицию одного черного ящика на много мелких, надо разобраться до конца, вплоть до самых нижних уровней в том технологическом стенде, в котором выработаете. Т.е. надо иметь квалификацию соизмеримую с квалификацией разработчика. Без этого мы упираемся в экспоненту, мы не делаем нашу работу качественно лучше. Соответственно, надо учиться, и за счет этого, мне кажется, что наша работа не такая простая, как кажется.

Доклад с SQA Days — Автоматизация тестирования: отбрасываем лишнее и проверяем суть

Проект из жизни.
Siebel, Oracle — жесткое enterprise решение, это был проект по кастомизации, по внедрению мобильного оператору решений на основе технологий Siebel. До того как я присоединился к проекту, тесты писались на QTP. Они представляли из себя такую структуру: там был внутренний API, и тесты ходят, кликают на кнопочки, в середине — черный ящик, и снизу база данных. Достаточно типовая картина.

Доклад с SQA Days — Автоматизация тестирования: отбрасываем лишнее и проверяем суть

Как результат: тесты долгие, тесты нестабильные. Пришла задача: оптимизировать предусловия, которые делаются часами.

Я написал на java скриптик, который отправляет GET запрос, парсит XML, смотрит XML, отправляет еще один GET запрос и т.д. Тесты стали работать 20 минут и стали хорошо параллелиться.

В результате отказа от браузера тесты стали работать быстрее, не стало проблем с синхронизацией, тесты стали более надежны и легко запускаться параллельно. Из минусов: не видно, как работают тесты; нет доверия, и выше порог вхождения.

Вопрос “не видно” решился как в старом анекдоте: “Вам шашечки или ехать?” Вам на тесты смотреть, или надо тестирование проводить? Т.е. тут вопрос: мы хотим автоматическое тестирование или автоматизировать тестирование?

Структура решения: Java + TestNG + Maven + HttpClient. Положить несколько уровней абстракций, чтобы не работать напрямую, запросы не писать, а работать с сущностями, которые специфичны для Siebel’а.

Доклад с SQA Days — Автоматизация тестирования: отбрасываем лишнее и проверяем суть

Но оказалось, что от браузера не уйти, и часть логики оказалась реализована в самом браузере. Т.е. часть логики была на сервере, а часть логики — в браузере. Поэтому появился Selenium. Но зная о том, что браузер — это долго, нестабильно и непрочно, мы это делали аккуратно. Запускали только тогда, когда реально нужен браузер, когда в тест-кейсе появляется логика, которая реализована в браузере, и которую мы хотим проверить (около 3% сценариев). Также реиспользуется headless-сессия с безбраузерного взаимодействия.

Дальше декомпозируем эту задачу на какие-то кусочки. Оказалось, что верстка браузера генерируется самим Siebel’ом. И нам не важно, чтобы нажатие на кнопку было реальным, потому что это уже разработано в Siebel’е, это протестировано в Siebel’е, нам надо просто отбросить лишнее и тестировать только то, что мы делали.
Оказалось, что для разработки браузерной логики есть API (оф. документация Oracle): хочешь что-то сделать в UI — вызови вот тот метод.

Доклад с SQA Days — Автоматизация тестирования: отбрасываем лишнее и проверяем суть

База данных.
Это — самый быстрый способ работать с системой, но лучше туда напрямую не писать (но это была специфика нашего проекта). Какие-то изменения в базе мы делали через специальные выверенные stored procedures, и это хорошо подходит для проверок.

Web-сервисы
JAX-WS — это протокол в Java для работы с web-сервисом. Вместо того чтобы тестировать наш Siebel в контексте всех других систем, мы заглушили все внешние взаимодействия, и когда нам надо было проверить, что из Siebel’а что-то уходит, мы смотрели это не на каких-то внешних системах, а на заглушках. Также мы отправляли java запросы на web-сервисы для проверки исходящей информации.

Наш сервер состоит из двух частей: Web-сервер и Application-сервер. Web-сервер отвечает за верстку и отсылку ответов, а Application-сервер за логику приложения. И есть доступ к логике через Java Data Bean.И через нее мы получили полный программный интерфейс для создания логики приложений в Siebel’е из Java.

Тесты производительности.
Т.к. наши тесты пишутся на java, т.к. они хорошо параллелятся, мы можем просто “натравить” на JMeter наши тесты, и по сути нагрузить систему функциональными тестами. Также тесты суппортились вместе с поддержкой функциональных тестов. Т.е. если для нового билда нужны были новые версии скриптов, мы все равно для проведения функциональных тестов эти скрипты обновляем.

Доклад с SQA Days — Автоматизация тестирования: отбрасываем лишнее и проверяем суть

Мы разобрались, как работает наш стек технологий, поняли варианты взаимодействий, и мы понимали, что чем ниже мы опускаемся, тем более быстро и надежно.
В результате мы получили:
• быстрые тесты
• предсказуемые результаты которые легко масштабируются
• возможность взаимодействия с Siebel на любом уровне

Мне бы не хотелось, чтобы мой доклад воспринимался как инструкция: “Как работать с Siebel “. Мне бы хотелось, чтобы вы глянули на свой стек технологий и посмотрели, что там “под капотом”, т.к. это делает нашу работу качественней и интересней.
Взгляд на тестирование со стороны реализации системы позволяет:
• уменьшить сложность самой задачи тестирования
• уменьшить сложность и длину сценариев
• увеличить скорость и стабильность работы
• найти новые области применения автотестов

Автор: Polazhenko

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js