Запись и экспорт действия прокси-сервера

На первый взгляд
Цель: Запись и экспорт активности прокси для разработки в файл отчета
Время: 10 минут
Подключаемые модули:ExecutionSummaryPlugin, MarkdownReporter
Предварительные требования:настройка прокси-сервера разработки

Чтобы записать и экспортировать активность прокси-сервера, используйте плагин ExecutionSummaryPlugin и плагин репортера в файле конфигурации.

В следующем примере показано, как настроить Dev Proxy для записи и экспорта активности прокси с помощью плагина ExecutionSummaryPlugin и плагина MarkdownReporter.

Файл: devproxyrc.json

{
  "plugins": [
    {
      "name": "ExecutionSummaryPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    },
    {
        "name": "MarkdownReporter",
        "enabled": true,
        "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    }
  ],
  "urlsToWatch": [
    "https://jsonplaceholder.typicode.com/*"
  ]
}

Tip

Вместо самостоятельной сборки конфигурации можно скачать готовую api-inventory предустановку, которая записывает URL-адреса, к которым обращается приложение, и сводку о его действиях:

devproxy config get api-inventory
devproxy --config-file "~dataFolder/configs/api-inventory/.devproxy/devproxyrc.json" --urls-to-watch "https://api.contoso.com/*"

Дополнительные сведения см. в разделе Использование предустановленных конфигураций.

Примечание.

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

Чтобы записать действие, прокси-сервер разработки должен быть помещен в режим записи.

Начать запись можно двумя способами:

  • Немедленно запишите. Запуск прокси-сервера с --record параметром, например devproxy --record.
  • Запись экспромт. Нажмите клавишу R во время выполнения прокси-сервера.

Если запись включена, ◉ Recording... отображается в выходных данных прокси-сервера.

Чтобы создать отчет из записанного действия, остановите запись.

Существует два способа остановить запись:

  • Остановите прокси-сервер. Нажмите клавиши CTRL + C.
  • Остановите отложение. Нажмите клавишу S.

По умолчанию действия сгруппированы по URL-адресу. Чтобы группировать действия по типу --summary-group-by сообщения, используйте этот параметр.

devproxy --record --summary-group-by messageType

Где пишутся отчеты

При остановке записи каждый включенный модуль формирования отчетов записывает один файл для каждого отчета, созданного плагином отчетности. Dev Proxy записывает файлы в текущий рабочий каталог, который является папкой, из которой вы запустили Dev Proxy. При запуске Dev Proxy в фоновом режиме, например в конвейере CI, убедитесь, что вы запускаете его из папки, в которой должны храниться отчеты.

Файлы отчетов используют следующий шаблон именования:

<ReportingPlugin>_<Reporter>.<ext>

Например, конфигурация в этой статье создает файл с именем ExecutionSummaryPlugin_MarkdownReporter.md.

Если файл с таким именем уже существует, Dev Proxy не перезаписывает его. Вместо этого он добавляет метку времени в yyyyMMddHHmmss формате к имени файла, например ExecutionSummaryPlugin_MarkdownReporter_20261105103000.md. Dev Proxy регистрирует имя каждого файла отчета, который он записывает, например:

Writing report ExecutionSummaryPlugin to ExecutionSummaryPlugin_MarkdownReporter.md...

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

Репортер Extension
JsonReporter .json (некоторые отчеты используют другое расширение, например .jsonc urlDiscoveryPlugin)
MarkdownReporter .md
PlainTextReporter .txt

Примечание.

Все записи являются локальными. Данные не отправляются в корпорацию Майкрософт.

Запись из скриптов и CI

В скриптах и конвейерах CI/CD нельзя нажать клавиши для запуска и остановки записи. Вместо этого запустите Dev Proxy в фоновом режиме и управляйте записью с помощью Dev Proxy API. Для всех запросов API требуется токен Bearer. Чтобы заранее задать токен, задайте переменной среды DEV_PROXY_API_TOKEN значение не менее 32 символов перед запуском Dev Proxy.

Минимальная последовательность:

  1. Задайте DEV_PROXY_API_TOKEN случайное значение длиной не менее 32 символов.
  2. Запустите прокси-сервер разработки в фоновом режиме: devproxy --detach --as-system-proxy false -c devproxyrc.json
  3. Дождитесь, пока GET /proxy завершится успешно.
  4. Начать запись: POST /proxy с {"recording": true}.
  5. Запустите рабочую нагрузку с переменными среды HTTP_PROXY и HTTPS_PROXY, указывающими на Dev Proxy.
  6. Остановить запись: POST /proxy с {"recording": false}. Запрос возвращается после завершения работы репортеров, поэтому отчеты готовы к моменту его завершения.
  7. Завершите работу Dev Proxy: POST /proxy/stopProxy

Dev Proxy записывает отчеты в папку, из которой он был запущен.

#!/usr/bin/env bash
set -euo pipefail

# 1. use a known API token (at least 32 characters)
export DEV_PROXY_API_TOKEN=$(openssl rand -hex 32)
api=http://127.0.0.1:8897
auth="Authorization: Bearer $DEV_PROXY_API_TOKEN"

# 2. start Dev Proxy in the background
devproxy --detach --as-system-proxy false -c devproxyrc.json

# 3. wait for the API
until curl -sf -H "$auth" "$api/proxy" > /dev/null; do sleep 1; done

# 4. start recording
curl -sf -X POST "$api/proxy" -H "$auth" -H "Content-Type: application/json" -d '{"recording": true}'

# 5. run the workload through Dev Proxy
HTTP_PROXY=http://127.0.0.1:8000 HTTPS_PROXY=http://127.0.0.1:8000 npm test

# 6. stop recording and wait for the reports
curl -sf -X POST "$api/proxy" -H "$auth" -H "Content-Type: application/json" -d '{"recording": false}'

# 7. shut down Dev Proxy
curl -sf -X POST "$api/proxy/stopProxy" -H "$auth"

В примерах используются порт прокси-сервера по умолчанию 8000 и порт API 8897. Задайте переменные среды прокси-сервера только для рабочей нагрузки, чтобы вызовы API не проходили через Dev Proxy. Чтобы перехватить трафик HTTPS, рабочая нагрузка должна доверять корневому сертификату Dev Proxy. Дополнительные сведения о запуске Dev Proxy в конвейерах, включая доверие к сертификату, см. Использование Dev Proxy в сценариях CI/CD.

См. также