Документация Переменные в цепочках записанного трафика

Переменные в цепочках записанного трафика

Рекордер захватывает запросы и ответы дословно. При экспорте сессии
в скрипт (коллекция Postman, нагрузочный или функциональный тест,
моки) литералы — токены, идентификаторы заказа, CSRF — попадают
в результат как есть. Как только бэкенд ротирует любой из них,
сгенерированный артефакт перестаёт работать.

Опция chain-variables превращает эти литералы в переменные.

Что находится автоматически

Движок сканирует ответ каждого записанного запроса и ищет, какие
значения позже появляются в запросе следующего. Источники:

  • ключи в JSON (любой вложенности: data.user.id, items[0].uuid)
  • заголовки ответа (X-CSRF-Token, X-Trace-Id и т.п.)
  • пары Set-Cookie
  • заголовки с URL внутри (Location, Link, Content-Location) —
    и сам URL целиком, и каждый его path / query параметр отдельно

Точки подстановки:

  • сегменты URL-пути
  • значения query-строки
  • заголовки запроса (Authorization: Bearer <token> —
    префикс Bearer сохраняется)
  • cookies в Cookie:
  • поля application/x-www-form-urlencoded
  • текстовые поля multipart/form-data (файлы пропускаются)
  • скаляры в JSON-теле любой вложенности

Как ищется имя переменной

Движок сравнивает значения целиком (подстроки не учитываются —
чтобы не было ложных совпадений) и генерирует читаемое имя из
исходного пути:

Источник Имя переменной
response.body.json.user.id user_id
response.body.json.items[0].uuid items_0_uuid
response.header.X-CSRF-Token x_csrf_token
response.set-cookie.session session_cookie
response.header.Location:query.code code

Все точки подстановки в последующих запросах переписываются с
{{name}} вместо литерала.

Числовые значения (12345, 987654321) по умолчанию пропускаются —
короткие целые ID повторяются между независимыми эндпойнтами и
давали бы шумные переменные. Включить через флаг
Include numeric values.

Где включить

В расширении (Mockarty Capture)

На вкладке Действия в side-panel расширения:

☑ Заменять связанные значения на {{var}}

По умолчанию ВКЛ. Виден только когда среди доступных действий есть
хоть одно экспортирующее скрипт. Тогл влияет сразу на все «Save as …»
кнопки — коллекция Postman, функциональный тест, нагрузочный скрипт,
моки.

В UI админки

В меню Export записанной сессии есть тот же тогл рядом с
выбором формата.

Через API

Добавь ?variableize=1 к:

  • POST /api/v1/recorder/:id/export (HAR)
  • POST /api/v1/recorder/:id/export-postman
  • POST /api/v1/recorder/:id/export-perf
  • POST /api/v1/recorder/:id/export-test
  • POST /api/v1/recorder/:id/mocks

Через CLI

# Превью переписывания — переменные + extract-шаги, без скачивания.
mockarty-cli recorder variableize <session-id>

# С опциями:
mockarty-cli recorder variableize <session-id> \
  --include-numeric --max-vars 32 --entries e1,e2,e3

Что попадает в сгенерированные артефакты

Формат Подстановки в запросах Извлечение / seed
Postman v2.1 {{var}} в URL/header/body pm.collectionVariables.set(...) в test-событиях источников + блок variable с захваченными значениями
Perf-скрипт JS-template-конкатенация: "prefix/" + user_id var name = "<sample>"; в шапке + комментарий // := на source-запросе с путём к response
Test-скрипт Та же JS-конкатенация var name = r1.body.x; строки извлечения после исходного запроса
Моки {{var}} в http.route / теле / заголовках (моки сами потребляют переменные в рантайме)
HAR {{var}} в URL/теле/заголовках consumer’а Sidecar в response-header X-Mockarty-Variables (JSON {variables, extracts})

Ограничения

  • Переменные ищутся только из предыдущих ответов; обратные
    связи не делаются (и не имеют смысла в реальной цепочке).
  • Слишком короткие / тривиальные значения (true, null, 42,
    HTTP-коды) по умолчанию фильтруются.
  • Если одно и то же значение пришло из нескольких источников,
    используется одна переменная; повторные источники ссылаются на
    то же имя.
  • Файловые части multipart/form-data не извлекаются (это бинарь).
  • Повторный запуск Variableize на уже параметризованных шагах —
    no-op, не будет «двойной» подстановки.

Если ничего не нашлось

  • Понизь минимальную длину значения через API
    (minValueLength) — по умолчанию 4 символа.
  • Включи Include numeric values, если в цепочке только голые
    целочисленные ID без префиксов.
  • Проверь, что в захваченном ответе реально есть то значение,
    которое потом потребляет следующий запрос. Некоторые прокси
    обрезают тела — рекордер показывает байты ровно как видел.