Gatling vs k6: JVM-Simulationen oder ein Go-Binary?
6 Min. Lesezeit
Gatling und k6 sind beide Open-Source-Tools, die Lasttests als Code in Ihrem Repository halten, und mit beiden lässt sich eine HTTP-API gut unter Last testen. Nehmen Sie Gatling, wenn Ihr Team in Java, Kotlin oder Scala arbeitet oder nach jedem Lauf ohne Zusatzaufwand einen HTML-Bericht haben möchte. Nehmen Sie k6, wenn Sie ein einzelnes Go-Binary ohne JVM, gRPC und Browsertests ab Werk sowie Schwellenwerte wollen, die einen scheiternden Lauf vorzeitig stoppen können.
Die Fakten in diesem Vergleich Gatling vs k6 stammen aus der Dokumentation und den Repositories der beiden Projekte, geprüft am 9. Oktober 2026.
| Gatling | k6 | |
|---|---|---|
| Lizenz | Apache 2.0; gRPC, MQTT und GraphQL unter einer eigenen Komponentenlizenz (Repository) | AGPL-3.0 (Repository) |
| Laufzeit | JVM; das Java-SDK braucht OpenJDK LTS 11 bis 25 (Version 3.16.0) | Ein Go-Binary mit eingebetteter JavaScript-Engine (Version v2.3.0) |
| Testskripte | Java, Kotlin, Scala, JavaScript oder TypeScript | JavaScript, oder TypeScript ohne Typprüfung |
| Kernprotokolle | HTTP/1.1, HTTP/2, WebSocket, Server-Sent Events, JMS | HTTP/1.1, HTTP/2, WebSockets, gRPC |
| Lastmodell | Offene oder geschlossene Injektionsprofile | Sechs Executors, davon zwei mit Ankunftsrate (offenes Modell) |
| Pass/Fail | Assertions, geprüft nach dem Lauf | Schwellenwerte (thresholds), die einen Lauf auch vorzeitig abbrechen können |
| Berichte | HTML-Bericht nach jedem Lauf | Zusammenfassung am Testende; Web-Dashboard mit HTML-Export |
| Browsertests | Nicht eingebaut; der Recorder macht aus Browser-Traffic Code | Eingebautes Browser-Modul (steuert einen Chromium-basierten Browser) |
| Skalierung | Gatling Enterprise | k6-operator auf Kubernetes oder Grafana Cloud k6 |
Was ist der Unterschied zwischen Gatling und k6?
Der größte Unterschied ist die Laufzeit. Gatling läuft auf der JVM, und Sie schreiben Tests mit einem seiner SDKs, während k6 ein einzelnes kompiliertes Go-Programm ist, das JavaScript ausführt.
Das README von Gatling nennt ein Java-SDK für Java, Kotlin und Scala, das über ein Plugin für Maven, Gradle oder sbt läuft. Das SDK für JavaScript und TypeScript wird über npm installiert, und sein Kommandozeilen-Tool lädt GraalVM herunter, sodass auch eine JavaScript-Simulation auf einer JVM läuft.
k6 wird als Paket oder eigenständiges Binary installiert und braucht keine weitere Laufzeit. Es führt auch .ts-Dateien direkt aus, wobei die TypeScript-Unterstützung die Typen entfernt, ohne sie zu prüfen (geprüft am 9. Oktober 2026).
Wie schreibt man denselben Test in beiden Tools?
Beide Tools können denselben Test in JavaScript ausdrücken. Gatling nennt ihn eine Simulation und beschreibt die Last als Injektionsprofil, k6 nennt ihn ein Skript und beschreibt die Last als Szenario mit einem Executor.
Hier ein Test, bei dem fünf Minuten lang jede Sekunde zehn neue Benutzer ankommen und der Lauf scheitert, wenn das 95. Perzentil über 500 ms steigt oder mehr als 1 % der Anfragen fehlschlagen. Im JavaScript-SDK von Gatling, nach dem Vorbild des Tutorials zur ersten Simulation:
import {
constantUsersPerSec, global, scenario, simulation,
} from "@gatling.io/core";
import { http } from "@gatling.io/http";
export default simulation((setUp) => {
const api = http.baseUrl("https://staging.example.com");
const users = scenario("API users")
.exec(http("list users").get("/api/users"));
setUp(users.injectOpen(constantUsersPerSec(10).during(300)))
.protocols(api)
.assertions(
global().responseTime().percentile(95).lt(500),
global().failedRequests().percent().lt(1),
);
});
Derselbe Test in k6, mit dem Executor constant-arrival-rate:
import http from "k6/http";
export const options = {
scenarios: {
api_users: {
executor: "constant-arrival-rate",
rate: 10,
timeUnit: "1s",
duration: "5m",
preAllocatedVUs: 50,
},
},
thresholds: {
http_req_duration: ["p(95)<500"],
http_req_failed: ["rate<0.01"],
},
};
export default function () {
http.get("https://staging.example.com/api/users");
}
Gestartet werden sie mit npx gatling run und k6 run script.js.
Wie modellieren Gatling und k6 Last?
Beide unterstützen offene und geschlossene Lastmodelle. In Gatling fällt die Wahl über die Injektionsmethode, die Sie aufrufen, in k6 über den Executor, den Sie auswählen.
In Gatling nimmt injectOpen Ankunftsraten wie constantUsersPerSec entgegen, injectClosed dagegen Zielwerte für die Parallelität wie constantConcurrentUsers. k6 hat sechs Executors: Die beiden mit Ankunftsrate folgen dem offenen Modell, die anderen vier dem geschlossenen, bei dem ein virtueller Benutzer seine nächste Iteration erst startet, wenn die letzte fertig ist.
Ein Arrival-Rate-Szenario in k6 startet Iterationen aus einem Pool vorab angelegter virtueller Benutzer, und wenn dieser Pool erschöpft ist, überspringt k6 Iterationen und zählt sie als verworfene Iterationen (dropped_iterations) (geprüft am 9. Oktober 2026). Unser Leitfaden zum offenen vs geschlossenen Lastmodell erklärt, wann welches Modell passt.
Wie entscheiden Gatling und k6, ob ein Test bestanden ist?
Beide machen aus Performance-Zielen ein Ergebnis, mit dem eine CI-Pipeline arbeiten kann: bestanden oder nicht bestanden. Gatling prüft seine Ziele nach dem Ende des Laufs, und k6 kann einen Lauf zusätzlich stoppen, sobald ein Ziel verfehlt ist.
Assertions in Gatling werden nach der Simulation ausgewertet, und eine einzige fehlgeschlagene Assertion lässt die Simulation und den Build scheitern. Schwellenwerte in k6 beenden einen gescheiterten Lauf mit einem Exit-Code ungleich null, und ein Schwellenwert mit abortOnFail stoppt den Test in dem Moment, in dem er verfehlt wird (geprüft am 9. Oktober 2026).
Welche Protokolle und Browsertests decken die Tools ab?
Beide beherrschen HTTP und WebSockets ab Werk. Gatling bringt zusätzlich Server-Sent Events und JMS mit, k6 gRPC und echte Browser-Sitzungen.
Laut README von Gatling sind gRPC, MQTT und GraphQL eigene Komponenten unter der Gatling Enterprise Component License, ohne Enterprise begrenzt auf fünf gleichzeitige Benutzer und fünf Minuten Testdauer. k6 nennt HTTP/1.1, HTTP/2, WebSockets und gRPC als eingebaute Protokolle, weitere kommen über xk6-Erweiterungen wie Kafka und Redis hinzu.
Für Browsertests hat k6 ein Browser-Modul, das einen Chromium-basierten Browser steuert und Frontend-Metriken sammelt. Die Dokumentation von Gatling beschreibt keine Browser-Engine: Der Recorder macht aus einer Browser-Sitzung oder einer HAR-Datei eine Simulation auf HTTP-Ebene (geprüft am 9. Oktober 2026).
Wie fährt man einen Test, der mehr Last braucht, als ein Rechner erzeugen kann?
Die Open-Source-Edition von Gatling erzeugt Last von einem Rechner aus, und verteilte Läufe brauchen Gatling Enterprise. k6 kann einen Test mit dem quelloffenen k6-operator auf einen Kubernetes-Cluster verteilen oder ihn in Grafana Cloud k6 ausführen.
Die Installationsanleitung von Gatling nennt ein Enterprise-Konto als Voraussetzung für verteilte Läufe, die auf verwalteten Lastgeneratoren oder an privaten Standorten in Ihrem eigenen AWS-, Azure-, GCP- oder Kubernetes-Konto laufen. Der k6-operator teilt einen Test auf mehrere k6-Instanzen in einem Cluster auf (geprüft am 9. Oktober 2026).
Für k6-Skripte gibt es einen dritten Weg. LoadFocus, der Herausgeber dieser Website, führt k6-Skripte auf seiner eigenen Cloud-Infrastruktur aus 25 Regionen aus, wobei Benutzerzahl und Dauer aus den Einstellungen des Tests kommen. Sein Skript-Validator weist darauf hin, dass Arrival-Rate-Szenarien dort mit einer festen Zahl von Benutzern laufen; ein Skript mit offenem Modell wie das obige hält auf LoadFocus also seine Ankunftsrate nicht. LoadFocus führt keine Gatling-Simulationen aus, für Gatling bleibt also Gatling Enterprise der Weg zu mehr Rechnern.
Welche Berichte bekommen Sie?
Gatling schreibt nach jedem Lauf ohne Einrichtung einen HTML-Bericht. k6 gibt eine Zusammenfassung im Terminal aus und kann über sein eingebautes Web-Dashboard einen HTML-Bericht erzeugen.
Der HTML-Bericht von Gatling zeigt Perzentile der Antwortzeit, gestartete Benutzer pro Sekunde und Anfragen pro Sekunde im Zeitverlauf. k6 gibt eine Zusammenfassung am Testende aus, und sein Web-Dashboard zeigt Live-Diagramme und exportiert einen eigenständigen HTML-Bericht, wenn Sie K6_WEB_DASHBOARD_EXPORT setzen.
Welches Tool sollten Sie wählen?
Gatling passt zu Teams auf der JVM, k6 zu Teams, die ein einzelnes Binary und JavaScript wollen. Protokolle, Browsertests und Skalierung entscheiden die meisten übrigen Fälle.
Wählen Sie Gatling statt k6, wenn Ihr Team auf der JVM zu Hause ist und Tests in Java, Kotlin oder Scala mit Maven, Gradle oder sbt neben dem Anwendungscode bauen möchte, wenn Sie JMS oder Server-Sent Events brauchen oder wenn Sie nach jedem Lauf ohne Einrichtung einen HTML-Bericht wollen.
Wählen Sie k6 statt Gatling, wenn Sie ein einzelnes Binary in der CI ohne zu installierende JVM wollen, wenn Ihre Tests gRPC oder echte Browser-Sitzungen brauchen, wenn Schwellenwerte einen scheiternden Lauf vorzeitig stoppen sollen oder wenn Sie mit einem quelloffenen Operator auf Kubernetes skalieren möchten.
FAQ
Ist Gatling schneller als k6? Das haben wir nicht selbst gemessen, deshalb nennen wir keinen Sieger. Fair vergleichen lässt sich das nur mit demselben Szenario in beiden Tools auf Ihrer eigenen Hardware.
Kann Gatling k6-Skripte ausführen? Nicht laut der Dokumentation von Gatling, die keinen Weg beschreibt, k6-Skripte auszuführen. Die beiden SDKs haben unterschiedliche APIs, und die Konverter von Gatling decken JMeter und LoadRunner ab. Ein k6-Skript muss also als Gatling-Simulation neu geschrieben werden, auch mit dem JavaScript-SDK.
Kann LoadFocus Gatling-Tests ausführen? Nein. LoadFocus führt k6-Skripte und JMeter-Testpläne aus. Um eine Gatling-Simulation auf mehrere Rechner zu verteilen, nutzen Sie Gatling Enterprise.
Weiterlesen
- Gatling-Lasttests: das JVM-Tool im Überblick
- k6 vs Artillery: welches Lasttest-Tool passt zu Ihrem Team?
- Gatling vs JMeter: Tests als Code oder GUI-Testplan?
- Gatling vs Locust: JVM-Simulationen oder Python-Locustfiles?
- gRPC-Lasttest: Tools, Einrichtung und Kennzahlen
Die technischen Aussagen in diesem Artikel wurden nicht unabhängig geprüft.