Maak een C# Toepassing voor Geautomatiseerd Testen van API's
description
Automatisering van API-testen bespaart tijd, vermindert handmatige fouten en verbetert de betrouwbaarheid van je API's. Je krijgt inzicht in API-prestaties en functionaliteit via gedetailleerde rapportages.
prompt
try_prompt
Help me bij het ontwerpen van een C# toepassing die het testen van RESTful API's automatiseert. De toepassing moet verzoeken kunnen sturen naar gespecificeerde eindpunten, antwoorden v ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een basisidee voor het ontwerpen van een C# toepassing die RESTful API's test volgens jouw specificaties:
1. Gebruik HttpClient voor het versturen van verzoeken.
2. Maak een testconfiguratie waarin je eindpunten, verwachte antwoorden en validatiecriteria definieert.
3. Voer de tests uit en vergelijk de ontvangen respons met de verwachte output.
4. Genereer een rapport met de resultaten.
Hier is een eenvoudig voorbeeld van hoe je dat zou kunnen implementeren:
```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
class ApiTester
{
private static readonly HttpClient client = new HttpClient();
// Definieer een testcase
public class TestCase
{
public string Endpoint { get; set; }
public string VerwachtResponse { get; set; }
public Func<JObject, bool> Validatie { get; set; }
}
static async Task Main(string[] args)
{
// Voorbeeld test
var testcases = new[]
{
new TestCase
{
Endpoint = "https://api.example.com/v1/users",
VerwachtResponse = "{\"status\":\"success\",\"data\":{\"id\":1,\"naam\":\"John Doe\"}}",
Validatie = (json) =>
{
// Eenvoudige validatie: controleer of de status "success" is en data aanwezig is
return json["status"]?.ToString() == "success" &&
json["data"]?["id"]?.ToObject<int>() == 1 &&
json["data"]?["naam"]?.ToString() == "John Doe";
}
}
};
foreach (var test in testcases)
{
Console.WriteLine($"Testen endpoint: {test.Endpoint}");
var result = await VoerTestUit(test);
Console.WriteLine($"Resultaat: {(result ? "Geslaagd" : "Geslaagd")}\n");
}
}
static async Task<bool> VoerTestUit(TestCase test)
{
try
{
var response = await client.GetAsync(test.Endpoint);
response.EnsureSuccessStatusCode();
var inhoud = await response.Content.ReadAsStringAsync();
// Parseer JSON
var jsonObject = JObject.Parse(inhoud);
// Valideer
bool isValid = test.Validatie(jsonObject);
// Rapportage
Console.WriteLine("Ontvangen respons:");
Console.WriteLine(JsonConvert.SerializeObject(jsonObject, Formatting.Indented));
Console.WriteLine($"Validatie: {(isValid ? "Geslaagd" : "Falen")}");
return isValid;
}
catch (Exception ex)
{
Console.WriteLine($"Fout tijdens test: {ex.Message}");
return false;
}
}
}
```
**Wat doet deze code?**
- Definieert een testgeval met het endpoint, de verwachte JSON-respons en een validatiefunctie.
- Stuurt een GET-verzoek naar het endpoint.
- Parseert de JSON-respons.
- Voert de validatie uit volgens de opgegeven criteria.
- Toont een rapport met de ontvangen respons en het validatieresultaat.
**Aanpassingen volgens jouw wensen:**
- Voor POST- of andere HTTP-methoden kan je `HttpClient.PostAsync` gebruiken.
- Voor uitgebreidere rapporten kan je een rapportagesysteem of logging toevoegen.
- Je kunt de validatie uitbreiden of automatiseren door meer complexe controlelogica te implementeren.
Laat me weten als je meer hulp nodig hebt bij het uitbreiden of aanpassen van deze toepassing!
provider: deepseek
model: deepseek-chat
Hier is een C#-implementatie voor het automatiseren van RESTful API-testen volgens jouw specificaties:
## 1. Data Modellen
```csharp
public class ApiResponse
{
public string Status { get; set; }
public UserData Data { get; set; }
}
public class UserData
{
public int Id { get; set; }
public string Naam { get; set; }
}
public class TestResult
{
public string Endpoint { get; set; }
public bool IsSuccess { get; set; }
public string ExpectedResponse { get; set; }
public string ActualResponse { get; set; }
public string ErrorMessage { get; set; }
public DateTime TestTime { get; set; }
}
```
## 2. API Test Service
```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using System.Collections.Generic;
public class ApiTestService
{
private readonly HttpClient _httpClient;
public ApiTestService()
{
_httpClient = new HttpClient();
_httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
}
public async Task<TestResult> TestEndpointAsync(string endpoint, object expectedResponse)
{
var result = new TestResult
{
Endpoint = endpoint,
TestTime = DateTime.Now,
ExpectedResponse = JsonSerializer.Serialize(expectedResponse,
new JsonSerializerOptions { WriteIndented = true })
};
try
{
// Stuur GET verzoek naar endpoint
HttpResponseMessage response = await _httpClient.GetAsync(endpoint);
if (!response.IsSuccessStatusCode)
{
result.IsSuccess = false;
result.ErrorMessage = $"HTTP fout: {response.StatusCode}";
return result;
}
// Lees en parse response
string responseContent = await response.Content.ReadAsStringAsync();
result.ActualResponse = responseContent;
// Valideer JSON response
var apiResponse = JsonSerializer.Deserialize<ApiResponse>(responseContent);
var expectedApiResponse = expectedResponse as ApiResponse;
if (apiResponse == null || expectedApiResponse == null)
{
result.IsSuccess = false;
result.ErrorMessage = "Ongeldig response formaat";
return result;
}
// Valideer individuele velden
bool statusValid = apiResponse.Status == expectedApiResponse.Status;
bool dataValid = apiResponse.Data?.Id == expectedApiResponse.Data?.Id &&
apiResponse.Data?.Naam == expectedApiResponse.Data?.Naam;
result.IsSuccess = statusValid && dataValid;
if (!result.IsSuccess)
{
result.ErrorMessage = $"Validatie mislukt. Status: {statusValid}, Data: {dataValid}";
}
}
catch (Exception ex)
{
result.IsSuccess = false;
result.ErrorMessage = $"Uitzondering: {ex.Message}";
}
return result;
}
}
```
## 3. Rapport Generator
```csharp
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
public class ReportGenerator
{
public string GenerateReport(List<TestResult> results)
{
var report = new StringBuilder();
report.AppendLine("=== API TEST RAPPORT ===");
report.AppendLine($"Generatiedatum: {DateTime.Now}");
report.AppendLine($"Totaal aantal tests: {results.Count}");
report.AppendLine($"Geslaagde tests: {CountSuccesses(results)}");
report.AppendLine($"Gefaalde tests: {CountFailures(results)}");
report.AppendLine();
foreach (var result in results)
{
report.AppendLine($"Endpoint: {result.Endpoint}");
report.AppendLine($"Tijdstip: {result.TestTime}");
report.AppendLine($"Status: {(result.IsSuccess ? "GESLAAGD" : "GEFAALD")}");
if (!result.IsSuccess)
{
report.AppendLine($"Fout: {result.ErrorMessage}");
}
report.AppendLine("Verwacht response:");
report.AppendLine(result.ExpectedResponse);
report.AppendLine("Werkelijk response:");
report.AppendLine(result.ActualResponse ?? "Geen response");
report.AppendLine(new string('-', 50));
}
return report.ToString();
}
public void SaveReportToFile(string report, string filePath)
{
File.WriteAllText(filePath, report);
}
private int CountSuccesses(List<TestResult> results)
{
return results.FindAll(r => r.IsSuccess).Count;
}
private int CountFailures(List<TestResult> results)
{
return results.FindAll(r => !r.IsSuccess).Count;
}
}
```
## 4. Hoofdapplicatie
```csharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var testService = new ApiTestService();
var reportGenerator = new ReportGenerator();
var results = new List<TestResult>();
// Definieer verwacht response volgens jouw specificatie
var expectedResponse = new ApiResponse
{
Status = "success",
Data = new UserData
{
Id = 1,
Naam = "John Doe"
}
};
// Voer API test uit
string endpoint = "https://api.example.com/v1/users";
Console.WriteLine($"Testen endpoint: {endpoint}");
var result = await testService.TestEndpointAsync(endpoint, expectedResponse);
results.Add(result);
// Genereer rapport
string report = reportGenerator.GenerateReport(results);
Console.WriteLine(report);
// Sla rapport op
string reportPath = $"API_Test_Rapport_{DateTime.Now:yyyyMMdd_HHmmss}.txt";
reportGenerator.SaveReportToFile(report, reportPath);
Console.WriteLine($"Rapport opgeslagen als: {reportPath}");
// Toon samenvatting
Console.WriteLine($"\nTest voltooid: {(result.IsSuccess ? "GESLAAGD" : "GEFAALD")}");
}
}
```
## 5. Vereiste NuGet Packages
Voeg deze toe aan je `.csproj` bestand:
```xml
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
```
## Gebruik
1. Maak een nieuw C# console project
2. Voeg de bovenstaande code toe
3. Voer de applicatie uit
4. Bekijk het gegenereerde rapport
Deze implementatie:
- Test het gespecificeerde endpoint
- Valideert de JSON response structuur
- Controleert individuele velden (status, id, naam)
- Genereert gedetailleerde rapporten
- Handel fouten netjes af
Je kunt de applicatie eenvoudig uitbreiden met extra endpoints en validatieregels.

