For the following Gatling simulation
class DeviceSimulation extends Simulation {
var devices: List[Device] = List[Device]()
before {
// Preparing data.
devices = DataFetch.getDevices()
}
// Feed device
val devicesFeederCont: Iterator[Map[String, Device]] = Iterator.continually(devices.map(d => {
Map("device" -> d)
})).flatten
val devicesFeederToKarate: ScenarioBuilder = scenario("feederDeviceToKarate").exec(karateSet("device", session => session("device").as[Device]))
val Devices: ScenarioBuilder = scenario("Device")
.feed(devicesFeederCont)
.exec(devicesFeederToKarate)
.exec(karateFeature("classpath:features/device/Devices.feature"))
setUp(
Devices.inject(rampUsers(5).during(5 seconds))
).protocols()
}
I would like to be able to inject Device
object inside my feature:
Feature: Device actions
Background:
* url 'https://server-host'
* print 'Device obj: ', device
Scenario: Device actions
Given path '/api/device/name/', device.name
When method GET
Then status 200
But, although for the Background print I get: c.intuit.karate - [print] Device obj: Device(1234,989898989)
, for the GET request I have:
GET /api/device/name/com.intuit.karate.graal.JsExecutable@333d7..
I mention that Device is just a case class with two fields:
case class Device(id: Int, name: String)
.
Is there a way to properly use objects passed from feeder inside Karate features?
Right now we've tested only with primitive values passed into the Gatling session. It may work if you convert the data into a java.util.Map
. So maybe your best bet is to write some toMap()
function on your data-object. Or if you manage to emit a JSON string, there is a karate.fromString()
helper that can be useful.
So please read the docs here and figure out what works: https://github.com/karatelabs/karate/tree/master/karate-gatling#gatling-session
You are most welcome to contribute code to improve the state of things.