k6 ist ein modernes Open-Source-Tool für Lasttests, das leichtgewichtig und skriptbasiert ist. In diesem Tutorial setzen wir einen einfachen k6-Test auf, der einige HTTP-Requests an Google sendet. Wir simulieren dabei 3 parallele User, die jeweils 10 mal hintereinander auf die Seite zugreifen, so schnell wie sie können.
Schritt 1: k6 installieren
Falls k6 noch nicht installiert ist, kannst du es je nach Betriebssystem mit einem der folgenden Befehle installieren:
- Mac (Homebrew)
brew install k6 - Linux (Debian/Ubuntu)
sudo apt update && sudo apt install k6 - Windows (Scoop)
scoop install k6 - Es kann auf allen Plattformen auch recht einfach selbst gebaut werden. Dafür benötigt man Go. Das wird dann zwingend erforderlich, wenn man Plugins hinzufügen möchte.
Schritt 2: Test-Skript erstellen
Erstelle eine neue Datei hello-world.js mit folgendem Inhalt:
import http from 'k6/http';
import { check } from 'k6';
export let options = {
vus: 3, // 3 gleichzeitige Nutzer
iterations: 30 // Jeder Nutzer führt 10 Requests aus (3 VUs * 10 Iterationen = 30 Requests insgesamt)
};
export default function () {
let res = http.get('https://www.google.de');
// Statuscode-Check
check(res, {
'Status ist 200': (r) => r.status === 200
});
}
Schritt 3: Test ausführen
Führe den Test mit folgendem Befehl aus:
k6 run hello-world.js
Schritt 4: Ergebnisse analysieren
Nach dem Testlauf zeigt k6 eine Übersicht der wichtigsten Metriken:
- http_reqs → Anzahl der gesendeten Requests
- http_req_duration → Antwortzeit der Anfragen
- checks → Anzahl der erfolgreich validierten Statuscodes
- vus → Anzahl der virtuellen User während des Tests
Beispielausgabe:
PS C:\Users\meggert\Desktop> k6.exe run .\hello-world.js
/\ Grafana /‾‾/
/\ / \ |\ __ / /
/ \/ \ | |/ / / ‾‾\
/ \ | ( | (‾) |
/ __________ \ |_|\_\ \_____/
execution: local
script: .\hello-world.js
output: -
scenarios: (100.00%) 1 scenario, 3 max VUs, 10m30s max duration (incl. graceful stop):
* default: 30 iterations shared among 3 VUs (maxDuration: 10m0s, gracefulStop: 30s)
✓ Status ist 200
checks.........................: 100.00% 30 out of 30
data_received..................: 591 kB 642 kB/s
data_sent......................: 6.1 kB 6.7 kB/s
http_req_blocked...............: avg=8.21ms min=0s med=0s max=82.62ms p(90)=8.19ms p(95)=81.98ms
http_req_connecting............: avg=1.5ms min=0s med=0s max=16.89ms p(90)=1.39ms p(95)=14.19ms
http_req_duration..............: avg=73.09ms min=63.24ms med=72.43ms max=92.78ms p(90)=79.91ms p(95)=86.8ms
{ expected_response:true }...: avg=73.09ms min=63.24ms med=72.43ms max=92.78ms p(90)=79.91ms p(95)=86.8ms
http_req_failed................: 0.00% 0 out of 30
http_req_receiving.............: avg=2.92ms min=590.09µs med=2.75ms max=5.13ms p(90)=4.28ms p(95)=4.35ms
http_req_sending...............: avg=98.63µs min=0s med=0s max=634.29µs p(90)=552.13µs p(95)=634.29µs
http_req_tls_handshaking.......: avg=4.31ms min=0s med=0s max=44.29ms p(90)=4.12ms p(95)=42.65ms
http_req_waiting...............: avg=70.07ms min=59.91ms med=69.03ms max=88.36ms p(90)=78.19ms p(95)=83.45ms
http_reqs......................: 30 32.627148/s
iteration_duration.............: avg=90.38ms min=63.24ms med=72.43ms max=250.89ms p(90)=108.59ms p(95)=250.89ms
iterations.....................: 30 32.627148/s
running (00m00.9s), 0/3 VUs, 30 complete and 0 interrupted iterations
default ✓ [======================================] 3 VUs 00m00.9s/10m0s 30/30 shared iters
Fazit
Das war dein erster k6-Test! Mit wenigen Zeilen Code haben wir einen einfachen Load-Test gegen Google durchgeführt und wichtige Performance-Metriken erhalten. Von hier aus kannst du Tests erweitern, Variablen hinzufügen oder größere Lastsimulationen durchführen.
Das vollständige Beispiel Skript gibt es hier: hello-world.js