Иногда при настройке мониторинга HTTP(S) или нагрузочного теста для проверки производительности веб-сайта или API необходимо отправлять HTTP-запросы с динамически изменяющейся полезной нагрузкой. Например, вам может потребоваться отправить JSON с уникальным идентификатором продукта, чтобы добавить новый продукт в базу данных приложения электронной коммерции, или фактическую дату и время на веб-сервер и т.д. Или, скажем, вам нужно параметризировать полезную нагрузку для загрузки теста API.

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

Как правило, динамическая настройка полезной нагрузки включает в себя два основных этапа:

  • Определение данных тела с динамическими параметрами (JSON, XML, Text, JavaScript, HTML) в поле Post Data (Patch, Put).
  • Объявление метода разбора в поле «Подготовьй сценарий». Если метод разбора не указан, система будет обрабатывать данные тела в качестве текста.

При необходимости параметризации данных тела запроса HTTP соответствующие параметры контекста могут быть объявлены в поле Prepare Script или с
опцией Параметры контекста
управления.

Использование бритвенного двигателя

Данные JSON или содержимое скрипта, передаваемые в теле запроса HTTP, могут быть динамически изменены с помощью синтаксиса двигателя Razor. При работе с синтаксисом Razor в поле Post Data используйте префикс @ , чтобы пометить следующий текст как элемент кода C# (встроенные выражения, блоки с одной инструкцией или блоки с несколькими операторами). Чтобы узнать больше о синтаксисе Razor, пожалуйста, посетите https://www.w3schools.com/asp/razor_syntax.asp.

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

Dotcom-Monitor поддерживает модель Razor (определяет структуру входного сообщения Razor) со следующими свойствами:

  • @Model.DeviceID – переменная, которая возвращает уникальный идентификатор текущего устройства мониторинга.
  • @Model.TaskID – переменная, которая возвращает уникальный идентификатор текущей задачи мониторинга.
  • @Model.SessionID – переменная, которая возвращает уникальный идентификатор текущей сессии мониторинга.

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

@Model["ContextParameterName"]

Чтобы уведомить систему о том, что данные в корпусе запроса должны быть разобран двигателем Razor в поле Prepare Script, добавьте метод ProcessPostDataByRazor (currentTask). В противном случае элементы кода из Post Data будут разобрат как текст.

пример

Допустим, мы хотим отправить идентификатор устройства и тестовый маркер в теле HTTP-запроса, затем нам нужно настроить поле Post Data следующим образом:

{ "Device": "@Model.DeviceID", "ContextTest": "@Model["Test"]" }

Затем нам необходимо установить значение параметра контекста и метод разбора в поле Prepare Script:

context.Test = "Website Availability Monitoring";
ProcessPostDataByRazor(currentTask);

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

Использование масок данных в запросах HTTP

Вы можете ссылаться на параметры контекста в теле POST, обернув ссылку на имя параметра маркерными знаками с обеих сторон. Таким образом, ссылка на параметр контекста “GUID” будет введена так:

{"ContextGuid": "%%%Guid%%%"}

Здесь процентные знаки говорят системе, что это ссылка параметра контекста, а не часть строки.

Чтобы уведомить систему о том, что данные в корпусе запроса должны быть разобран указанной маской в поле Prepare Script, добавьте ProcessPostDataByMask (текущийtask, “маркерные знаки”). В противном случае параметр контекста будет проигнорирован и передан в качестве текста. В приведенной выше примере поле «Подготовьй сценарий» будет содержать следующую строку:

ProcessPostDataByMask(currentTask, "%%%");

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