Автоматизированное тестирование «Приложения по управлению продуктами и услугами мобильного оператора»
Описание проекта
“Приложение по управлению продуктами и услугами” (далее — Приложение) работает в составе группы приложений, которые обеспечивают бизнес-процессы телеком- компаний по подключению/отключению услуг, информированию клиентов, списанию денежных средств абонентов для мобильных операторов.
Приложение состоит из 2-ух сервисов:
- Первый сервис, Менеджер Состояний — получает информацию из смежных сервисов об изменениях, касающихся абонентов, и принимает решение о подключении/отключении тех или иных продуктов/пакетов услуг. Например, абонент подключил себе тарифный план, предусматривающий работу базового пакета услуг (звонки, смс) даже при большой задолженности. Если Менеджер Состояний получит информацию, что баланс абонента пересек допустимый порог по задолженности, при котором нужно отключить основные услуги, входящие в текущий тарифный план до погашения — он отправит запрос в смежную подсистему для подключения этому абоненту базового пакета услуг.
- Второй сервис, Загрузчик — выполняет так называемый “холодный старт” Менеджера Состояний. Для того, чтобы Менеджер Состояний мог начать работать с другим сторонними сервисами, для него необходимо загрузить реальные данные в кэш. Для этого и используется Загрузчик. Загрузчик выгружает абонентов, их текущее состояние и подключенные услуги с тарифными планами из баз данных других сервисов, находящихся в системе, и загружает их в кэш Приложения.
Описание работы Приложения проиллюстрировано на схеме ниже:
Описание работы Менеджера Состояний
Отличительной особенностью архитектуры Менеджера Состояний является возможность гибкой настройки — заказчик может самостоятельно настраивать правила по подключению/отключению продуктов и услуг без внесения изменений в код ядра самого сервиса.
Это достигается за счет того, что описание правил хранится в Groovy скриптах в Zookeeper. При добавлении нового скрипта с правилами, Менеджер Состояний автоматически загружает его к себе в память.
Информация об абонентах, подключенных продуктах и их состояниях хранится в NoSQL базе данных Couchbase.
Когда Менеджер Состояний получает по асинхронному каналу (RabbitMq) событие об изменении абонента, он отправляет REST запрос на подключение продукта абоненту, исходя из имеющихся правил и наличия абонента и его услуг в Couchbase. После этого внешний сервис, отвечающий за подключение продуктов абоненту, отправит запрос в Менеджер Состояний, на основании которого подключенный/отключенный продукт сохранится в Couchbase.
Описание работы Загрузчика
Загрузчик также имеет возможность, которая позволяет выполнять гибкую настройку без внесения изменений в код ядра. Гибкая настройка реализуется за счет выполнения
правил, по которым следует выгружать абонентов и услуги из внешних источников, которые, в свою очередь, описаны в Groovy скриптах и лежат в zookeeper. При добавлении нового скрипта с правилами Загрузчик автоматически сохраняет его к себе в память.
Для инициализации выгрузки абонентов и услуг пользователь выполняет REST запрос к загрузчику. На основании имеющихся правил, загрузчик выполняет одну из двух возможных операций:
- Выгружает определенных абонентов из внешней БД Oracle и сохраняет их к себе в БД Couchbase.
- Выполняет REST запрос на выгрузку продуктов абонента из внешнего Сервиса Выгрузки Продуктов. После успешного выполнения запроса Сервис Выгрузки Продуктов начинает отправлять данные по продуктам в Kafka, откуда Загрузчик сохраняет их в БД Couchbase.
Обязанности команды ДжазТим
Обеспечение автоматизации тестирования проекта с нуля
Необходимыми требованиями для тестирования были:
- Все сервисы должны быть подняты в Docker внутри одной сети.
- Необходимо для поднятия сервисов и Groovy скриптов использовать YML файлы, которые поставляются заказчику при отгрузке.
- Сторонние сервисы смежных команд должны быть закрыты Mock сервером.
Разработка тестового фреймворка
Для автоматизированного тестирования необходимо было разработать тестовый фреймворк, в котором подготовлены все необходимые функции для написания автотестов. Тестовый фреймворк должен был уметь работать со всеми сервисами, с которыми интегрируется система управления продуктами и услугами (Couchbase, Kafka, Oracle DB, Zookeeper, Mock Server, REST).
Сам тестовый проект был реализован на базе JUnit5 и SpringBootTest. Для поднятия сервисов в Docker использовалась библиотека TestContainers. Во время сборки перед запуском тестов был реализован парсинг yaml файлов, в результате которого в Zookeeper создавались все необходимые Groovy скрипты и в контейнер Приложения помещался настроечный файл с настройками подключения его к сторонним сервисам.
Архитектура тестового фреймворка была реализована следующим образом:
- В слое configuration расположены все spring конфигурации, отвечающие за поднятие инфраструктуры для тестирования.
- В слое constants лежат классы с константными значениями, используемыми в тестах.
- В слое object_builders лежат классы билдеров для тестовых данных. Например, билдер для создания json, который отправляется при запросе в Приложение.
- В слое services размещаются классы для работы с сервисами: различные dao и клиенты.
- В слое utils лежат утильные классы.
- В слое yaml расположены классы по работе с yaml файлами.
Проведение комплексного тестирования
Совместно с командами, реализующими другие сервисы, необходимо было провести комплексное тестирование на стендах, близких по конфигурации к окружению заказчика.
Комплексное тестирование включало следующий список задач:
- Разработка комплексных тестовых сценариев. Описание сценариев велось в TestRail. Всего было описано около десятка сценариев.
- Консультирование других команд по работе и настройке Менеджера Состояний.
- Выполнение тестовых сценариев, заведение багов на разработчиков всех команд при выявлении дефектов в ходе тестирования.
Используемые технологии
Infrastructure: Jira, Confluence, MobaXTerm, Postman, VRA, Maven, Gradle, git, TeamCity, TestRail, Stash, Oracle Sql, Couchbase.
Stack: Java 8, Bash, Groovy(basic), SQL, RabbitMq, Zookeeper, Kafka, Docker, JSON, YAML, Regular expressions, WireMockServer, Lombok.
Test automation libraries: Junit5, TestContainers, SpringBootTest, Rest Assured.
Особенности проекта
- К началу работ по автоматизации тестирования еще не была завершена разработка и не было конечного понимания, как должен функционировать продукт.
- Необходимо было выполнить полный цикл разработки тестового фреймворка — начиная от выполнения анализа требований и заканчивая написанием тестов.
- Выполнено комплексное тестирование, в ходе которого необходимо было выполнить настройку не только нашего сервиса, но и всех смежных. Для этого приходилось налаживать коммуникации со смежными командами, в том числе находящихся и в других часовых поясах.
- Все ручные тест-кейсы по текущей функциональности должны быть автоматизированы (100% покрытие).
Результат проекта
- Разработан, настроен и запущен в работу тестовый фреймворк.
- Покрыты тестами все тестовые сценарии по текущей функциональности.
- Создана база знаний в виде видеоматериалов по работе с тестовым фреймворком для дальнейшего написания новых тестов и расширения его функциональности.
Достижения компании на проекте
- Проведен R&D по автоматизации тестирования сервисов, находящихся в Docker образах.
- Успешное завершение задачи в очень ограниченных временных рамках.
- Налажено четкое взаимодействие с распределенной по разным часовым поясам командой.
Свяжитесь с нами, чтобы обсудить Ваш IT-проект