RequestStep узел - это узел для отправки HTTP-запросов. Наш инструмент позволяет гибко сконфигурировать запрос и использовать его как отдельно, так и в составе сценария.
Для создания RequestStep узла необходимо в контекстном меню Folder узла или Project узла выбрать пункт Add node -> RequestStep.
В дереве проекта RequestStep узел выглядит следующим образом
Остановимся на узле поподробнее. Цвет левого верхнего кружка указывает на статус HTTP-запроса: серый - если запрос не выполнялся, зеленый - в случае успешного HTTP-кода (например, 200, 201 и т.д.), красный - в случае неудачного HTTP-кода (например, 404, 500 и т.д.). Цвет иконки листочка указывает на статус выполнения дочернего Assertion узла: серый - если запуск не выполнялся, зеленый - в случае если после запуска, Assertion узел либо отсутствует, либо существует и его выполнение завершилось успешно, красный - в случае, если выполнение Assertion узла завершилось с ошибкой (не все проверки были пройдены).
В дереве для данного типа узла доступны следующие пункты меню:
Add node. Добавление узла-потомка. В подменю можно выбрать тип узла.
Rename. Переименовать узел.
Duplicate. Сделать копию узла. Новый узел будет иметь название NodeName [Copy [number]].
Remove node. Удалить узел.
Run. Запустить узел.
Share. Поделиться узлом. При это в буфере обмена создается ссылка, которая содержит всю информацию о текущем узле.
Show in explorer. Открыть папку с узлом в файловом менеджере.
При создании RequestStep узла (или при двойном клике по уже существующему) открывается вкладка данного узла. Выглядит она следующим образом:
Рассмотрим подробнее каждую из частей интерфейса.
Верхняя часть запроса выглядит следующим образом:
На скрине выше отмечены следующие пункты
Метод запроса. На данный момент поддерживаются следующие методы:
GET — получение ресурса
POST — создание ресурса
PUT — обновление ресурса
DELETE — удаление ресурса
PATCH — для частичного изменения ресурса
OPTIONS — для описания параметров соединения с ресурсом
Поле для URL.
Кнопка для запуска запроса
Кнопка редактирования переменных
Ниже представлена панель редактирования заголовков, query параметров, авторизации и тела запроса. Так выглядит данная панель для POST запросов:
Данная панель организована в виде вкладок. На данный момент существуют следующие вкладки:
Headers - для редактирования списка HTTP-заголовков
Query parameters - для редактирования списка query параметров
Body - для конфигурирования тела запроса
Authorization - для конфигурирования авторизаций.
Other - конфигурирование прочих параметров запроса
Вкладки Headers и Query parameters с точки зрения интерфейса очень похожи - это обычные таблицы с возможностью массового редактирования и отключением строк. Отдельно стоит добавить, что заголовки поддерживают механизм установки HTTP-заголовков по умолчанию.
Вкладка Other выглядит следующим образом:
На данный момент можно отредактировать параметр Requires SSL certificates be valid - проверять валидность SSL-сертификата узла. Параметр по умолчанию: Inherit, наследует значение родителя узла, если у родителя задан Inherit, параметр выключен. Возможные варианты:
Yes — да
No — нет
Inherit — наследовать
Отдельно остановимся на вкладке Body, которая выглядит следующим образом:
В выпадающем списке можно выбрать тип тела. На данный момент поддерживаются следующие типы
JSON - для отправки JSON данных. Сами данные редактируются в текстовом поле с подсветкой JSON-синтаксиса и с поддержкой механизма переменных . При отправке запроса в список HTTP-заголовков добавляется заголовок Content-Type
со значением application/json
.
Form data - для редактирования multipart/form-data
форм. Имеет табличный вид с возможностью массового редактирования . В строках таблицы в качестве значения могут выступать как обычные строки, так и ссылки на файлы.
Form URL encoded - для редактирования application/x-www-form-urlencoded
форм. Имеет табличный вид с возможностью массового редактирования .
File - для отправки в теле содержимое файла.
XML - для отправки XML данных. Сами данные редактируются в текстовом поле с подсветкой XML-синтаксиса и с поддержкой механизма переменных . При отправке запроса в список HTTP-заголовков добавляется заголовок Content-Type
со значением application/xml
.
Text - для отправки текстовых данных. Сами данные редактируются в текстовом поле с поддержкой механизма переменных . При отправке запроса в список HTTP-заголовков добавляется заголовок Content-Type
со значением text/plain
.
Давайте выполним запрос на url https://testmace-stage.herokuapp.com/posts и посмотрим, как выглядит секция ответа:
Верхняя часть секции показывает краткую информацию об ответе: код ответа с указанием, успешный он или нет, время выполнения запроса и размер ответа.
Нижняя область секции ответа разбита на несколько вкладок:
Response body - содержит тело ответа, представленное различными способами. На данный момент имеются следующие представления тела ответа:
Parsed- ответ в виде дерева. Каждый лист дерева имеет контекстное меню для создания Assertion узлов и для работы с динамическими переменными
JSON - JSON-подсветка тела ответа. Существует только в случае, когда тело ответа пришло в формате json.
XML - XML-подсветка тела ответа. Существует только в случае, когда тело ответа пришло в формате XML.
HTML - HTML-подсветка тела ответа. Показывается в случае, если тело ответа - HTML-страница
Text - текстовое представление тела ответа без подсветки
Preview - отрендеренный вариант тела ответа. Показывается в случае, если тело ответа - HTML-страница
Response headers - список HTTP-заголовков ответа
Assertions - список assertion-ов, которые содержатся в дочернем Assertion узле.
RequestStep узел представляет из себя папку с названием узла, внутри которой содержится файл index.yml, имеющий следующий формат:
{"type": "object","properties": {"type": {"description": "Type of Folder node","const": "RequestStep","type": "string"},"assignVariables": {"description": "List of variables assignments","type": "array","items": {"$ref": "#/definitions/AssignVariable"},"default": []},"requestData": {"$ref": "#/definitions/IRequestData"},"authData": {"$ref": "#/definitions/IAuthorizationData","description": "Authorization parameters"},"children": {"description": "List of children names","type": "array","items": {"type": "string"},"default": []},"variables": {"$ref": "#/definitions/NodeVariables","description": "Node variables dictionary"},"name": {"description": "Node name","type": "string"}},"required": ["assignVariables","authData","children","name","requestData","type","variables"],"definitions": {"AssignVariable": {"type": "object","properties": {"path": {"description": "Path in $response variable (e.g. body.id)","type": "string"},"assign": {"$ref": "#/definitions/NodeReference","description": "Link on target node (one of parents)"},"variable": {"description": "Name of dynamic variable in target node","type": "string"}},"required": ["assign","path","variable"]},"NodeReference": {"type": "object","properties": {"refNodePath": {"description": "Absolute path to node","type": "string"},"type": {"description": "Marker of reference entity","const": "reference","type": "string","default": "reference"}},"required": ["refNodePath","type"]},"IRequestData": {"type": "object","properties": {"request": {"description": "Common request parameters","type": "object","properties": {"method": {"$ref": "#/definitions/RequestMethod","description": "HTTP-method"},"url": {"type": "string"}},"required": ["method","url"]},"params": {"description": "Query parameters","type": "array","items": {"$ref": "#/definitions/NameValueParam"}},"body": {"$ref": "#/definitions/IRequestBody","description": "Body parameters"},"headers": {"description": "Headers","type": "array","items": {"$ref": "#/definitions/NameValueParam"}},"disabledInheritedHeaders": {"description": "Names of disabled headers","type": "array","items": {"type": "string"}},"strictSSL": {"$ref": "#/definitions/StrictSSLOptions","description": "Requires SSL certificates be valid"}},"required": ["body","disabledInheritedHeaders","headers","params","request","strictSSL"]},"RequestMethod": {"enum": ["DELETE","GET","OPTIONS","PATCH","POST","PUT"],"type": "string"},"NameValueParam": {"type": "object","properties": {"name": {"type": "string"},"value": {"type": "string"},"isChecked": {"type": "boolean"}},"required": ["name","value"]},"IRequestBody": {"type": "object","properties": {"type": {"$ref": "#/definitions/RequestBodyType","description": "Type of body"},"jsonBody": {"description": "JSON string of body","type": "string"},"xmlBody": {"description": "XML string of body","type": "string"},"textBody": {"type": "string"},"formData": {"description": "multipart/form-data form","type": "array","items": {"$ref": "#/definitions/RequestStepFormData"}},"formURLEncoded": {"description": "application/x-www-form-urlencoded form","type": "array","items": {"$ref": "#/definitions/NameValueParam"}},"file": {"description": "Link on file, which will be used as a content for body","type": "string"}},"required": ["file","formData","formURLEncoded","jsonBody","textBody","type","xmlBody"]},"RequestBodyType": {"enum": ["File","FormData","FormURLEncoded","Json","Text","Xml"],"type": "string"},"RequestStepFormData": {"type": "object","properties": {"type": {"$ref": "#/definitions/FormDataField"},"name": {"type": "string"},"value": {"type": "string"},"isChecked": {"type": "boolean"}},"required": ["name","type","value"]},"FormDataField": {"enum": ["File","Text"],"type": "string"},"StrictSSLOptions": {"enum": ["Inherit","No","Yes"],"type": "string"},"IAuthorizationData": {"type": "object","properties": {"type": {"type": "string"}},"required": ["type"]},"NodeVariables": {"type": "object","additionalProperties": {"type": "string"}}},"$schema": "http://json-schema.org/draft-07/schema#"}