Fouten opsporen met Dev Proxy

In één oogopslag
Doel: Fouten in uw toepassing opsporen terwijl Dev Proxy API-fouten simuleert
Tijd: 15 minuten
Plugins:GenericRandomErrorPlugin
Vereisten: Dev Proxy instellen, VS Code instellen

Wanneer u toepassingen bouwt die API's aanroepen, moet u ervoor zorgen dat uw code fouten correct afhandelt. Door Dev Proxy te combineren met het foutopsporingsprogramma van Visual Studio (VS) Code, kunt u API-fouten simuleren en de code voor foutafhandeling doorlopen om te controleren of deze correct werkt.

Overzicht

Foutopsporing met Dev Proxy omvat drie stappen:

  1. VS Code configureren om HTTP-aanvragen te routeren via Dev Proxy
  2. Dev Proxy configureren om specifieke fouten te simuleren
  3. Installeer onderbrekingspunten in uw foutafhandelingscode en voer foutopsporing uit.

VS Code configureren voor foutopsporing met Dev Proxy

Hoe u VS Code configureert, is afhankelijk van de programmeertaal die u gebruikt. In de volgende secties ziet u hoe u VS Code configureert voor Node.js, .NET en Python toepassingen.

Node.js

Als u fouten wilt opsporen in een Node.js-toepassing met Dev Proxy, configureert u het bestand om de variabelen voor de proxyomgeving in te stellen en schakelt u verificatie van TLS/SSL-certificaten uit.

Bestand: .vscode/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Debug with Dev Proxy",
      "skipFiles": [
        "<node_internals>/**"
      ],
      "program": "${workspaceFolder}/index.js",
      "env": {
        "NODE_ENV": "development",
        "http_proxy": "http://127.0.0.1:8000",
        "https_proxy": "http://127.0.0.1:8000",
        "GLOBAL_AGENT_HTTP_PROXY": "http://127.0.0.1:8000",
        "NODE_TLS_REJECT_UNAUTHORIZED": "0"
      }
    }
  ]
}

Belangrijk

Met de instelling wordt verificatie van TLS/SSL-certificaten uitgeschakeld. Gebruik deze instelling alleen tijdens de ontwikkeling. Voor een veiligere benadering kunt u het Dev Proxy-certificaat rechtstreeks vertrouwen:

macOS/Linux:

"NODE_EXTRA_CA_CERTS": "${env:HOME}/.devproxy/rootCert.pem"

Windows:

"NODE_EXTRA_CA_CERTS": "${env:USERPROFILE}\\.devproxy\\rootCert.pem"

De variabele wordt gebruikt door het pakket, dat proxyondersteuning biedt voor veel Node.js HTTP-bibliotheken. Zie Dev Proxy gebruiken met Node.js toepassingen voor meer informatie over het configureren van verschillende HTTP-bibliotheken.

.NET

.NET toepassingen automatisch de systeemproxy-instellingen gebruiken. Als u fouten wilt opsporen in een .NET-toepassing met Dev Proxy, hoeft u doorgaans geen omgevingsvariabelen in te stellen. Maak een eenvoudige foutopsporingsconfiguratie:

Bestand: .vscode/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug with Dev Proxy",
      "type": "coreclr",
      "request": "launch",
      "preLaunchTask": "build",
      "program": "${workspaceFolder}/bin/Debug/net8.0/MyApp.dll",
      "args": [],
      "cwd": "${workspaceFolder}",
      "console": "internalConsole",
      "stopAtEntry": false
    }
  ]
}

Als uw toepassing de systeemproxy niet ophaalt, stelt u expliciet de proxyomgevingsvariabelen in:

Bestand: .vscode/launch.json (met expliciete proxy-instellingen)

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug with Dev Proxy",
      "type": "coreclr",
      "request": "launch",
      "preLaunchTask": "build",
      "program": "${workspaceFolder}/bin/Debug/net8.0/MyApp.dll",
      "args": [],
      "cwd": "${workspaceFolder}",
      "console": "internalConsole",
      "stopAtEntry": false,
      "env": {
        "http_proxy": "http://127.0.0.1:8000",
        "https_proxy": "http://127.0.0.1:8000"
      }
    }
  ]
}

Aanbeveling

In Windows en macOS vertrouwt .NET het Dev Proxy-certificaat automatisch als u het hebt geïnstalleerd als een vertrouwd basiscertificaat tijdens de Dev-proxy-installatie. In Linux moet u het certificaat mogelijk handmatig vertrouwen. Raadpleeg de documentatie van uw distributie voor het configureren van vertrouwde certificaten.

Python

Als u fouten wilt opsporen in een Python-toepassing met Dev Proxy, configureert u het bestand launch.json om de proxyomgevingsvariabelen in te stellen. De configuratie is afhankelijk van of u de bibliotheek of andere HTTP-bibliotheken gebruikt.

Bestand: .vscode/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug with Dev Proxy",
      "type": "debugpy",
      "request": "launch",
      "program": "${workspaceFolder}/main.py",
      "console": "integratedTerminal",
      "env": {
        "HTTP_PROXY": "http://127.0.0.1:8000",
        "HTTPS_PROXY": "http://127.0.0.1:8000",
        "REQUESTS_CA_BUNDLE": ""
      }
    }
  ]
}

Belangrijk

Als u een variabele op een lege tekenreeks instelt, geeft u aan de bibliotheek door dat TLS/SSL-certificaatverificatie moet worden overgeslagen. Gebruik deze instelling alleen tijdens de ontwikkeling.

Voor een veiligere benadering wijst u het Dev Proxy-certificaat aan:

macOS/Linux:

"REQUESTS_CA_BUNDLE": "${env:HOME}/.devproxy/rootCert.pem"

Windows:

"REQUESTS_CA_BUNDLE": "${env:USERPROFILE}\\.devproxy\\rootCert.pem"

Als u de bibliotheek gebruikt, configureert u in plaats daarvan TLS/SSL-verificatie met behulp van de omgevingsvariabele:

{
  "env": {
    "HTTP_PROXY": "http://127.0.0.1:8000",
    "HTTPS_PROXY": "http://127.0.0.1:8000",
    "TLS/SSL_CERT_FILE": "${env:HOME}/.devproxy/rootCert.pem"
  }
}

Dev Proxy configureren om fouten te simuleren

Als u foutafhandeling wilt opsporen, configureert u Dev Proxy om specifieke fouten te retourneren wanneer uw app API's aanroept. Gebruik de GenericRandomErrorPlugin om fouten zoals of te simuleren.

Een 429-fout (te veel aanvragen) simuleren

Maak een Dev Proxy configuratiebestand dat throttling simuleert:

Bestand: devproxyrc.json

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

Maak het foutenbestand met de specifieke foutreacties:

Bestand: errors.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/genericrandomerrorplugin.errorsfile.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": {
            "error": {
              "code": "TooManyRequests",
              "message": "Rate limit exceeded. Retry after 60 seconds."
            }
          }
        }
      ]
    }
  ]
}

Aanbeveling

Stel de waarde in op om elke aanvraag te laten mislukken, zodat u tijdens het debuggen consistent uw foutafhandelingscode activeert. Verlaag de snelheid wanneer u intermitterende fouten wilt testen.

Een 500 simuleren (interne serverfout)

Als u serverfouten wilt simuleren, voegt u nog een foutbericht toe:

Bestand: errors.json (meerdere fouten)

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/genericrandomerrorplugin.errorsfile.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": {
            "error": {
              "code": "TooManyRequests",
              "message": "Rate limit exceeded. Retry after 60 seconds."
            }
          }
        },
        {
          "statusCode": 500,
          "headers": [
            {
              "name": "content-type",
              "value": "application/json"
            }
          ],
          "body": {
            "error": {
              "code": "InternalServerError",
              "message": "An unexpected error occurred."
            }
          }
        }
      ]
    }
  ]
}

Wanneer u meerdere foutreacties definieert, selecteert Dev Proxy er willekeurig een voor elke onderschepte aanvraag.

Fouten opsporen in de code voor foutafhandeling

Als VS Code en Dev Proxy zijn geconfigureerd, kunt u nu fouten opsporen in de code voor foutafhandeling.

Stap 1: Onderbrekingspunten instellen

Open uw broncode en stel onderbrekingspunten in uw foutcode in. Bijvoorbeeld in een Node.js toepassing:

async function fetchData() {
  try {
    const response = await fetch('https://api.contoso.com/data');
    
    if (!response.ok) {
      // Set a breakpoint here to debug error responses
      throw new Error(`HTTP error: ${response.status}`);
    }
    
    return await response.json();
  } catch (error) {
    // Set a breakpoint here to debug exceptions
    console.error('Failed to fetch data:', error);
    throw error;
  }
}

Stap 2: Dev Proxy starten

Start Dev Proxy met uw configuratiebestand:

devproxy --config-file devproxyrc.json

Stap 3: Debuggen starten in VS Code

  1. VS Code openen
  2. Druk op F5 of selecteer Uitvoeren Start Foutopsporing
  3. Wanneer uw toepassing een API-aanroep doet, onderschept Dev Proxy deze en retourneert een fout
  4. VS Code pauzeert op uw onderbrekingspunt
  5. Gebruik de bedieningselementen voor debuggen om stap voor stap door uw code te gaan en variabelen te inspecteren.

Stap 4: De fout controleren

Wanneer VS Code wordt onderbroken op uw onderbrekingspunt, gebruikt u het deelvenster voor foutopsporing om het volgende te doen:

  • De statuscode en het bericht van de foutreactie weergeven
  • De waarden van lokale variabelen controleren
  • Uw logica voor opnieuw proberen doorlopen
  • Controleer of uw foutberichten gebruiksvriendelijk zijn

Dev Proxy automatisch starten en stoppen

Als u uw foutopsporingswerkstroom wilt stroomlijnen, configureert u VS Code om automatisch Dev Proxy te starten wanneer u de foutopsporing start en stopt wanneer u klaar bent. Installeer de Dev Proxy Toolkit-extensie en configureer taken:

Bestand: .vscode/tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "devproxy-start",
      "type": "devproxy",
      "command": "start",
      "args": [
        "--config-file",
        "devproxyrc.json"
      ],
      "isBackground": true,
      "problemMatcher": "$devproxy-watch"
    },
    {
      "label": "devproxy-stop",
      "type": "devproxy",
      "command": "stop"
    }
  ]
}

Als u deze taken wilt gebruiken, werkt u het volgende bij:

Bestand: .vscode/launch.json (Node.js met autostart)

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Debug with Dev Proxy",
      "skipFiles": [
        "<node_internals>/**"
      ],
      "program": "${workspaceFolder}/index.js",
      "preLaunchTask": "devproxy-start",
      "postDebugTask": "devproxy-stop",
      "env": {
        "NODE_ENV": "development",
        "http_proxy": "http://127.0.0.1:8000",
        "https_proxy": "http://127.0.0.1:8000",
        "GLOBAL_AGENT_HTTP_PROXY": "http://127.0.0.1:8000",
        "NODE_TLS_REJECT_UNAUTHORIZED": "0"
      }
    }
  ]
}

Tips voor effectieve foutopsporing

  • Als u uw onderbrekingspunten consistent wilt bereiken, stelt u deze in uw Dev Proxy-configuratie in, zodat elke aanvraag mislukt.
  • Als u wilt weten hoe uw code een specifieke fout verwerkt, gebruikt u één foutreactie bij het opsporen van fouten.
  • Als u wilt controleren of uw code beperkingen respecteert, controleert u of deze de header leest en volgt bij het opsporen van 429-fouten.
  • Als u ervoor wilt zorgen dat uw code ongebruikelijke antwoorden correct verwerkt, gebruikt u Dev Proxy om edge-gevallen te simuleren, zoals ongeldige JSON of ontbrekende headers.
  • Als u alleen bepaalde fouten wilt verbreken, gebruikt u voorwaardelijke onderbrekingspunten in VS Code door met de rechtermuisknop op een onderbrekingspunt te klikken en een voorwaarde toe te voegen, zoals .

Zie ook