gatlingscala-gatling

Inject user index into body file in Gatling scenario


I want to use ELFileBody and put a variable in a txt file. This file contains a soap request.

The request (scenario) is executed only one time but as many times as users. I want to put into file variable, the user index (position in execution).

Something like this :

.set("myVar", userIndex) //myVar is the variable declared in the body file ( ${myVar} )

Here is my code for now :

  val users = 1500
  val baseUrl = "http://127.0.0.1:7001"

  val httpProtocol = http
    .baseURL(baseUrl)
    .inferHtmlResources()
    .acceptEncodingHeader("gzip,deflate")
    .contentTypeHeader("text/xml;charset=UTF-8")
    .userAgentHeader("Apache-HttpClient/4.1.1 (java 1.5)")

  val headers_0 = Map("SOAPAction" -> """""""")

  val uri1 = "http://127.0.0.1:7001/myProject-ws/myProjectWebService"

  val scn = scenario("Scenario1Name")
    .exec(http("scn.Scenario1Name")
      .post("/myProject-ws/myProjectWebService")
      .headers(headers_0)
      .body(RawFileBody("File_0000_request.txt")))

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

How can I inject the user index into myVar variable in the request body ?


Solution

  • finally, i used a function that return a dynamic reference (id) and I call it from my scenario.

    def getDynamicId(): String = {
      val formatter = new SimpleDateFormat("yyyyMMddHHmmss.SSS")
      val result = "PM".concat(formatter.format(Calendar.getInstance().getTime()))
      result
    } 
    
    //[...]
    
    scenario("ScenarioName")
      .exec(session => session.set("myVar", getDynamicId)) 
    
    // [...]
    
    .body(ElFileBody("BodyFile_0000_request.txt")))
    

    And in the body file, I have the variable ${myVar}