How to check if Gatling's session variable exists outside of exec block?

My case is quite simple. I have a REST call defined in Scala class - BackendApi:

def eventPathTreeCall(request: EventPathTreeRequestBuilder): HttpRequestBuilder = { val url = http(url).get(url).headers(httpGetHeaders()) }

This call is used by two scenarios - one simulating loading a webpage, and other just testing REST calls. Depending on which scenario is making the call, I need different request headers. For loading web page scenario I need to pass X-CSRF-TOKEN, but I do not want to send it when executing second scenario. What I wanted to achive, is to have an if statement, checking if csrf-token variable is defined in Gatling’s session. My first thought would be to use Gatling EL:

def httpGetHeaders(): Map[String, String] = { val map = collection.mutable.Map( "Etag" -> "", "X-Forwarded-For" -> "", "X-Origin-Id" -> "3", "X-Requested-With" -> "XMLHttpRequest", "Pragma" -> "no-cache", "Cache-Control" -> "no-cache", "Connection" -> "keep-alive") if (!"${csrf-token.isUndefined()}".toBoolean)) map.put("X-CSRF-Token", "${csrf-token}") map.toMap }

Unfortunately it does not work, I get an exception about parsing boolean.

Caused by: java.lang.IllegalArgumentException: For input string: “${csrf-token.isUndefined()}”
So it is clear that Gatling’s expression is not evaluated. When I have created a var with headers, and tried to use expressions in it they were populated correctly:

val getHeaders = Map( "Etag" -> "", "X-CSRF-Token" -> "${csrf-token}", "X-Forwarded-For" -> "", "X-Origin-Id" -> "3", "X-Requested-With" -> "XMLHttpRequest", "Pragma" -> "no-cache", "Cache-Control" -> "no-cache", "Connection" -> "keep-alive" )

If my idea is wrong, please tell me how to use session variable value outside of gatling exec blocks, and base test’s logic on these values in Scala code.

have you found any solution for this? i got the same problem :frowning:

${csrf-token.isUndefined() is only going to work in the context of one of the gatling dsl flow control statements (doIf / doIfOrElse …). You can’t just use it in a regular ‘if’ block as that block has no knowledge of the session or how to use it to resolve your variable.