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.
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.
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 RetryAfterPlugin
GenericRandomErrorPlugin
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.
Feedback su Dev Proxy
Dev Proxy è un progetto di open source. Selezionare un collegamento per fornire feedback: