Realizzare un test comparativo di una Web API che abbiamo sviluppato è il primo passo verso un'ottimizzazione consapevole del proprio codice sorgente. Per questo motivo, qualche giorno fa abbiamo pubblicato un articolo dedicato al benchmarking di una Web API con Postman, un utile strumento che può essere utilizzato per fornire alcune misurazioni rapide e utili in pochi passaggi.
Tuttavia, quando si parla di performance, misurare semplicemente il tempo di risposta di un singolo endpoint non basta: in scenari reali, le API devono sostenere carichi concorrenti, picchi di traffico, o rispondere a chiamate in sequenza con vincoli temporali molto stretti. In questi casi, strumenti come Postman o semplici script manuali non sono sufficienti.
NBomber è un potente strumento open-source per il load testing, scritto in .NET, che permette di simulare scenari complessi e raccogliere metriche dettagliate sulle performance delle tue Web API. È particolarmente adatto a sviluppatori e team che lavorano nel mondo .NET, ma supporta qualsiasi tipo di endpoint HTTP. In questo articolo metteremo a fuoco le principali funzionalità di NBomber e vedremo come è possibile utilizzarlo per creare dei benchmark più approfonditi sui nostri WebAPI endpoint.
Requisiti
- Visual Studio o qualsiasi editor .NET compatibile (es. Rider, VS Code)
- Un progetto console .NET 6+
- Pacchetto NuGet
NBomber.Http
- Un endpoint API da testare (es:
https://localhost:5001/api/products
)
#1. Creazione di un progetto console
Apri il terminale e crea un nuovo progetto console:
1 2 |
dotnet new console -n ApiLoadTest cd ApiLoadTest |
#2. Aggiunta di NBomber via NuGet
Aggiungi i pacchetti necessari:
1 |
dotnet add package NBomber.Http |
#3. Scenario di test
Apri il file Program.cs
e inserisci il seguente codice di base:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using NBomber.Contracts; using NBomber.CSharp; using NBomber.Plugins.Http.CSharp; var step = Step.Create("GET /api/products", clientFactory: HttpClientFactory.Create(), execute: async context => { var request = Http.CreateRequest("GET", "https://localhost:5001/api/products") .WithHeader("Accept", "application/json"); var response = await Http.Send(request, context); return response; }); var scenario = ScenarioBuilder .CreateScenario("API Load Test", step) .WithWarmUpDuration(TimeSpan.FromSeconds(5)) .WithLoadSimulations(Simulation.KeepConstant(copies: 10, during: TimeSpan.FromSeconds(30))); NBomberRunner .RegisterScenarios(scenario) .Run(); |
In questo esempio, NBomber eseguirà 10 richieste simultanee per 30 secondi, con 5 secondi di riscaldamento.
Parametri personalizzabili
- copies: numero di utenti simulati
- duration: durata totale del test
- WithWarmUpDuration: tempo di preriscaldamento per escludere metriche iniziali instabili
#4. Esecuzione del benchmark
Lancia il test con:
1 |
dotnet run |
Al termine dell’esecuzione, NBomber mostrerà un report dettagliato in console con:
- Numero di richieste eseguite
- Percentili (50th, 75th, 95th, 99th)
- RPS (Requests per second)
- Errori, timeout e altro
NBomber può anche generare automaticamente report in formato HTML e JSON.
#5. Esportazione dei risultati in HTML
Per salvare i risultati in un report HTML leggibile, modifica la configurazione del runner:
1 2 3 4 5 6 7 8 |
NBomberRunner .RegisterScenarios(scenario) .WithReportFileName("api_load_test") .WithReportFolder("./reports") .WithReportFormats(ReportFormat.Html, ReportFormat.Md, ReportFormat.Txt) .Run(); |
Troverai il report nella cartella /reports
, pronto da condividere con il team o da integrare in pipeline CI/CD.
Cosa è possibile testare con NBomber
- Performance sotto carico (stress test)
- Scalabilità in presenza di utenti simultanei
- Affidabilità di endpoint critici nel tempo
- Resilienza in condizioni di errore o timeout
Conclusioni
NBomber è uno strumento potente, flessibile e pensato per scenari di performance testing realistici e ripetibili. È perfetto per chi lavora in ambienti .NET ma vuole testare qualsiasi API HTTP, grazie alla semplicità della sua sintassi e alla qualità dei report generati.
Se hai già effettuato test base con Postman e desideri approfondire, NBomber è il passo successivo ideale. E se non l'hai ancora fatto, ti consiglio di leggere anche la guida introduttiva: Benchmarking rapido di una Web API con Postman.