Тестирование API 1C Postman

Публикация № 1400564 18.08.21

Разработка - Системная интеграция - Интеграция с WEB

Тестирование вашего API, который вы сделали на 1С.

Введен ие

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

Поехали

Чтобы установить postman, достаточно перейти по ссылке https://www.postman.com/downloads/, нажать кнопку download и кликнуть на полученный exe файл, если, конечно, вы работаете на ОС windows.

 

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

 

 

Первый запрос

Думаю, вы справились с публикацией информационной базы на веб-сервере и собрали адресную строку по статье на ИТС, в моем примере она выглядит так «http://localhost/conf83/hs/orders-api/». Теперь пора выполнить первый запрос. Обратимся к первому методу (в простонародье endpoint), который отвечает за работоспособность нашего API под названием status, открыв новую закладку.

 

 

Можете заметить, что в типовых решениях есть метод ping, даже можете найти стандарт, но на мой субъективный взгляд, лучше использовать нейминг status и по-честному отвечать json'ом. Тут мне хотелось бы понимать, что вы знаете о протоколе http и работали с ним, если нет - то прошу в эту статью.

Коллекции, переменные

Для дальнейшего использования нашего запроса сохраним его, добавив и создав новую коллекцию запросов. Коллекция – список нескольких запросов.

 

 

Чтобы не копипастить постоянно адрес, добавим его в переменную «baseUrl». Переменные в postman выделяются двойными фигурными скобками.

 

 

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

 

 

Для редактирования конкретного значение используйте колонку Current value.

Параметры запроса

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

 

 

Параметры запроса могут быть обязательными и не обязательными. В нашем API тип (он же вид) номенклатуры не обязательный параметр, но может принять 2 значения: Товар, Услуга. Ключ параметра и его значение сами будут добавляться к тексту запроса. Попробуем добавить параметр и указать несуществующий тип

 

 

Вернулся статус 400, который обозначает ошибку. В ответе можно попытаться проанализировать причину. Нет особых правил, какие параметры использовать в запросе, какие из них обязательные и какие значения могут принимать, эти тонкости стоит отражать в документации к вашему API. Но настоятельно рекомендовал бы возвращать коды ошибок 4хх при ее наличии с указанием причины ошибки в ответе. Исправим ошибку?

 

 

 

Обратите внимание, что ключи параметров регистрозависимые.

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

 

 

Идентификатор ручки мы взяли из метода List sku. На самом деле не очень важно, что вы укажете в качестве ключа «skuid» или «sku», так как на самом деле postman отправит запрос на адрес http://localhost/conf83/hs/orders-api/sku/ee9ad060-20ef-11e7-ba56-94de806096e9, подменив ключ на его значение.

Если отправить запрос с несуществующей номенклатурой, то метод должен вернуть статус 404 и текст ошибки

 

 

POST запросы

Давайте попробуем оформить заказ на какой-либо товар. Для этого мы будем использовать post запрос к методу Order. На всякий случай напомню, что методы post в общем случае предназначены для отправки данных, в нашем случае заказа. Попробуем выполнить отправку с пустым телом запроса.

 

 

Получили ошибку 401 и текст ошибки "Отсутствует заголовок аутентификации". Дело в том, что часть ваших методов api могут быть доступны всем без авторизации, остальная - требовать ее наличие. Опять же нет жестких ограничений, все зависит от ваших требований к безопасности и процедуре регистрации клиентов в вашей системе. Так как требования у всех разные, рассмотрим самый простой способ авторизации с предварительной регистрацией через api и получением токена (token).

Регистрация клиента (без смс)

Для регистрации у нас есть метод api-clients, куда следует передать имя пользователя и электронную почту пользователя в формате json на закладке Body. В ответ получим токен, который будем использовать для остальных методов api. Используя данный токен, мы будем понимать, кто (какой пользователь) выполняет данный метод.

 

 

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

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

 

 

Вернемся к нашему методу создания нового заказа, который требовал аутентификации. Обычно токен передается в заголовке запроса. Мы можем указать его на закладке Headers, а можем - на соответствующей закладке аутентификации. Тут огромный список вариантов типов, один из самых распространённых Bearer Token.

 

 

Как вы могли заметить, postman сам добавил соответствующий заголовок Authorization. Выполнив запрос, мы по-прежнему получили ошибку, но уже 400ую, значит аутентификация выполнена, осталось передать информацию для формирования нового заказа.

 

 

Метод вернул 201 статус, значит, заказ создан. В теле ответа видим идентификатор нового заказа. Помните, что в методе sku было поле, которое указывает, доступна ли номенклатура или нет?

 

 

Тестирование api

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

Вся суть тестирования api заключается в анализе ответов каждого метода. К примеру, метод status должен вернуть код 200, а тело сообщения должно содержать поле status со значением OK. Перейдем к закладке Test и напишем первый простой тест, который пишется на javascript.

 

 

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

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

Код выше очень простой и легок в понимании. Статус ответа данного метода должен быть равен значению 200.

Для проверки сообщения добавим строку анализа json, так как api может вернуть html в случае ошибки сервиса, который не удастся распарсить, и проверим значение строкой кода.

pm.expect(pm.response.status).to.eql("OK");

 

Если попытаться обратиться к несуществующему адресу или сравнить поле со значением “NOT OK”, тест упадет.

Теперь можно добавить проверку статуса в каждый метод, кстати ключевое слово function является устаревшим. Методы, которые, что-то создают, как правило, возвращают код 201, а не 200.

 

 

Передача результата между методами api

У нас есть 2 связанных метода sku и sku/:skuid. В первом мы получаем общий список номенклатур, во втором - детальную информацию о номенклатуре с ее ценами и остатками. По сути сейчас нужно скопипастить идентификатор из первого запроса и перенести во второй. Как это сделать автоматически? Итак, наша задача из метода sku получить идентификатор первой доступной номенклатуры и сохранить его в переменную. Метод возвращает поле sku, в котором находится массив всех элементов, доступных и не доступных, см поле available. Чтобы найти необходимый элемент в массиве можно воспользоваться функцией filter(). Из полученного массива обратиться к первому элементу, из которого получить поле id. Все делается в 3 строки кода.

 

 

const response = pm.response.json();
const availableSkus = response.sku.filter((availableSku) => availableSku.available === true);
console.log(availableSkus[0].id);

Останется только сохранить результат поиска в переменную коллекции и обратиться к переменной в следующем методе.

 

 

pm.collectionVariables.set("skuId", availableSkus[0].id);

Отлично, но что если сервис не вернет ни одной доступной к заказу номенклатуры? Мы получим ошибку компиляции, так как обращаемся к первому элементу массива, который может быть пустым. Лучше это поправить, сохранять идентификатор только если первый элемент существует и написать скрипт, который проверяет что, хотя бы одна номенклатура найдена.

 

 

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

 

 

Runner

Теперь все готово, чтобы проверить api в один клик. Закроем все запросы, сохранив их в коллекцию, и откроем Runner.

 

 

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

Приложена доработанная каркасная конфигурация с экзамена 1С:Специалист по платформе на версии платформы 8.3.17.1851.

Скачать файлы

Наименование Файл Версия Размер
Тестирование API 1C Postman:

.dt 185,15Kb
0
.dt 185,15Kb Скачать
Тестирование API 1C Postman:

.json 4,42Kb
0
.json 4,42Kb Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. uno-c 176 21.08.21 15:33 Сейчас в теме
Postman синхронизируется с облаком, поэтому токены и прочие критичные секреты лучше сохранять в переменные как на картинке в статье. Имею в виду картинку про токен.
3. kolya_tlt 66 21.08.21 21:10 Сейчас в теме
(1) для секретов лучше использовать current value, он не передаётся даже если коллекцию кому-то передать
5. uno-c 176 21.08.21 22:50 Сейчас в теме
(3) Да, выше в (1) я написал: как на картинке про токен из Вашей статьи.
2. Rustig 1197 21.08.21 18:04 Сейчас в теме
(0) а чем отличаются файлы, приложенные к публикации?
4. kolya_tlt 66 21.08.21 21:11 Сейчас в теме
(2) первый файл выгрузка dt каркасной конфигурации. Второй - коллекция postman которая получилась в результате статьи.
6. VVi3ard 50 08.09.21 02:00 Сейчас в теме
Поделитесь как валидируетее структуру json? Используете json схему ?
7. kolya_tlt 66 10.09.21 10:55 Сейчас в теме
(6) мне не известен другой способ, кроме как кодом проверять наличие необходимых полей, их типы и размерности. Если в полях гуиды приходится ещё проверять существует ли ссылка с полученным значением.
Отсутствие схемы - плюс и диаметральный минус по сравнению с xml
Оставьте свое сообщение

См. также

Hello world на metadata.js Промо

Инструментарий разработчика WEB Мобильная разработка v8 1cv8.cf Абонемент ($m)

Про браузерные offline-first приложения можно написать миллионы слов. Сэкономлю своё и ваше время и перейду сразу к делу. В статье не будет рекламы и агитации за новые технологии, не будет критики традиционных или попсовых решений. Рассмотрим по шагам разработку простейшей программы на metadata.js. Постараюсь сделать акцент не на том «как это сделано», а «почему сделано именно так»

1 стартмани

11.08.2016    63264    unpete    209    

Создаем интернет-магазин на бесплатной CMS PrestaShop с открытым кодом за 60 минут

Розничная торговля WEB v8 v8::ОУ УТ11 УУ Абонемент ($m)

Описано пошаговое создание полноценного действующего интернет-магазина. Бесплатно. Без программирования. Без навыков администрирования. Для "чайников".

1 стартмани

31.05.2021    1423    andryandry    0    

Перенос всех логов в Elasticsearch

WEB v8 Абонемент ($m)

В качестве стандартного места хранения логов в "1С:Предприятие" используется Журнал регистрации. Также часто для хранения служебных событий создают специальные Регистры сведений. Но у этих решений есть свои недостатки. В статье описан подход для хранения любых логов в самой популярной свободной поисковой системе Elasticsearch.

1 стартмани

15.07.2020    4615    kuleshov.x    5    

Выбираем российского провайдера для интеграции с WhatsApp

WEB Интеграция v8 Россия Абонемент ($m)

Собственно, почему выбираем именно провайдера и почему российского? WhatsApp, создавая свое API, преследовал две цели - делать деньги и минимизировать спам. И чтобы убить сразу двух зайцев, было принято решение предлагать API исключительно через партнеров. Ну а вопрос по поводу российского партнера скорее уже риторический. И не только из-за курса рубля, но и из-за таланта работать с российскими телефонными номерами, коим одарены далеко не все провайдеры. Между тем статья не претендует на всесторонний анализ всех возможностей всех провайдеров. Мы копнем лишь верхушку айсберга этого немаленького рынка.

1 стартмани

19.05.2020    7363    ripreal1    5    

Демо связи веб сервисов 1С и php Промо

Практика программирования Математика и алгоритмы WEB v8 1cv8.cf Абонемент ($m)

Демонстрация обращения к веб сервису 1С из php. Пример простейший, уровня hello world. Дана одна страница и информационная база 1С с одним справочником и одним веб сервисом. Веб сервис выдаёт содержимое справочника по запросу странички.

1 стартмани

19.07.2013    32767    Трактор    20    

Telegram bot API - разбор документации с примерами

WEB v8 Абонемент ($m)

Перевод документации на язык 1С.

1 стартмани

06.04.2020    77835    leongl    67    

Синтез речи из текста с помощью Яндекс SpeechKit

WEB v8 1cv8.cf Абонемент ($m)

В статье описан процесс подключения Яндекс SpeechKit API и программная реализация синтеза речи из текста с помощью этого API. Тестировалось на релизе платформы 8.3.16.1224. Может использоваться в любой конфигурации. Синтез речи может использоваться для самых разных целей, в моём случае потребовалось перевести лекции из текстовых файлов в звук

1 стартмани

05.04.2020    9234    m0zg153    2    

Вариант реализации REST API для 1С-Битрикс Управление сайтом

WEB v8 Россия Абонемент ($m)

В статье опишу вариант обмена 1С УТ 11.4 и 1С-Битрикс управление сайтом с иcпользованием компонентов Symfony, в качестве примера обмен данными по товарам.

1 стартмани

28.01.2020    8711    malikov_pro    2    

Примеры пользования web сервисов 1С из браузера Промо

WEB Практика программирования v8 1cv8.cf Абонемент ($m)

Даны примеры реализации доступа к web сервисам 1С из браузера. Примеры web сервисов, а также javascript'ы для доступа к этим сервисам. AJAX доступ к 1С.

1 стартмани

29.06.2008    156683    Трактор    233    

"Живые" картинки со Snap.SVG

Практика программирования WEB Работа с интерфейсом v8 Абонемент ($m)

В статье рассмотрен пример использования http-сервисов для визуализации данных

1 стартмани

24.10.2019    15109    blackhole321    7    

Интеграция 1С с сайтом (магазином) WordPress (WooCommerce) с помощью Rest API сайта. Часть 1. Авторизация

WEB v8 Абонемент ($m)

Интеграция 1С с сайтом (магазином) WordPress (WooCommerce) с помощью функционала Rest API предоставляемого платформой (CMS) WordPress (WooCommerce). Без дополнительных приложений на PHP/вставьте сюда любой другой язык программирования/.

1 стартмани

12.10.2019    46226    osivv    36    

АИТП. Автоматизируем управление ресурсами на примере Яндекс.Почта для домена

WEB v8 1cv8.cf Абонемент ($m)

В статье демонстрируется использование программного пакета АИТП для автоматизации предоставления ИТ-ресурсов сотрудникам на примере управления почтовыми ящиками Яндекс.Почта для домена.

1 стартмани

26.08.2019    6147    blackhole321    4    

Использование HTTP-сервиса для создания "фронтенда" HTML/CSS/jQuery с кэшированием

WEB v8 1cv8.cf Абонемент ($m)

В статье описан способ создания "фронтенда" на HTML/CSS/jQuery и скрипт кеширования AJAX запросов на PHP.

1 стартмани

06.08.2019    15152    Sedaiko    28    

Обмен с интернет-магазином на платформе DOCPART

WEB Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v8 1cv8.cf Абонемент ($m)

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

10 стартмани

04.07.2019    6158    Johny_v    24    

1C + Python + Django Rest Framework + Vue.js. Опыт несложной full-stack разработки

Практика программирования Внешние источники данных Обмен через XML WEB Разработка v8 1cv8.cf Абонемент ($m)

В этой статье мы рассмотрим путь и основные моменты создания небольшого вэб-сервиса, который мы называем "Онлайн Прайс-лист". Выгрузка из 1С, бэкенд, фронтенд, получение заказов в 1С.

1 стартмани

22.04.2019    40913    riposte    69    

Подключение к REST API через OAuth протокол из 1С

WEB v8 1cv8.cf Абонемент ($m)

В статье описаны варианты подключения И решение граблей по подключению к REST API через протокол OAuth 2.0 из 1С. При разработке такого подключения для получения данных и загрузки в базу 1С я столкнулся с некоторыми проблемами, решил их и хочу поделиться этими наработками.

1 стартмани

06.09.2018    16991    chemezov    12    

HTTP Сервисы: Путь к своему сервису. Часть 1

Практика программирования WEB v8 1cv8.cf Абонемент ($m)

Уже много было написано про http-сервисы, но то и дело всплывают «Новые» статьи по обмену между базами V8 по COM, что «Немножко» удивляет. Решил внести свои 5 копеек, поработаем с http-сервисом.

1 стартмани

15.07.2018    129334    dsdred    38    

А чё это вы здесь делаете, а?

WEB v8 1cv8.cf Абонемент ($m)

Разработчикам тиражных обработок близка и понятна проблема обратной связи с пользователем. Много важного и полезного можно почерпнуть, зная, что делает бухгалтер, который запустил обработку. В большом мире вэба сбор статистики на сайте дело привычное и даже обязательное. Эта статья покажет практику применения инструментов сбора статистики из мира веба для обработок на платформе 1С:Предприятие.

1 стартмани

21.01.2018    25025    infosoft-v    42    

Пример заполнения/создания файла XML из XSD схемы, используя XDTO

Обмен через XML WEB v8 1cv8.cf Абонемент ($m)

Добрый день, коллеги! Наконец-то дошли руки написать сию статью. Хочу поделиться своим опытом по разбору xsd схемы используя Фабрику XDTO, а также связанным с этим XML файлом. Думаю, наверняка кому-то понадобится.

1 стартмани

21.12.2017    57718    sandybaev    28    

Получение данных из Wialon Hosting через HTTP запросы (Remote API)

WEB v8 1cv8.cf Автомобили, автосервисы Россия Абонемент ($m)

Статья будет полезна для быстрого старта работы с Wialon Hosting. Здесь я опишу основные принципы работы с системой Wialon через Remote API.

1 стартмани

12.09.2017    27263    maxopik2    26    

Google OAuth и мобильное приложение

Мобильная разработка Обмен данными 1С Внешние источники данных WEB v8 v8::Mobile 1cv8.cf Абонемент ($m)

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

1 стартмани

29.08.2017    11947    stveans@gmail.com    3    

Заполнение ОГРН с использованием Инструментов разработчика

Обработка справочников WEB v8 Россия Абонемент ($m)

Вот и до нашей организации добралось требование указывать в отчетности для ГлавКонтроля ОГРН контрагента. Как всегда, задача возникла внезапно, и решить ее нужно было "вчера".

1 стартмани

14.04.2017    6787    vsuh    0    

Передача большого количества объектов через Web-сервисы

WEB v8 УТ11 Абонемент ($m)

Один из вариантов передачи большого количества объектов при использовании Web-сервисов.

1 стартмани

31.01.2017    16096    SinglCOOLer    14    

Пошаговая инструкция настройки web-сервисов для 1Сv8.3 и IIS 8.5

Практика программирования WEB IIS v8 1cv8.cf Абонемент ($m)

Пошаговая инструкция настройки web-сервисов для 1Сv8.3 и IIS 8.5. Windows Server 2012 R2 Standard, 1С:Предприятие 8.3 (8.3.4.465)

30.04.2014    454233    alexstey    105    

Пошаговая инструкция по созданию мобильного приложения для iOS с обменом через WEB сервисы Часть II.

Практика программирования WEB v8 Абонемент ($m)

Пошаговая инструкция по созданию мобильного приложения для iOS с обменом через WEB сервисы Часть II.

1 стартмани

16.05.2013    18399    amrec    11