Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

In 0 - Projekt einrichten haben wir unser GatlingJMeter-Projekt aufgesetzt und alles für unseren ersten Test vorbereitet. In diesem Tutorial gehen wir auf die benötigten Grundlagen ein und erstellen ein erstes einfaches Test-Szenario. 

Vorbedingung

Als Vorbedingung benötigen wir natürlich unsere JWT-Anwendung, die wir aufrufen und testen können. In den folgenden Tutorials gehen wir davon aus, dass wir die Anwendung lokal unter folgender URL deployed haben: http://localhost:8080/jwt-tutorial-003-5.7.0.2/

Szenario Setup 

Unser erstes Szenario sendet eine einfache Anfrage an das jadice web toolkit. Das Szenario legen wir in dem Ordner src/test/scala/org/jwt/performance/ unter dem Namen SimulationSimple.scala an. In diesem Szenario legen wir 5 Nutzer an, welche eine Anfrage an die Base-URL senden.

Als Erfolgskriterien definieren wir:

  • Eine erfolgreiche Antwort des Servers (HTTP 200)
  • Eine maximale Antwortzeit von 2 Sekunden.
Codeblock
languagescala
themeRDark
titleSimulationSimple.scala
import io.gatling.core.Predef._ import io.gatling.http.Predef._ class SimulationSimple extends Simulation { val httpProtocol = http .baseURL("http://localhost:8080/")

zeigen wir, wie Metriken exponiert werden.

Überblick

Die aktuelle Übersicht über die Metriken finden Sie unter https://webtoolkit.jadice.com/doc/docs/en/reference/monitoring/

Micrometer

Das Tutorial 005 wurde erweitert, sodass die für das Exponieren der Metriken benötigten Dependencies vorhanden sind:

Codeblock
languagexml
titlepom.xml
    <!-- Required for exposing the metrics (only needed for the performance test tutorial, which is not part of tutorial 005 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-registry-prometheus</artifactId>
      <scope>runtime</scope>
    </dependency>


Außerdem wurde die application.yml angepasst, sodass die Metriken, wie im Spring-Boot Umfeld gewohnt, exponiert werden:

Codeblock
languageyml
management:
  endpoints:
    web:
      exposure:
        include: valhealth, defaultHeadermetrics, =info, Map(prometheus
    "Accept" -> "*/*")  # uncomment the following line for valdetailed scncache =info scenario("Simple Scenario")created via CacheInfoResource)
      .exec(http("Simple Request")
      .get("/")
  # include: health, metrics, info, prometheus, jwtcachedetailed

  metrics:
    enable:
.headers(defaultHeader)       .check(status.is(200))all: true
    export:
)      prometheus:
 setUp(scn.inject(atOnceUsers(5)))     .protocols(httpProtocol)  enabled: true

.assertions(  endpoint:
    global.responseTime.max.lte(2000)health:
    ) }
  • httpProtocol

Die Variable httpProtocol speichert die Http-Konfiguration für unsere Anfragen.

  • header

In der Variable defaultHeader werden die Anfrage-Kopfzeilen gespeichert. Dieser können wir nach belieben Anfragen hinzufügen.

  • scn

Hier wird das eigentliche Szenario und somit der Testablauf definiert. Innerhalb eines Szenarios können wir beliebig viele http-Anfragen an die Anwendung senden.

  • setUp

Das Erstellen und Injizieren von Nutzern in das Szenario erfolgt innerhalb der Setup-Methode

  • protocols

Hier wird das oben vorbereitete http-Protokoll angefügt

  • assertions

Unter assertions lassen sich Restriktionen für die Anfragen festlegen

Ausführen von Tests

Die Tests starten wir über folgendes Kommando (entweder über die Konsole oder über einen konfigurierten Maven build):

Codeblock
themeRDark
titleplugin execution
mvn gatling:test

Ergebnisse

Die Ergebnisse eines Tests werden standardmäßig (in der Konfiguration des Plugins innerhalb der pom.xml) unter target/reports/gatling/ abgelegt. Zum Betrachten eines Reports navigieren wir in das entsprechende Verzeichnis und öffnen die zugehörige index.html.

Die Ergebnisse beinhalten Informationen zu:

  • Aktive Nutzer
  • Antwortzeiten
  • Erhaltene Anfragen/Antworten

Das Ergebnis könnte folgendermaßen aussehen:

Erweitern
Image Removed
 show-components: always
      show-details: always


Wenn nun das Tutorial 005 gestartet wird, können wir über 2 Links die Metriken sehen:

Prometheus und Grafana

Eine kurze Einführung, wie man Prometheus und Grafana nutzen kann, um die Werte aus dem Lasttest (s. nächstes Kapitel) zu visualisieren, finden wir im Unterordner jwt-tutorial-performancetest\src\test\resources in der README.md