Taurus - Effiziente Lasttests mit JMeter und Gatling in einer Hand

Loadtest 101 - Taurus ein Einstieg

Taurus - Effiziente Lasttests mit JMeter und Gatling in einer Hand

Klassisch gestaltete sich das Aufsetzen einer Lasttest Umgebung und die Erstellung selbst einfacher Szenarien durchaus schwierig. Aber seit ich das Open-Source-Tool Taurus endeckt habe, hat sich diese Meinung bei mir deutlich geändert. Taurus bietet eine Art Abstraktionen über eine Vielzahl gängiger Testwerkzeuge für Last- und/oder Performancetests. Als Beispiele seihen hier ein paar der bekannteren Tools genannt. Namentlich sind dies JMeter, Gatling und Selenium genannt. Das wirklich charmante an diesem Tool ist aber definitiv, dass es die Spezifikation der Test-Szenarien in einem gemeinsamen YAML Dialekt vereinheitlicht und deutlich vereinfacht. Gleichzeit bleibt es einem aber freigstellt, weiterhin Tests in den Tool eigenen Formaten - HTML für Selenium, XML/JMX für JMeter und Scala für Gatling - zu spezifizieren.

Gerade dieser Mix aus limitiertem, einheitlichem und spezialisiertem Setup erlaubt es auch weiterhin die Flexibilität von JMeter zu nutzen und gleichzeitig von der hohen Performance von Gatling zu profitieren.

Ein weitere Vorteil von Taurus besteht darin, dass es nicht nur die Konfiguration und Spezifikation von Tests vereinheitlicht, sondern zur selben Zeit die Ergebnisse der verwendeten Tools während eines Testlaufs zusammenführt. So entfällt der aufwändige Prozess Logdateien und Test-Artefakte nach einem Testlauf mühselig mit selbst geschriebenen Skripten, Templates usw. zusammenzuführen, um sie dann weiterzuverarbeiten.

Installation

Um Taurus lokal auf Linux zu installieren, gehen Sie wie folgt vor:

  1. Python und pip installieren (falls nicht vorhanden):

    sudo apt update
    sudo apt install python3 python3-pip
    
  2. Taurus über pip installieren:

    pip3 install --user bzt
    
  3. Installation überprüfen:

    bzt --version
    

Fertig! Taurus ist nun einsatzbereit und kann über den Befehl bzt mit YAML-Konfigurationsdateien genutzt werden. Optional kann per virtualenv die Installation in einer isolierten Umgebung durchgeführt werden. Und falls sich hier jemand wundert - alle weiteren Tools werden später automatisch durch Taurus installiert. Es reicht die einfache Spezifikation des verwendeten Testtools in eurem Testplan. Aber dazu mehr im nächsten Abschnitt.

Grundrauschen mittels Taurus

Gatling war mir vor der Arbeit mit Taurus nicht wirklich ein Begriff. Aber seid ich verstärkt mit Taurus arbeite, bin ich auf den Geschmack gekommen. Gerade weil Gatling auf Scala basiert und somit deutlich spürbar weniger System Resssourcen benötigt, als ein vergleichbares Setup in JMeter, ist es mittlerweile mein Mittel der Wahl, wenn es um die Erzeugung von einem soliden Grundrauschen geht. Und daraus ergibt sich natürlich direkt der positive Aspekt, ich kann auf identischer Hardware entweder deutlich mehr Druck erzeugen, oder gleichzeitig parallel mehr komplexe Workflows laufen lassen, um ein System und dessen Performance zu testen.

Die folgende Yaml-Datei enthält einen einfachen Testplan, der mit recht geringem Ressourcen-Aufwand über einen Zeitraum von 2:30m Grundrauschen auf Website https://pdepend.org erzeugt. Die Gesamtzeit setzt sich dabei auf 30 Sekunden Ramp-Up und 2:00 Haltezeit mit 40 konkurrierenden Request zusammen.

execution:
- executor: gatling
  concurrency: 40
  ramp-up: 30s
  hold-for: 2m
  scenario: pdepend

scenarios:
  pdepend:
    requests:
    - ${url}
    data-sources:
    - path: gatling-urls.csv
      delimiter: ','
      quoted: false
      encoding: "utf-8"
      loop: true
      variable-names: label,url
      random-order: true

Für die Definition der eigentlichen Endpunkt, die im Test verwendet werden nutzen ich die folgende CSV-Datei, die im gleichen Verzeichnis liegt, wie der Test.

label,url
home,https://pdepend.org/
docs,https://pdepend.org/documentation/getting-started.html
screenshots,https://pdepend.org/screenshots.html
download,https://pdepend.org/download/index.html
support,https://pdepend.org/support.html

Gestartet werden kann dieser Test nun mittels:

/opt/taurus/bin/bzt 01-gatling.yaml

Und jetzt passiert die schon anfänglich erwähnte Magic. Dadurch das wie executor: gatling in unserem Testplan definiert haben, beginnt Taurus vor dem ersten Testlauf mit der Installation von Gatling im lokalen Environment.

Was für mich bei der ersten Nutzung von Taurus ein echter Augenöffner war, ist die auf der Shell dargestellte Echtzeitübersicht, während der ausführung meines Testplans. In dieser Darstellung sieht mach nicht nur den Fortschritt, sondern auch direkt diverse Live-Metriken wie Antwortzeiten, Durchsatz (r/s) und Fehlerraten pro URL. Die kompakte, strukturierte Ausgabe zeigt schon, dass hier sehr erfahrende QA-/Performance-Experten bei der Umsetzung der Live-Anschicht beteiligtwaren, denn es ist direkt möglich Engpässe oder Auffälligkeiten früh zu identifizieren. Als Bonus bekommt man am Ende die Ergebnisse noch einmal übersichtlichen zusammengefasst, inklusive Statistiken zu Latenz, Durchsatz und Erfolgquote. Die folgende Abbildung zeigt die Echtzeitübersicht während der Ausführung des Testplans.

Taurus realtime overview

Das war's. So schnell und einfach kann ich mit Taurus einen Test erstellen, der ein Grundrauschen bzw. eine Belastung auf dem Webserver erzeugt. Mit dieser Basis können nun weiter detailliertere Tests ausgeführt werden, die das Verhalten von kritischen Funktionen der Anwendung unter Last prüfen.

Ach, fast hätte ich es vergessen. Nach jedem Testlauf werden alle am Test beteiligten Elemente (der Plan selbst, generierte Dateien, Fixtures, Logs, die getesteten Datein und weiteres) in einem Unterverzeichnis mit passendem Zeitstempel archiviert.

Taurus test run artifacts

Mit diesen archivierten Daten und zusätzlich während des Tests aufgenommenen Metriken ist es ein einfaches eine Datenbank aufzubauen, die die qualitative Entwicklung der Software über die Zeit aufzubauen. Mit einer solchen Historie ist es möglich eigene Dashboards zu bauen und daraus die zeitliche Verschlechterung bzw. Verbesserung meiner Software zu visualisieren. Zeitgleich ist es so auch möglich wiederkehrende Verschlechterungen oder Probleme automatisch und frühzeitig zu erkennen.

Im nächsten Beitrag werden wir den Testplan etwas erweitern und neben dem Grundrauschen auch noch eine Funktion bzw. einen Workflow unter Last setzen, so dass wir schauen können, ob eine businesskritische Funktion unser Applikation auch unter einer deutlich spürbaren Grundlast noch fehlerfrei funktioniert.

Quellen

  1. https://gettaurus.org/install/Installation/ - Installing and Upgrading
  2. https://gettaurus.org/docs/DataSources/ - Data Sources
  3. https://gettaurus.org/docs/Gatling/ - Gatling Executor

Hinweis

Dies ist die deutsche Fassung des Blogposts Loadtest 101 - Starting with Taurus