Uno degli aspetti spesso trascurati del testing delle nostre applicazioni è quello di valutare come il sistema si comporti sotto carico, e come riesca a gestire richieste contemporanee di un gran numero di utenti.
Esistono diversi tool che permettono di eseguire questo tipo di test, sia sul cloud che sul in locale, e probabilmente uno dei più utilizzati è k6 di Grafana Labs: si tratta di un tool a riga di comando, che da un lato è davvero semplice da utilizzare, dall'altro permette un grandissimo livello di personalizzazione, visto che - come vedremo - può essere programmato tramite JavaScript.
Possiamo installarlo sul nostro ambiente di sviluppo tramite WinGet:
winget install k6
A questo punto, possiamo creare un file di script (magari in una cartella LoadTest del nostro progetto), in cui configurarne il comportamento:
import http from 'k6/http';
import { check, sleep } from 'k6';
export default function () {
const res = http.get('https://localhost:7127/weatherforecast');
check(res, { 'OK': (r) => r.status == 200 });
check(res, { 'Error': (r) => r.status == 500 });
sleep(1);
}Nel codice in alto, dopo i necessari import, abbiamo definito la function che contiene la logica di test. Nel nostro caso, vogliamo che il nostro Virtual User effettui una chiamata in GET verso l'endpoint di WeatherForecast, verificandone il response code, e poi attenda 1 secondo prima di della chiamata successiva.
Immaginiamo ora che il nostro controller sollevi un errore random circa nel 10% dei casi:
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
if (Random.Shared.Next(0, 10) == 0)
{
throw new Exception("Randomly failed");
}
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}Per eseguire il test in alto, possiamo usare il comando k6 come segue:
k6 run --vus 5 --duration 30s .\basic.js
A parte il file JavaScript che vogliamo eseguire, nella riga in alto abbiamo specificato anche che vogliamo un totale di 5 Virtual User, e che il test deve protrarsi per 30 secondi. Una volta completato, otterremo un report simile al seguente:

Come possiamo notare, oltre alla summary che abbiamo specificato tramite il comando check, abbiamo anche una serie di statistiche interessanti, quali per esempio la durata media di ogni richiesta, per quanto tempo la chiamata è rimasta in attesa, la percentuale di errori, e via discorrendo.
Quanto abbiamo visto è solo la base delle potenzialità e della flessibilità di k6. Per scenari più complessi, possiamo dare un'occhiata alla guida ufficiale (https://k6.io/docs/).
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ottimizzare le API in ASP.NET con Feature Flags
.NET Aspire vs Dapr: differenze, sovrapposizioni e integrazione
Arricchire l'interfaccia di .NET Aspire
Building Custom Developer Agents
Operazioni tra insiemi di array in Javascript
Personalizzare i parametri del CSS Scroll Snap
Abilitare il rolling update su Azure Functions flex consumption
Creare una cache temporanea in JavaScript
Creare un file Zip partendo da uno stream sfruttando le classi del namespace System.IO.Compression
Blue/Green Release in locale con .NET Aspire
Quando utilizzare Aspire e Dapr insieme
Evidenziare una porzione di testo in un pagina dopo una navigazione
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
- Consumare dati binari in realtime lato client con ASP.NET Core SignalR
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE
- Caricamenti veloci da CDN e fallback locale con ASP.NET Core
- Utilizzare dati in formato XML in XAML
- Accedere a dati esposti con WebService con Silverlight 1.0


