yoyobroccoli
yoyobroccoli

Reputation: 33

Jmeter- how to pass a fixed number of values from an array at a time until iterating through all values to a http request

In my get htttp request, I get an array of ids ex: list=[1, 2, 3.....1000] And then for my next http request, I want to pass all the values in the list 10 at a time, so it will be 100 requests total and each time, it takes 10 values from the list array. I'm using a loop controller to call the http request 100 times. but I dont know how to retrieve 10 values at a time, and then go to the next 10, next 10 until all values are used. How should I do that?

Upvotes: 1

Views: 1623

Answers (2)

sunny_teo
sunny_teo

Reputation: 1999

Considering you have the list array available at your disposal by using any extractor.

Extract the sublist from the array and put them in properties. Then, fetch the properties where ever you want it.

In the below I am fetching the sublist from the array and putting it in jmeter properties. enter image description here

Here, I am fetching the values from the properties. This is just for demonstration and you dont need this. After putting list in properties just fetch in HTTP sampler as shown in the last image. enter image description here

Now, to fetch it in HTTP sampler you can use loop and counter and fetch the properties using groovy. Loop for iteration and counter for increment the variable mylist_x. enter image description here

Hope this helps.

Upvotes: 1

Rohit
Rohit

Reputation: 611

  1. Add a regular expression extractor to your get request as a child.
  2. Add the following properties shown in the screenshot to extract List enter image description here
  3. Add a Beanshell sampler/ JSR223 sampler and add the following code. The code below creates a series of variables and store series of 10 values in a variable starting from Final_0 to Final_99

import java.util.Arrays

String complete_List=vars.get("List");

String[] complete_List_Array = complete_List.split(",");

int i;

for(i=1;i<=complete_List_Array.length;i++)

{vars.put("List_"+i,complete_List_Array[i-1]);}

int j;

int loopcount=complete_List_Array.length/10;

vars.put("loopcount",Integer.toString(loopcount));

for(j=0;j

{

StringBuilder sb = new StringBuilder();

sb.append("[");

for(i=j*10+1;i<=(j+1)*10;i++)

{

sb.append(vars.get("List_" + i));

if (i < (j+1)*10)

sb.append(",");

}

sb.append("]");

vars.put("Final_"+j,sb.toString());

}

vars.put("counter","0");

Add a loop counter and mention loop count as ${loopcount} as shown below

You can add HTTP Request as a child of loop counter and to pass series of 1o value at a time use ${__V(Final_${counter})}

Add a beanshell post processor to the http request to that will increment the counter add the following code to the beanshell sampler

int counter = Integer.parseInt(vars.get("counter")) +1;
vars.put("counter",Integer.toString(counter));

You can see in the results its passing series of 10 values at a time and loop will run for 100 times

For more info on beanshell please follow the link

enter image description here

Please let me know if it helps.........

Upvotes: 1

Related Questions