Untergeordnete Seiten
  • 2 - Szenario: Dokument laden

Versionen im Vergleich

Schlüssel

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

In 1 - Szenario: Grundlagen haben wir unseren ersten erfolgreichen Gatling-Test geschrieben und ausgeführt. In diesem Tutorial testen wir die Performance beim Laden eines Dokuments.

Dokument laden

Beim Laden eines Dokuments geht standardmäßig eine Anfrage an den Server, die das Laden initialisiert. Diese Anfrage wollen wir aufzeichnen, um das Laden in unserem Test nachstellen zu können.

Aufzeichnen des Requests

Bereits vor dem Aufruf sollten wir die Entwicklerwerkzeuge unseres Browsers öffnen (meist über F12). Ist die Seite vollständig geladen, können wir in den Reiter Netzwerk wechseln und die Anfragen nach XHR filtern. Uns interessiert der Request, der den Service-Call createDocument enthält. In Google Chrome funktioniert das ungefähr so:

Erweitern
titleKlicken Sie hier, um zu erweitern...

Image RemovedImage Added

Den kopierten Request legen wir nun unter /src/test/resources/bodies in der Textdatei Request_Load_File.txt ab.

Testcode

Zur Erstellung dieses Testfalls legen wir die Datei SimulationFileLoading.scala unter src/test/scala/com/levigo/jadice/web/performance an.

Header setzen

Um gültige Anfragen zu senden und Fehler auszuschließen müssen wir die Header der Anfragen korrekt setzen. Wir ergänzen folgende Header in das neue Szenario:

Codeblock
titleSimulation - Header
themeRDark
languagescala
val defaultHeader = Map(
        "Accept" -> "*/*",
        "Accept-Encoding" -> "gzip, deflate, br",
        "Accept-Language" -> "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
        "Cache-Control" -> "no-cache",
        "Connection" -> "keep-alive",
        "Content-Type" -> "text/plain;charset=UTF-8",
        "DNT" -> "1",
        "Origin" -> "http://localhost:8080",
        "Pragma" -> "no-cache",
        "User-Agent" -> "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",
        "X-GWT-Module-Base" -> "http://localhost:8080/jwt-tutorial-003-5.7.0.2/imageviewer/",
        "X-GWT-Permutation" -> "79A1155DD3CB7EBBA33EE56F4B55FD77",
        "X-JWT-Client-ID" ->"${uuid}")

 

Damit der Server jeden unserer Clients eindeutig identifizieren kann, müssen wir  X-JWT-Client-ID setzen. Dazu generieren wir eine UUID um diese im Header zu verwenden. Die Generierung erfolgt als erste Aktion im Szenario.

Codeblock
titleSzenario - UUID-Generierung
themeRDark
languagescala
.exec(_.set("uuid", java.util.UUID.randomUUID))

 

Über das Statement ${uuid} können wir nun auf die UUID zugreifen, wie in der letzten Zeile des defaultHeader zu sehen.

Aufruf ausführen

Da wir nun die Header und die Payload vorbereitet haben, können wir das Szenario um den Aufruf ergänzen:

Codeblock
titleSzenario - Dokument laden
themeRDark
languagescala
.exec(http("Load Document")
        .post("/jwt/transport/longpoll")
        .headers(defaultHeader)
        .body(RawFileBody("Request_Load_File.txt"))
    )

 

Der Test sollte jetzt lauffähig sein und ein Dokument anfragen:

Codeblock
titleSimulation - vollständig
themeRDark
languagescala
collapsetrue
import io.gatling.core.Predef._
import io.gatling.http.Predef._

class SimulationSimple extends Simulation {
    val httpProtocol = http
        .baseURL("http://localhost:8080/jwt-tutorial-003-5.7.0.2")
 
    val defaultHeader = Map(
        "Accept" -> "*/*",
        "Accept-Encoding" -> "gzip, deflate, br",
        "Accept-Language" -> "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
        "Cache-Control" -> "no-cache",
        "Connection" -> "keep-alive",
        "Content-Type" -> "text/plain;charset=UTF-8",
        "DNT" -> "1",
        "Origin" -> "http://localhost:8080",
        "Pragma" -> "no-cache",
        "User-Agent" -> "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",
        "X-GWT-Module-Base" -> "http://localhost:8080/jwt-tutorial-003-5.7.0.2/imageviewer/",
        "X-GWT-Permutation" -> "79A1155DD3CB7EBBA33EE56F4B55FD77",
        "X-JWT-Client-ID" ->"${uuid}")
        
    val scn = scenario("File loading Scenario")
    	.exec(_.set("uuid", java.util.UUID.randomUUID))
    	.exec(http("Load Document")
        	.post("/jwt/transport/longpoll")
        	.headers(defaultHeader)
    		.body(RawFileBody("Request_Load_File.txt"))
    	)
        
    	setUp(scn.inject(atOnceUsers(5)))

    	.protocols(httpProtocol)
    	.assertions(
      		global.responseTime.max.lte(2000)
    	)
}