k6 Hello-World

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 

 

Veröffentlicht am 03.September 2024

Aktualisiert am 03.März 2025

Matthias Eggert

DevOps Engineer

Matthias Eggert ist ein erfahrener DevOps-Engineer mit starkem Fokus auf Testautomatisierung und Qualitätssicherung. Nach vielen Jahren in der Automobilbranche, wo er sicherheitskritische Systeme wie Bremssysteme und Batteriemanagementlösungen betreute, bringt er sein Wissen nun bei Qytera ein. Sein Schwerpunkt liegt auf modernen Testing-Strategien, CI/CD-Pipelines und Cloud-Technologien. Als Jenkins- und AWS-zertifizierter Experte kombiniert er sein tiefes Verständnis für DevOps mit innovativen Testansätzen, um robuste und effiziente Softwarelösungen zu gewährleisten.

Finden Sie weitere interessante Artikel zum Thema: