Sean Patrick Floyd
Sean Patrick Floyd

Reputation: 299108

Gatling: Dynamically assemble HttpCheck for multiple Css selectors

I am working on a Gatling test framework that can be parameterized through external config objects. One use case I have is that there may be zero or more CSS selector checks that need to be saved to variables. In my config object, I've implemented that as a Map[String,(String, String)], where the key is the variable name, and the value is the 2-part css selector.

I am struggling with how to dynamically assemble the check. Here's what I got so far:

val captureMap: Map[String, (String, String)] = config.capture
httpRequestBuilder.check(
  captureMap.map((mapping) => {
    val varName = mapping._1
    val cssSel = mapping._2
    css(cssSel._1, cssSel._2).saveAs(varName)
  }).toArray: _* // compilation error here
)

The error I'm getting is:

Error:(41, 10) type mismatch;
 found   : Array[io.gatling.core.check.CheckBuilder[io.gatling.core.check.css.CssCheckType,jodd.lagarto.dom.NodeSelector,String]]
 required: Array[_ <: io.gatling.http.check.HttpCheck]
      }).toArray: _*

apparently, I need to turn my CheckBuilder into a HttpCheck, so how do I do that?

Update:
I managed to get it to work by introducing a variable of type HttpCheck and returning it in the next line:

httpRequestBuilder.check(
  captureMap.map((mapping) => {
    val varName = mapping._1
    val cssSel = mapping._2
    val check:HttpCheck= css(cssSel._1, cssSel._2).saveAs(varName)
    check
  }).toArray: _*
)

While this works, it's ugly as hell. Can this be improved?

Upvotes: 4

Views: 776

Answers (1)

der Bomber
der Bomber

Reputation: 81

I had the same issue.

I had the following imports:

import io.gatling.core.Predef._
import io.gatling.http.Predef.http

I changed these imports to:

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.http.request.builder.HttpRequestBuilder.toActionBuilder

which made it work.

Upvotes: 5

Related Questions