Testare che l'applicazione gestisce correttamente la limitazione della limitazione

La limitazione dei test è difficile perché si verifica raramente, solo quando il server che ospita l'API è in carico elevato. Usando il proxy di sviluppo, è possibile simulare la limitazione in qualsiasi API e verificare se l'applicazione lo gestisce correttamente.

Per simulare la limitazione in qualsiasi API, usare GenericRandomErrorPlugin. Se l'API usata, restituisce un'intestazione Retry-After , usare RetryAfterPlugin per verificare che l'app venga restituita come indicato dall'API.

Simulare la limitazione in qualsiasi API

Per iniziare, abilitare l'oggetto GenericRandomErrorPlugin nel file di configurazione di Dev Proxy.

{
  "$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/*"
      ]
    }
  ]
}

Configurare quindi il plug-in per usare un file contenente gli errori che si desidera simulare.

{
  "$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"
  }
}

Nel file di errori definire la risposta di limitazione in modo che corrisponda alla risposta effettiva di limitazione dell'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"
          }
        }
      ]
    }
  ]
}

Avviare Dev Proxy con il file di configurazione e testare l'app per vedere come gestisce la limitazione.

Testare il backup corretto con l'intestazione Retry-After

Molte API usano l'intestazione Retry-After di risposta per indicare all'app di eseguire il back-off per un periodo di tempo specifico. Quando si simulano risposte con Dev Proxy, è possibile configurare l'intestazione in un valore statico o usare un valore dinamico che verifica se l'app Retry-After è in attesa come indicato prima di chiamare di nuovo l'API.

Per configurare l'intestazione in un valore statico, aggiungere l'intestazione Retry-After alla risposta di limitazione:

{
  "$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"
          }
        }
      ]
    }
  ]
}

In questo esempio l'intestazione Retry-After è impostata su 60 secondi. Quando si configura l'intestazione su un valore statico, Dev Proxy non controlla se l'app è in attesa prima di chiamare nuovamente l'API.

Per testare se l'app è in attesa corretta prima di chiamare nuovamente l'API, modificare il valore dell'intestazione in @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"
          }
        }
      ]
    }
  ]
}

Estendere inoltre la configurazione di Dev Proxy con .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"
  }
}

Attenzione

Aggiungere l'oggetto RetryAfterPluginGenericRandomErrorPlugin prima nel file di configurazione. Se lo si aggiunge dopo, la richiesta avrà esito negativo prima GenericRandomErrorPlugin di RetryAfterPlugin poter gestirla.

Questo plug-in tiene traccia delle risposte di limitazione e ha esito negativo forzatamente le richieste rilasciate alle API ancora limitate.

Altre informazioni