Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Streams in Gatling repeat blocks

Tags:

scala

gatling

I've come across the following code in a Gatling scenario (modified for brevity/privacy):

val scn = scenario("X")
  .repeat(numberOfLoops, "loopName") {
      exec((session : Session) => {
        val loopCounter = session.getTypedAttribute[Int]("loopName")
        session.setAttribute("xmlInput", createXml(loopCounter))
      })
      .exec(
        http("X")
         .post("/rest/url")
         .headers(headers)
         .body("${xmlInput}"))
      )
  }

It's naming the loop in the repeat block, getting that out of the session and using it to create a unique input XML. It then sticks that XML back into the session and extracts it again when posting it.

I would like to do away with the need to name the loop iterator and accessing the session. Ideally I'd like to use a Stream to generate the XML.

But Gatling controls the looping and I can't recurse. Do I need to compromise, or can I use Gatling in a functional way (without vars or accessing the session)?

like image 660
Synesso Avatar asked Jan 22 '26 12:01

Synesso


1 Answers

As I see it, neither numberOfLoops nor createXml seem to depend on anything user related that would have been stored in the session, so the loop could be resolved at build time, not at runtime.

import com.excilys.ebi.gatling.core.structure.ChainBuilder

def addXmlPost(chain: ChainBuilder, i: Int) =
    chain.exec(
        http("X")
            .post("/rest/url")
            .headers(headers)
            .body(createXml(i))
    )

def addXmlPostLoop(chain: ChainBuilder): ChainBuilder =
    (0 until numberOfLoops).foldLeft(chain)(addXmlPost)

Cheers,

Stéphane

PS: The preferred way to ask something about Gatling is our Google Group: https://groups.google.com/forum/#!forum/gatling

like image 120
Stephane Landelle Avatar answered Jan 24 '26 05:01

Stephane Landelle



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!