Тестирование это важный этап при разработке. Если разработка представляет собой программу, функциональный модуль или класс, то можно обойтись unit-тестами. Если же разработка представляет собой реализацию интеграционных процесса, то необходимо также выполнять тестирование извне. Имеются несколько инструментов такого тестирования — Postman, SoapUI итд, однако они имеют ограничения. Недавно нашел интересный инструмент — Bruno
Bruno это быстрый opensource API клиент, который можно установить на разные ОС. Представляет собой Bruno Desktop App и Bruno Cli.
Попробуем сделать небольшой API-тест к REST-сервису который доступен по адресу http://192.168.1.4:8000/sap/zrest, который предоставляет возможность получать данные бизнес-партнеров (БП) в SAP.
В Bruno создаем коллекцию, в которой будет 2 шага:
- Авторизация (FetchToken)
- Получение данных бизнес-партнера(GetBP)

Для созданной коллекции создадим среду с необходимыми переменными

В переменных user и pass пока будем сохранять переменных — в дальнейшем надо будет перенести в соответствии с документом.
BaseURL хранит настройку ссылки на REST-сервис
user/pass — данные авторизации на сервисе
client — мандант с тестовыми данными
XCSRFToken — переменная для хранения токена авторизации
cookie — переменная для хранения куки — в частности нужен SAP_SESSIONID
Запрос FetchToken
FetchToken выполняет авторизацию пользователя в системе SAP, получает и сохраняет токен и SAP_SESSIONID в переменных среды.

Данные запрос передает заголовок X-Csrf-Token со значением fetch для генерации токена (генерация токена происходит в метода HANDLE_CSRF_TOKEN handler-класса)
Для авторизации необходимо указать тип авторизации и необходимые данные

После получения токена его и SAP_SESSIONID необходимо сохранить в переменных среды. Для этого можно добавить скрипт, который выполится после получения ответа. Пока явно пропишем сохранение cookie[2]. В дальнейшем лучше реализовать нахождение SAP_SESSIONID автоматически.

1 2 3 4 |
const sToken = res.getHeader("x-csrf-token"); bru.setEnvVar("XCSRFToken",sToken) const cookie = res.getHeader("set-cookie"); bru.setEnvVar("cookie",cookie[2]) |
Таким образом на первом шаге мы получаем и сохраняем токен и SAP_SESSIONID в переменных среда. Их мы будем использовать в последующих шагах.
Запускаем созданный запрос. На закладке Headers должен показать полученный токен

Запрос GetBP
Данный запрос получает данные о БП с помощью GET bupa

При этом в разделе Headers передаем X-Csrf-Token(токен) и cookie.
Запускаем запрос. На закладке Timeline должен показать отправку полученного на первом шаге токена

На закладке Response мы увидем данные БП

Таким образом мы сделали простой API-тест, который запрашивает данные БП из системы SAP.
В следующей части добавим обновление данных БП и попробуем вызывать данный тест с командной строки, с помощью Bruno cli. Вызов этой утилиты можно будет запланировать с периодическим выполнением и тогда мы получим возможность автоматического тестирования API