hofov33846
hofov33846

Reputation: 1

JMeter - How to add data to request body in every loop?

I'm working with an API that returns response in the following format:

"products": [
  {
    "name": "ABC"
    "id": "ABCDEFG"
    "Status":Open
  }
  {
    "name": "XYZ"
    "id": "LMNOPQ"
    "Status":Open
  } ]

The number of products varies and so does the number of IDs generated. I need to extract all id values which I'm doing using a JSON extractor and setting the match number to -1.

I need to pass these ID values in this request:

"products": [
  {
    "id": "id1"
  }
  {
    "id": "id2"
  } ]

If there are 5 IDs then the request needs to contain 5 id values.

I've tried using loops but I can't figure out how to add a { "id": } to the request body on every iteration of the loop. Is there any way to simulate this?

Upvotes: 0

Views: 529

Answers (1)

Dmitri T
Dmitri T

Reputation: 168157

Instead of using JSON Extractor you could do everything with JSR223 PostProcessor and extract the IDs and build the next request body in one shot.

Example code:

def ids = new groovy.json.JsonSlurper().parse(prev.getResponseData()).products.collect { product -> product.id }

def payload = [:]
def products = []
ids.each { id ->
    products.add([id: id])
}
payload.put('products', products)

vars.put('payload', new groovy.json.JsonBuilder(payload).toPrettyString())

You will be able to refer generated value as ${payload} where required.

More information:

Upvotes: 0

Related Questions