eurofunk Kappacher GmbH
Application Load Testing with k6
Description
Daniel Knittl-Frank von eurofunk Kappacher spricht in seinem devjobs.at TechTalk darüber, wie die hohen Performance Anforderungen der im Unternehmen entwickelten Software erfüllt werden.
Beim Videoaufruf stimmst Du der Datenübermittlung an YouTube und der Datenschutzerklärung zu.
Video Zusammenfassung
In Application Load Testing with k6 zeigt Daniel Knittl-Frank (eurofunk Kappacher GmbH), wie sein Team die missionskritische Eurofunk operation center suite für Einsatz- und Kommandozentralen mit dem Open-Source-Tool k6 leistungs- und latenzseitig absichert. Er erläutert Testaufbau (Setup/Teardown/Default), Checks, Custom Metrics (Counter, Gauge, Rate, Trend), Thresholds, Gruppen/Tags sowie Workload-Modelle (open/closed) mit Szenarien und Rampen, zudem Protokollsupport für HTTP, gRPC und WebSockets (mit Cookie-Workaround). Abschließend zeigt er die Einbindung in GitLab CI und die Live-Auswertung via InfluxDB/Grafana, sodass Teams Regressionen früh erkennen und niedrige Latenzen sowie konsistente Antwortzeiten sicherstellen können.
Application Load Testing mit k6: Metriken, Thresholds und CI-Pipelines – Ein technischer Leitfaden aus „Application Load Testing with k6“ von Daniel Knittl-Frank (eurofunk Kappacher GmbH)
Kontext: Einsatzleitzentralen und warum Performance kein Luxus ist
Aus der Perspektive von DevJobs.at war „Application Load Testing with k6“ von Daniel Knittl-Frank ein konzentrierter Praxisblick in eine Welt, in der jede Sekunde zählt. Daniel, GNU/Linux-Enthusiast, FH-Lektor und Expert Developer bei eurofunk Kappacher GmbH, arbeitet an Software für Leitstellen – für Polizei, Feuerwehr, Rettung, Industrie und größere Flughäfen. Eurofunk liefert dafür Komplettlösungen: von der Hardware und Netzwerktechnik bis zur Software, die Disponenten im Ernstfall verwenden.
Im Zentrum steht die webbasierte Eurofunk Operation Center Suite (EOGS). Sie bündelt Incident-Management, Disposition, Kartenansichten mit Live-Positionsdaten und Status von Einheiten sowie direkte Sprachkommunikation via WebRTC im Browser. Zusätzlich integriert EOGS externe Ereignisquellen: Alarmanlagen, Rauch- und Brandmelder, CCTV/Videostreams und externe Webservices mit Zusatzinformationen für Einsätze.
Für diese missionskritische Software gelten harte Anforderungen: hohe Verfügbarkeit, niedrige Latenz, konsistente Antwortzeiten und stets aktuelle Informationen. Oder, wie Daniel es zugespitzt formuliert:
„In einer Notsituation zählt jede einzelne Sekunde.“
Genau deshalb testet das Team die Performance systematisch – mit k6.
k6 im Überblick: Open Source, JavaScript-Tests, Fokus auf Last
k6 ist ein Open-Source-Lasttest-Tool (AGPL), entwickelt in Go. Tests werden in JavaScript geschrieben. Laut Daniel ist der Funktionsumfang für neuere JavaScript-Features aktuell noch begrenzt (ES 5.1), Modulunterstützung ist jedoch vorhanden und erleichtert die Strukturierung von Tests. k6 wurde im Sommer von Grafana Labs übernommen. Für Teams, die Performance reproduzierbar und automatisiert prüfen wollen, trifft k6 einen klaren Sweet Spot: CLI-first, scriptbar, integrationsfreundlich.
Teststruktur: Setup, Default, Teardown, Summary
Ein k6-Test folgt einem wiederkehrenden Aufbau:
- Setup: Daten anlegen oder Login durchführen.
- Default-Funktion: Das Herzstück. Virtuelle Benutzer (VUs) rufen diese Funktion in einer Schleife auf und führen die eigentlichen Interaktionen aus – etwa HTTP- oder gRPC-Requests und WebSocket-Aktionen.
- Teardown: Aufräumen, Daten löschen, Logout.
- Summary: Am Ende erzeugt k6 eine Zusammenfassung. Sie lässt sich anpassen und aggregiert Checks, Metriken und Threshold-Ergebnisse.
k6 läuft auf der Kommandozeile. Wird ein Test gestartet, zeigt das Tool während der Ausführung Logs, Fehlschläge, verbleibende Laufzeit und weitere Live-Indikatoren. Die Kombination aus einfacher Teststruktur und unmittelbarer CLI-Rückmeldung macht es leicht, schnell Hypothesen zu prüfen und Skripte iterativ zu verfeinern.
Checks: Systematisch validieren, was wichtig ist
In Lasttests geht es nicht nur um Durchsatz, sondern auch um Korrektheit. k6 erlaubt es, beliebige Checks auf Objekte anzuwenden – typischerweise HTTP-Antworten. Beispiele:
- Ist der HTTP-Status 200?
- Stimmt der Content-Type (z. B. JSON)?
- Enthält die Antwort ein Feld oder eine ID, die einem erwarteten Muster entspricht?
Diese Checks fließen automatisch in die Summary ein – mit grünen Häkchen für erfolgreiche und roten Markierungen für fehlgeschlagene Prüfungen. k6 zeigt zudem Prozent- und Absolutwerte der fehlerhaften Checks. Dadurch behalten Teams die fachliche Integrität ihrer Workflows auch unter Last im Blick.
Eigene Metriken: Counter, Gauge, Rate, Trend
Nicht alles, was fachlich zählt, ist „out of the box“ messbar. k6 bietet deshalb benutzerdefinierte Metriken in vier Typen:
- Counter: Zähler, z. B. „Wie viele Frames/Kommandos empfangen?“
- Gauge: Letzter/aktueller Wert, z. B. „Aktueller Statuscode“ in einem Szenario.
- Rate: Verhältnis von Erfolgen/Fehlschlägen, z. B. „Fehlerquote eines spezifischen Ereignisses“.
- Trend: Zeitreihen mit min/avg/median/Percentiles/max, z. B. „Antwortzeitverteilung eines Endpunkts“.
k6 rendert diese Metriken passend:
- Counter mit Gesamtzahl und Test-Rate pro Sekunde.
- Trend mit Durchschnitt, Minimum, Median, Perzentilen und Maximum.
- Gauge als „last known value“.
Damit werden Analysen möglich, die über reine HTTP-Dauer hinausgehen und fachliche Ereignisse einbeziehen – ein wichtiger Punkt in komplexen, integrierten Anwendungen wie EOGS.
Thresholds: Explizite Qualitätsgrenzen, automatisches Test-Fail
Thresholds arbeiten auf globaler Ebene eines Tests – und sie sind das zentrale Instrument, um Performanceforderungen präzise auszudrücken. Beispiele, die Daniel nennt:
- „Fail, wenn die durchschnittliche Antwortzeit > 100 ms.“
- „Fail, wenn eine Rate unter 5 % fällt.“
Auch Thresholds erscheinen in der Summary mit klarer Erfolg-/Fehlermarkierung. Dieser Mechanismus eignet sich hervorragend, um Regressionen früh in Pipelines zu stoppen und Teams unmittelbar zu benachrichtigen.
Gruppieren und Taggen: Selektive Sicht auf Teilmengen
k6 unterstützt Gruppen und Tags, um Requests, Checks und Metriken zu kategorisieren oder Teilmengen zu bilden. So lassen sich z. B. Antwortzeiten eines spezifischen Endpunkts isolieren und mit eigenen Thresholds versehen. Tags können pro Check oder global für den gesamten Test vergeben werden – nützlich, wenn End-to-End-Skripte viele Pfade und Protokolle abdecken, man aber gezielt einen kritischen Abschnitt überwachen möchte.
Die Summary lesen: Automatische und benutzerdefinierte Kennzahlen
Daniel zeigte eine Test-Summary mit mehreren Metriken und Thresholds. Ein großer Teil kommt automatisch von k6:
- Anzahl der ausgeführten Checks.
- Empfangenes und gesendetes Datenvolumen.
- Durchschnittsdauer pro Gruppe.
- Antwortzeitverteilung (Anzahl Requests, Durchschnitt, Median usw.).
Zudem waren benutzerdefinierte Metriken sichtbar – etwa „SOC frames“ und „STUMP commands received“. Neben den Rohzahlen stellt k6 die abgeleitete Pro-Sekunde-Rate bereit. Genau diese Mischung aus allgemeinen und domänenspezifischen Größen macht die Summary für technische wie fachliche Stakeholder gleichermaßen aussagekräftig.
Workload-Modelle: Open vs. Closed und wie Szenarien in k6 gebaut werden
k6 trennt zwischen zwei Grundmodellen:
- Open Workload: Die Ankunftsrate neuer Nutzer wird gesteuert. Beispiel: „100 Requests pro Sekunde“ – k6 injiziert so viele virtuelle Nutzer wie nötig, um diese Rate zu halten.
- Closed Workload: Die Zahl gleichzeitiger Nutzer wird gesteuert. Beispiel: „16 VUs, die die Default-Funktion in einer Schleife ausführen.“
In k6 werden diese Varianten über Szenarien konfiguriert. Besonders wichtig: Last ist nicht nur statisch; Rampen sind entscheidend, um Systemverhalten während Anstieg und Abfall zu beobachten. Daniel beschreibt typische Rampen:
- Start bei 0 Nutzern, Anstieg auf 50 in 1 Minute, 2 Minuten halten, dann Anstieg auf 100 in 1 Minute.
- Analog mit Ankunftsraten: 0 RPS auf 50 RPS in 1 Minute, halten, dann weiter steigern – oder gezielt ramp-down.
Visualisiert zeigt sich:
- Bei Rampen mit VUs entspricht die Nutzerkurve exakt der definierten Rampe.
- Bei Ankunftsraten injiziert k6 automatisch VUs, um die Zielrate zu treffen.
- In der Dauer-Ansicht spiegelt ein „grüner Hintergrundbereich“ die Anzahl an Requests und macht die Relation zur definierten Rate sichtbar.
Diese klare Trennung zwischen „Wie viele sind gleichzeitig unterwegs?“ und „Wie schnell kommen neue an?“ ist mehr als terminologische Genauigkeit – sie prägt Lastprofile, Fehlermuster und Stabilitätsaussagen.
Über HTTP hinaus: WebSockets und gRPC im Test
EOGS setzt WebSockets ein. k6 kann neben HTTP auch WebSockets und gRPC adressieren. Für WebSockets gilt:
- Verbindung zu sicheren (WSS) und unverschlüsselten Endpunkten.
- Senden und Empfangen von Nachrichten.
- Messen von Dauern – z. B. Zeit bis zur Antwort.
Eine wichtige Beobachtung aus Daniels Praxis: Cookie-Support für WebSockets war „kind of broken“. Daran wird gearbeitet, ein Workaround ist verfügbar. Für Teams mit Authentifizierung/Cookies über WebSocket-Kanäle ist diese Randnotiz goldwert – sie spart Recherchezeit und hilft, Tests stabil aufzusetzen.
Kontinuierlich testen: GitLab CI, Docker, stündliche Läufe
Mission-critical heißt: Performance muss kontinuierlich überprüft werden. eurofunk betreibt die k6-Tests in einer GitLab-CI-Pipeline. Ein Docker-Image führt vordefinierte Tests beispielsweise stündlich aus. Konfigurierte Thresholds sorgen dafür, dass die Pipeline bei Regressionen fehlschlägt. Der Nutzen ist unmittelbar: automatisches E-Mail-Alerting bei Pipeline-Fehlschlag – und damit schnelles Reagieren, bevor sich Probleme in den Echtbetrieb durchschleichen.
Beobachtbarkeit: InfluxDB-Ausgabe und Live-Visualisierung in Grafana
k6 kann Ergebnisse in externe Outputs schreiben. Daniel nennt InfluxDB als Timeseries-Datenbank, in die k6 während des Testlaufs alle Metriken schreibt. Mit Grafana werden darauf Panels aufgebaut – so wird live sichtbar:
- Wie viele Nutzer sind aktiv?
- Wie entwickeln sich Antwortzeiten?
- Treten unerwartete Fehler auf?
- Verlangsamt sich das System über die Testdauer?
- Besteht eine erkennbare Korrelation zwischen Nutzerzahl und Latenz?
Diese Live-Sicht ist besonders hilfreich für Rampen und für Fehlersuche unter Produktionsähnlichen Lastprofilen. Zusammen mit den k6-Thresholds entsteht so ein Kreislauf aus schneller Erkennung und gezielter Analyse – beides unverzichtbar für robuste Systeme.
Praktischer Fahrplan für Engineering-Teams
Aus dem Talk lassen sich für Teams, die k6 evaluieren oder vertiefen wollen, klare Schritte ableiten. Alle Punkte basieren auf den im Vortrag besprochenen Möglichkeiten:
- Anforderungen klären
- Latenzziele und Konsistenzanforderungen definieren (z. B. Average, Median, Perzentile, Max).
- Kritische Benutzerpfade und Protokolle identifizieren (HTTP, WebSockets, ggf. gRPC).
- Fachliche Integritätschecks festlegen: Welche Felder/Muster müssen in Antworten vorhanden sein?
- Teststruktur aufsetzen
- Setup/Teardown logisch gestalten (z. B. Login/Logout, Datenpräparation und -bereinigung).
- Default-Funktion als realitätsnahe Sequenz modellieren, die VUs in einer Schleife ausführen.
- Checks systematisch integrieren
- Statuscodes, Content-Types, Antwortinhalte prüfen.
- Checks im Summary-Output beobachten und Fehlerquoten bewerten.
- Eigene Metriken definieren
- Counter/Rate für Ereignisse, die k6 nicht automatisch erfasst.
- Trendmetrik für kritische Zeitreihen (z. B. Antwortzeit je Endpoint).
- Gauge für „letzter Zustand“ in spezifischen Szenarien.
- Thresholds als Qualitätsgrenzen setzen
- Globale Schwellenwerte, die bei Verstößen den Test fehlschlagen lassen.
- In Kombination mit Tags/Groups auch für Teilmengen (z. B. pro Endpoint).
- Workload-Modelle passend wählen
- Closed Model: „Wie viele gleichzeitig?“ – gut für Concurrency-Tests.
- Open Model: „Wie schnell kommen neue an?“ – gut für RPS-getriebene Lastprofile.
- Rampen planen (Up/Down), um Stabilität über Übergänge zu validieren.
- Protokolle über HTTP hinaus berücksichtigen
- WebSockets nachbilden: Senden/Empfangen, Dauer messen.
- Cookie-Handling bei WebSockets beachten; bekannten Workaround einplanen.
- gRPC-Testoptionen evaluieren, wenn relevant.
- CI-Pipeline etablieren
- Dockerisierte k6-Jobs in GitLab CI (z. B. stündlich oder täglich).
- Thresholds als Gate – Fail bei Regressionen, automatische E-Mail-Benachrichtigung nutzen.
- Ergebnisse live observieren
- k6-Output nach InfluxDB routen.
- Grafana-Panels für Nutzerzahl, Latenzen, Fehler und Trends erstellen.
- Relation zwischen Last und Latenz in Echtzeit prüfen.
- Iterativ verbessern
- Auffälligkeiten aus Grafana/Influx und der k6-Summary in Hypothesen übersetzen.
- Skripte, Checks, Metriken und Thresholds schrittweise verfeinern.
Lernpunkte aus dem Talk
- Performance ist Teil der Funktionalität – besonders in Leitstellenumgebungen. Das spiegelt sich in den strengen Zielen: hohe Verfügbarkeit, niedrige Latenz, konsistente Antwortzeiten.
- k6 bietet eine klare, skriptbare Struktur mit Setup/Default/Teardown und einer aussagekräftigen Summary. Checks und eigene Metriken heben Lasttests von bloßem „Durchsatzmessen“ auf ein Qualitätsniveau, das Fachlogik einschließt.
- Thresholds sind der Motor für Automatisierung. Sie machen Performancevorgaben maschinenlesbar und CI-fähig – und sorgen im Fehlerfall für unmittelbare Sichtbarkeit.
- Open vs. Closed Workload ist mehr als eine akademische Unterscheidung. Es beeinflusst, wie Systeme Last wahrnehmen und wo Engpässe auftreten.
- WebSockets gehören zum Repertoire. Wichtiger Praxis-Tipp: Cookie-Handling im Blick behalten und Workaround nutzen.
- Mit InfluxDB und Grafana entsteht ein Live-Fenster in laufende Tests. Das beschleunigt Diagnose und schafft Vertrauen in die gemessenen Effekte – ob in Rampen oder unter stabiler Last.
Fazit: Struktur, Metriken und Automatisierung – k6 in der Praxis
Daniel Knittl-Frank zeigt in „Application Load Testing with k6“, wie Performancearbeit in einer missionskritischen Umgebung konkret aussieht: strukturiert über Setup/Default/Teardown, präzise über Checks, Metriken, Gruppen/Tags und Thresholds, praxisnah über Open/Closed-Modelle und Rampen – und kontinuierlich über GitLab-CI mit Docker sowie Live-Analysen in InfluxDB/Grafana.
Mit diesem Setup lässt sich – so der Vortrag – sicherstellen, dass Anwendungen „smoothly“ laufen, niedrige Latenzen halten und konsistente Antwortzeiten liefern.
Für Engineering-Teams, die Lasttests als festen Bestandteil ihres Qualitätsprozesses verankern wollen, liefert die Session eine klare Roadmap. Keine exotischen Abkürzungen, sondern robuste Bausteine: reproduzierbare Szenarien, domänenspezifische Metriken, harte Thresholds, kontinuierliche Läufe und aussagekräftige Visualisierung. Genau das braucht es, wenn im Ernstfall jede Sekunde zählt.
Weitere Tech Talks
eurofunk Kappacher GmbH From Sound to Sense
Sabine Hasenleithner von eurofunk Kappacher spricht in ihrem devjobs.at TechTalk über die technischen Hintergründe von Sprach Erkennung im Notruf Kontext und zeigt in einer Live Demo eine mögliche Implementierung.
Jetzt anseheneurofunk Kappacher GmbH Effortless Versioning
Stefan Höller von eurofunk Kappacher zeigt in seinem devjobs.at TechTalk, wie das Unternehmen die Versionsverwaltung bei langen Produktzyklen mithilfe von Semantic Release gestaltet hat.
Jetzt anseheneurofunk Kappacher GmbH Cypress Component Tests
Patrick Pichler von eurofunk Kappacher demonstriert in seinem devjobs.at TechTalk die Herangehensweise des Teams, wie sie Component Tests mit cypress durchführen.
Jetzt ansehen
Weitere Tech Lead Stories
eurofunk Kappacher GmbH Thomas Ronacher, Head of Technical Support bei eurofunk Kappacher
Thomas Ronacher von eurofunk Kappacher spricht im Interview über die Struktur des Teams, die verwendeten Technologien und wie der Bewerbungs- und Onboardingprozess abläuft.
Jetzt anseheneurofunk Kappacher GmbH Johanna Blum, Release Train Engineer bei eurofunk Kappacher
Johanna Blum von eurofunk Kappacher beleuchtet im Interview die Teamkultur, die wichtigsten Technologien im Einsatz und die Besonderheiten des Recruiting-Prozesses.
Jetzt ansehen
Weitere Dev Stories
eurofunk Kappacher GmbH Valentin Zintl, Junior Development Engineer bei eurofunk Kappacher
Valentin Zintl von eurofunk Kappacher erzählt im Interview über seinen Karriereweg, welche Aufgaben ihn täglich erwarten und welche Fähigkeiten besonders für den Einstieg wichtig sind.
Jetzt anseheneurofunk Kappacher GmbH Viktoria Haselsteiner, Scrum Master bei eurofunk Kappacher
Viktoria Haselsteiner von eurofunk Kappacher spricht im Interview über ihren Einstieg in die Welt von Scrum, welche Fähigkeiten sie dabei als besonders hilfreich erlebt hat und worauf es ihrer Meinung nach in der täglichen Arbeit wirklich ankommt.
Jetzt anseheneurofunk Kappacher GmbH Johannes Festi, Trainee Software Development bei eurofunk Kappacher
Johannes Festi von eurofunk Kappacher gibt im Interview Einblicke in den Arbeitsalltag als Software Development Trainee, wie er dazu gekommen ist und was seiner Ansicht nach wichtig für den Einstieg ist.
Jetzt anseheneurofunk Kappacher GmbH Maximilian Spiesmaier, IT Security Consultant bei eurofunk Kappacher
Maximilian Spiesmaier von eurofunk Kappacher teilt im Interview seine Erfahrungen aus der IT Security, welche Herausforderungen er im Arbeitsalltag meistert und wie man am besten in den Beruf startet.
Jetzt ansehen