Udostępnij za pośrednictwem


Przetestuj, czy moja aplikacja prawidłowo obsługuje ograniczanie przepustowości

Ograniczanie przepustowości testowania jest trudne, ponieważ występuje rzadko, tylko wtedy, gdy serwer hostujący interfejs API jest obciążony dużym obciążeniem. Za pomocą serwera proxy deweloperskiego można symulować ograniczanie przepustowości w dowolnym interfejsie API i sprawdzić, czy aplikacja obsługuje ją poprawnie.

Aby symulować ograniczanie przepustowości dla dowolnego interfejsu API, użyj metody GenericRandomErrorPlugin. Jeśli używany interfejs API zwraca Retry-After nagłówek, użyj polecenia RetryAfterPlugin , aby sprawdzić, czy aplikacja wycofała się zgodnie z instrukcją interfejsu API.

Symulowanie ograniczania przepustowości w dowolnym interfejsie API

Aby rozpocząć, włącz element GenericRandomErrorPlugin w pliku konfiguracji serwera proxy deweloperów.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.20.0/rc.schema.json",
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
      "configSection": "errorsContosoApi",
      "urlsToWatch": [
        "https://api.contoso.com/*"
      ]
    }
  ]
}

Następnie skonfiguruj wtyczkę tak, aby korzystała z pliku zawierającego błędy, które chcesz symulować.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.20.0/rc.schema.json",
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
      "configSection": "errorsContosoApi",
      "urlsToWatch": [
        "https://api.contoso.com/*"
      ]
    }
  ],
  "errorsContosoApi": {
    "errorsFile": "errors-contoso-api.json"
  }
}

W pliku błędów zdefiniuj odpowiedź ograniczania przepustowości, tak aby była zgodna z rzeczywistą odpowiedzią ograniczania przepustowości interfejsu API:

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.20.0/genericrandomerrorplugin.schema.json",
  "errors": [
    {
      "request": {
        "url": "https://api.contoso.com/*"
      },
      "responses": [
        {
          "statusCode": 429,
          "headers": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ],
          "body": {
            "code": "TooManyRequests",
            "message": "Too many requests"
          }
        }
      ]
    }
  ]
}

Rozpocznij tworzenie serwera proxy przy użyciu pliku konfiguracji i przetestuj aplikację, aby zobaczyć, jak obsługuje ograniczanie przepustowości.

Testowanie poprawnego wycofywania przy użyciu nagłówka Retry-After

Wiele interfejsów API używa nagłówka Retry-After odpowiedzi, aby poinstruować aplikację o wycofywaniu przez określony czas. Podczas symulowania odpowiedzi ograniczania przy użyciu serwera proxy deweloperów można skonfigurować Retry-After nagłówek do wartości statycznej lub użyć wartości dynamicznej, która sprawdza, czy aplikacja czeka zgodnie z instrukcją przed ponownym wywołaniem interfejsu API.

Aby skonfigurować Retry-After nagłówek do wartości statycznej, dodaj nagłówek do odpowiedzi ograniczania przepustowości:

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.20.0/genericrandomerrorplugin.schema.json",
  "errors": [
    {
      "request": {
        "url": "https://api.contoso.com/*"
      },
      "responses": [
        {
          "statusCode": 429,
          "headers": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Retry-After",
              "value": "60"
            }
          ],
          "body": {
            "code": "TooManyRequests",
            "message": "Too many requests"
          }
        }
      ]
    }
  ]
}

W tym przykładzie Retry-After nagłówek jest ustawiony na 60 sekund. Podczas konfigurowania nagłówka na wartość statyczną serwer proxy dewelopera nie kontroluje, czy aplikacja czeka przed ponownym wywołaniem interfejsu API.

Aby sprawdzić, czy aplikacja czeka prawidłowo przed ponownym wywołaniem interfejsu API, zmień wartość nagłówka na @dynamic:

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.20.0/genericrandomerrorplugin.schema.json",
  "errors": [
    {
      "request": {
        "url": "https://api.contoso.com/*"
      },
      "responses": [
        {
          "statusCode": 429,
          "headers": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Retry-After",
              "value": "@dynamic"
            }
          ],
          "body": {
            "code": "TooManyRequests",
            "message": "Too many requests"
          }
        }
      ]
    }
  ]
}

Ponadto rozszerz konfigurację serwera proxy dev za pomocą polecenia RetryAfterPlugin.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.20.0/rc.schema.json",
  "plugins": [
    {
      "name": "RetryAfterPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
      "urlsToWatch": [
        "https://api.contoso.com/*"
      ]
    },
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
      "configSection": "errorsContosoApi",
      "urlsToWatch": [
        "https://api.contoso.com/*"
      ]
    }
  ],
  "errorsContosoApi": {
    "errorsFile": "errors-contoso-api.json"
  }
}

Uwaga

Dodaj element RetryAfterPlugin przed elementem GenericRandomErrorPlugin w pliku konfiguracji. W przypadku dodania go po tym żądaniu żądanie zakończy się niepowodzeniem GenericRandomErrorPlugin , zanim RetryAfterPlugin będzie możliwe jego obsłużenie.

Ta wtyczka śledzi odpowiedzi ograniczania przepustowości i wymusza niepowodzenie żądań wystawionych dla interfejsów API, które są nadal ograniczane.

Więcej informacji