Автоматизация Тестирования Программного Обеспечения Терминала Qiwi

Привет, Хабр! Сегодня мы поговорим о конкретной теме: автоматизация тестирования программного обеспечения для терминалов самообслуживания QIWI. В теме автоматизации тестирования есть области, которые уже неоднократно освещались вдоль и поперек, например, тестирование веб-сервисов.

Для таких областей существуют отдельные инструменты, шаблоны и лучшие практики.

Не нужно ничего придумывать, риски минимальны, просто берешь и делаешь.

Бывают и противоположные ситуации.

Тематика специфическая, готовые решения посмотреть некому, инструментов нет, технологический стек продукта уникален.

Вам предстоит глубоко погрузиться в предметную область, сделать свои инструменты из палок и эээ.

других подручных материалов и при этом собрать множество-много граблей разного размера и убойной силы.

Вот об этом я и хотел поговорить сегодня.

Статья подойдет тем, кто занимается разработкой и тестированием программного обеспечения для банковских терминалов или автоматов самообслуживания.

А также для тех, кто хочет расширить свой технический кругозор примерами «и такое тоже бывает».



Автоматизация тестирования программного обеспечения терминала QIWI

Терминал QIWI 2020 года.

На заднем плане видно его содержимое.



Проблема

Первый терминал QIWI появился в 2004 году и тогда появилась возможность пополнять счет мобильного телефона.

С тех пор утекло много воды, и АСО (автоматы самообслуживания) сильно изменились.

Теперь вы можете использовать их для пополнения банковских карт, осуществления переводов, оплаты услуг различных поставщиков (провайдеров) - ЖКХ, штрафов ГИБДД, кредитных организаций, собственных продуктов QIWI (КИВИ-кошелек, беспроцентная рассрочка Совесть).

карта).

Терминалы QIWI также могут работать в режиме постамата (автоматического пункта самовывоза для интернет-магазинов).



Что такое терминал?

С аппаратной точки зрения терминал АСО представляет собой обычный настольный компьютер со специфической периферией, такой как купюро- и монетоприемники, принтеры чеков, диспенсеры, POS-терминалы (принимающие пластиковые карты) и т. д. И вот первая проблема.



Автоматизация тестирования программного обеспечения терминала QIWI

Эта знаменитая фотография была сделана в округе Сонома в Калифорнии.

Говорят, это натуральные цвета, без какой-либо обработки.

Кстати, именно в округе Сонома располагалась самая южная русская колония в Америке.

Да, это она.

Операционная система, выпуск которой был прекращен в 2014 году, — Windows XP. Выпуск версии POSReady задержался до 2019 года, но.

не все так просто.

Дело в том, что терминалы не являются собственностью QIWI. Они принадлежат партнерам, т.н.

Агенты, индивидуальные предприниматели и юридические лица, заключающие договор с QIWI, приобретают терминалы, арендуют площади в торговых центрах и получают практически пассивный доход. Соответственно, 90% парка терминалов QIWI (а их более 100 тысяч в России и зарубежных странах) работают под управлением Windows XP на самом разнообразном оборудовании – от 512 МБ до 4 ГБ ОЗУ, самых разных процессорах (от Pentium 4 начала 2000-х до более менее современного Core i5) и разное качество и скорость интернета.

Терминалы разного возраста, некоторые из них регулярно обновляются, а другие уже очень давно не обновлялись (работает – не трогайте!).

Наша задача — регулярно поставлять свежие обновления программного обеспечения терминала (оно называется MarATL) и поддерживать совместимость со всем этим многообразием оборудования и периферии.



Операционная система больше не поддерживается

Представим себе простую схему автоматизации тестирования.

У нас есть CI-сервер, например TeamCity или Jenkins. Наше терминальное программное обеспечение собирается из сырых материалов по событию (коммит или слияние), куда-то выкладывается собранный бинарный файл.

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

Ээх, стоп! Где установлено программное обеспечение? И как? Как я уже говорил выше, 90 процентов терминалов работают под управлением Windows XP, поддержка которой закончилась в 2014 году.

Это означает, что эта ОС уже давно не соответствует политикам безопасности, для нее не выпускаются обновления, для нее нет свежего рабочего ПО.

, и даже нативная Microsoft Visual Studio компилирует для него С++ только после танцев с бубном, а точнее с тулчейн-версией для ассемблера MSBuild. В общем, запускать тесты и вообще любое ПО на самом терминале или на виртуальной машине под управлением Windows XP — очень плохая идея.

На XP нельзя запустить Buildagent TeamCity, в плейбуке Ansible такую машину настроить нельзя, контейнеров там тоже нет. Шаблонов виртуализации для Windows XP тоже не так уж и много.

В любой крупной компании, которая думает об информационной безопасности, машина с Windows XP будет находиться вдали от корпоративной сети или, тем более, домена.

То есть все взаимодействие с терминалом (или виртуальной машиной, притворяющейся таковой) должно происходить удаленно, а сам терминал должен иметь минимум стороннего ПО.



Решение

Некоторые люди удивляются, когда слышат об OpenSSH и Windows XP. В современных версиях ОС Microsoft поддержка SSH включена непосредственно в систему.

В не очень современных (Windows 7) есть SSH-установщики с использованием PowerShell. С Windows XP ситуация немного хуже, но совсем немного.

Есть древняя версия установщика , который работает на нем без дополнительного программного обеспечения.

SSH — старый добрый надежный способ удаленного управления хостом, известная технология.

Нам нужно реализовать классы коннекторов SSH, которые могут выполнять несколько задач параллельно.

Например, скачать свежие логи с терминала онлайн, выполнить какие-то команды (копирование файлов, запуск скриптов, выдача прав, получение списка процессов, мониторинг системного времени терминала и т.д.).

Особенно интересен мониторинг системного времени.

Используя стандартные инструменты командной строки, Windows XP отображает время только в формате часов, минут, секунд и т. д., а не времени UNIX. Загвоздка, например, в том, что XP уже давно не получает обновлений часовых поясов, а наше российское правительство известно тем, что постоянно играет с отменой летнего или зимнего времени.

Например, стандартная Windows XP SP3 в московском часовом поясе показывает время на час раньше реального московского времени.

Соответственно, временные метки журналов терминала в любом случае не совпадают со временем на тестовой схеме.



Платежи-платежи-платежи.

Интерфейс терминала QIWI по сути представляет собой сеть, работающую на движке браузера, который обычно довольно старый.

Согласно протоколу веб-сокет он взаимодействует с MarATL, реальным программным обеспечением терминала.

При выборе платежа в терминале (например, оплата сотовой связи) с помощью ряда команд выбирается платежный провайдер, определяется размер комиссий и ограничений на прием банкнот, создается платеж под конкретного провайдера, который затем отправляется на обработку платежей через программное обеспечение терминала.

Взаимодействовать с веб-интерфейсом удаленно — не лучшая идея, тем более, что тестирование интерфейса — это другая задача.

Вы можете создать тестовую веб-страницу, которая будет размещаться во время тестов вместо стандартного index.html. Страница запускает JS-скрипт, который работает с программным обеспечением терминала, и, с другой стороны, создает клиент веб-сокета, который смотрит наружу, в сторону хоста, на котором выполняются тесты.

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

Ответы программного обеспечения также отправляются на тестовый сервер веб-сокетов.

То есть набор команд для теста платежа можно описать в виде JSON, в котором последовательно описывается, какие команды нужно отправить и какого ответа от них ожидать.



Автоматизация тестирования программного обеспечения терминала QIWI

Страница тестирования интерфейса.

Отображает команды, проходящие через него.



Где деньги?

Самая коварная техническая задача — имитация терминальной периферии.

Принтер чеков моделируется тривиально; в ОС создается виртуальный принтер, печатающий данные в файл.

Вы можете получить этот чек (или его копию, сгенерированную самим программным обеспечением терминала) с терминала и расшифровать его, попутно проверив, например, что этот чек содержит все необходимые поля.

Сложнее обстоят дела с устройствами, принимающими деньги – купюро- и монетоприемниками.

Понятно, что если мы хотим протестировать сценарий оплаты, нам нужно как-то эмулировать наличие купюроприемника на терминале, поддерживать функционал приема купюр, их возврата, имитации различных проблем (например, возврата мятой купюры).

.

Большинство устройств приема денег работают по протоколу CashCode NET. Этот протокол определяет сценарии взаимодействия купюроприемника и контроллера (в нашем случае контроллером является наше терминальное программное обеспечение).



Автоматизация тестирования программного обеспечения терминала QIWI

Пример взаимодействия контроллера и валидатора банкнот по протоколу CashCode. Через определенные промежутки времени контроллер запрашивает статусы устройств.



Автоматизация тестирования программного обеспечения терминала QIWI

Минимальный размер команды CashCode — 6 байт. Описание команд можно найти в спецификации протокола CashCode NET. Стандартный купюроприемник подключается к терминалу через COM-порт. Существуют сторонние утилиты, которые позволяют создать на машине виртуальный последовательный порт, например: ВСПЕ .

Поддерживаются даже сценарии переадресации для этого порта через TCP-соединение.

Наш случай проще, нам нужна тула, которая умеет подключаться к порту по WinAPI и имеет произвольный удобный интерфейс, например простейший stdin/stdout, который можно подключить по SSH. Тула в отдельном потоке общается с контроллером через последовательный порт и при необходимости моделирует ситуации, когда якобы поступают «деньги».

Также необходимо иметь некий пул тестовых аккаунтов или провайдеров, платежи по которым не будут обрабатываться по-настоящему, но в какой-то момент будут возвращены.

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

Это круговорот денег в природе.



Автоматизация тестирования программного обеспечения терминала QIWI

Принтер чеков (вверху) и купюроприемник (внизу).



24/7

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

Поскольку такое программное обеспечение запускается на терминале с очень высоким приоритетом и правами, оно по сути перехватывает все управление ОС.

Вы не можете просто свернуть его или закрыть с помощью Alt-F4. ПО умеет перезагружать себя и терминал, в т.ч.

В цикле.

Также необходимо проверить наличие подобных стрессовых сценариев, например, отсутствия связи с обработкой платежей.

Терминал реагирует на это периодической перезагрузкой; вам необходимо проверить, что он делает это правильно и каждый раз корректно загружает программное обеспечение терминала.



Установка с нуля и обновление

Установленное программное обеспечение терминала централизованно обновляется посредством обработки платежей.

Обработка планирует обновление для конкретного терминала и определяет для него профиль обновления, то есть какие файлы и откуда нужно загрузить.

Для обновления необходимо выполнить ряд процедур в базе обработки, а затем провести мониторинг терминала.

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

Обычно человек делает это «в полях», просто копируя установочный файл на терминал и вписывая настройки и данные авторизации в формы установщика, который обычно представляет собой приложение WinAPI со стандартными контроллерами Windows (TextBox, CheckBox и т.п.

).

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

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

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



Автоматизация тестирования программного обеспечения терминала QIWI

Чистая установка с нуля MarATL

Заключение

Мы кратко рассмотрели основные технические аспекты создания автотестов терминального ПО.

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

Задавайте вопросы в комментариях, если тема интересна, некоторые моменты можно подробнее осветить в отдельной статье.

Спасибо за внимание! Теги: #Финансы в ИТ #тестирование #java #Тестирование ИТ-систем #Старое оборудование #автоматизация тестирования #автоматизация тестирования #fintech #Qiwi #терминалы #поддержка старого оборудования

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.