Плагин GenericRandomErrorPlugin

Завершается сбоем запросов со случайной выбранной ошибкой из файла, содержащего измеченные ошибки.

снимок экрана командной строки с прокси-сервером разработки, имитирующей одну из ошибок запроса OpenAI API, как определено в файле конфигурации.

Пример конфигурации

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "genericRandomErrorPlugin"
    }
  ],
  "urlsToWatch": [
    "https://api.openai.com/*"
  ],
  "genericRandomErrorPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/genericrandomerrorplugin.schema.json",
    "errorsFile": "errors.json"
  }
}

Свойства конфигурации

Свойство Описание По умолчанию
errorsFile Путь к файлу, который содержит ответы на ошибки. errors.json
rate Процент запросов на сбой со случайной ошибкой. Значение от 0 до 100. 50
retryAfterInSeconds Количество секунд, ожидающих повторных попыток запроса. Включен в заголовок ответа Retry-After для динамического регулирования. 5

Параметры командной строки

Имя Описание По умолчанию
-f, --failure-rate <failure rate> Процент запросов на сбой со случайной ошибкой. Значение от 0 до 100. 50

Замечания

Содержимое ответа

Если вы задаете body свойство ответа на ошибку для объекта JSON или массива, прокси-сервер разработки сериализует его в JSON. Если он задан в строке, прокси-сервер разработки отправляет строку as-isбез окружающих кавычек. Строка, которая начинается с @ , рассматривается как путь к файлу относительно файла ошибок с текстом ответа. Так как прокси-сервер разработки по умолчанию использует Content-Type заголовок, задайте Content-Type для заголовка application/jsonсоответствующее содержимое при возврате содержимого, отличного от JSON, напримерtext/plain.

Значения для ответа Retry-After

Прокси-сервер разработки @dynamic разрешается в заголовке Retry-After для любого кода состояния, например 429, 503или 529. Он соответствует имени заголовка независимо от регистра. При разрешении @dynamicзапрос также регистрируется в RetryAfterPlugin, который сообщает, что приложение отправляет запрос до Retry-After истечения времени.

По умолчанию Retry-After заголовок использует глобальное retryAfterInSeconds значение. Это значение можно переопределить на основе каждого ответа с помощью @dynamic=N синтаксиса в файле ответов об ошибках, где N количество секунд, которое нужно ожидать перед повторным повтором.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/genericrandomerrorplugin.errorsfile.schema.json",
  "errors": [
    {
      "request": {
        "url": "https://api.openai.com/*"
      },
      "responses": [
        {
          "statusCode": 429,
          "headers": [
            {
              "name": "Retry-After",
              "value": "@dynamic=17"
            }
          ],
          "body": {
            "error": {
              "message": "Rate limit exceeded. Wait 17 seconds."
            }
          }
        }
      ]
    }
  ]
}

В этом примере Retry-After заголовок использует 17 секунды для этого ответа независимо от глобального retryAfterInSeconds параметра. Значение увеличивается для каждого последующего регулирования запроса, как и с обычным @dynamic маркером.

Заголовок по умолчанию Content-Type

Если ответ на ошибку имеет body заголовок и не определяет Content-Type заголовок, служба Dev Proxy возвращает ответ с заголовком Content-Type: application/json . Чтобы вернуть другой тип контента, добавьте Content-Type заголовок в ответ в файле ошибок. В прокси-сервере разработки используется указанное значение.

Следующий шаг