0

Ich möchte, dass Benutzer "Count, repeatCount, testServerUrl und definitionId" über die Befehlszeile während der Ausführung von Gatling eingeben können. Von der Befehlszeile aus führe ichWie übergebe ich die Befehlszeile in Gatling mit dem Scala-Skript?

Grundsätzlich Null-Wert dort übergeben. Gleiches passiert mit 'definitionId'. Folgendes ist der Code. Sie können es mit einer beliebigen URL versuchen. Sie müssen nur den Wert überprüfen, den Sie über die Befehlszeile angeben oder nicht?

import io.gatling.core.Predef._ 
import io.gatling.http.Predef._ 
import scala.concurrent.duration._   

class TestCLI extends Simulation {   
    val userCount = Integer.getInteger("userCount", 1).toInt  
    val holdEachUserToWait = 2 
    val flowRepeatCount = Integer.getInteger("flowRepeatCount", 2).toInt  
    val definitionId = java.lang.Long.getLong("definitionId", 0L)  
    val testServerUrl = System.getProperty("testServerUrl") 

    val httpProtocol = http 
      .baseURL(testServerUrl) 
      .inferHtmlResources() 
      .acceptHeader("""*/*""") 
      .acceptEncodingHeader("""gzip, deflate""") 
      .acceptLanguageHeader("""en-US,en;q=0.8""") 
      .authorizationHeader(envAuthenticationHeaderFromPostman) 
      .connection("""keep-alive""") 
      .contentTypeHeader("""application/vnd.v7811+json""") 
      .userAgentHeader("""Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36""") 

    val headers_0 = Map(
      """Cache-Control""" -> """no-cache""", 
      """Origin""" -> """chrome-extension://faswwegilgnpjigdojojuagwoowdkwmasem""") 


        val scn = scenario("testabcd") 
         .repeat (flowRepeatCount) { 
          exec(http("asdfg") 
          .post("""/api/workflows""") 
          .headers(headers_0) 
          .body(StringBody("""{"definitionId":$definitionId}"""))) // I also want to get this value dynamic from CLI and put here 
          .pause(holdEachUserToWait) 
         }     

        setUp(scn.inject(atOnceUsers(userCount))).protocols(httpProtocol) 

       } 

Antwort

3

Hier ist keine Hauptmethode definiert, daher denke ich, es wäre schwierig, das Befehlszeilenargument hier zu übergeben. Aber für die Arbeit herum, was Sie tun können, lesen Sie die Eigenschaft aus den Umgebungsvariablen.

Dafür finden Sie hier Hilfe! How to read environment variables in Scala

Bei gatling Siehe hier: http://gatling.io/docs/2.2.2/cookbook/passing_parameters.html

ich denke, das werden Sie getan:

import io.gatling.core.Predef._ 
import io.gatling.http.Predef._ 
import scala.concurrent.duration._ 

    class TestCLI extends Simulation { 



     val count = Integer.getInteger("users", 50) 
     val wait = 2 
     val repeatCount = Integer.getInteger("repeatCount", 2) 

     val testServerUrl = System.getProperty("testServerUrl") 
     val definitionId = java.lang.Long.getLong("definitionId", 0L) 


     val scn = scenario("testabcd") 
      .repeat (repeatCount) { 
       exec(http("asdfg") 
       .post("""/xyzapi""") 
       .headers(headers_0) 
       .body(StringBody("""{"definitionId":$definitionId}"""))) // I also want to get this value dynamic from CLI and put here 
       .pause(wait) 
      }     

     setUp(scn.inject(atOnceUsers(count))).protocols(httpProtocol) 

    } 

Auf der Kommandozeile zunächst exportieren Sie die Umgebungsvariable JAVA_OPTS durch diesen Befehl direkt mit in Terminal.

export JAVA_OPTS = "- Duse RCount = 50 -DflowRepeatCount = 2 -DdefinitionId = 10220301 -DtestServerUrl = 'etwas'"

+0

kein Beispiel, wie man diesen Wert von Benutzer zu bekommen? So, System.getenv ("Anzahl") System.getenv ("repeatcount") System.getenv ("testServerUrl")? – Peter

+1

Siehe Ich habe die Antwort aktualisiert, wie es in Gatling gemacht wird! Werfen Sie einen Blick und upvote! : D –

+0

ja lesen Sie den gleichen Link, aber nicht wissen, wie in meinem Projekt zu implementieren. Wenn möglich, können Sie bitte bei der Implementierung des obigen Codes helfen? TIA – Peter