0

I have a Jmeter (version 4.0) test script where I am using json extractor to fetch an array of strings from the response json using $..Names and storing it in a variable groupOfNames. The various names are stored like groupOfNames_1, groupOfNames_2, groupOfNames_ALL.

I need to make POST call next with body as

{
"name1", "name2", "name3" (--actual values--)
}

How can i achieve this using bean shell preprocessor? groupOfNames_ALL gives me all value but like this.... name1, name2, name3 (without quotes surrounding individual names). Please help. Thanks.

2

2 Answers 2

3

I heard Groovy is the New Black so you can add quotation marks around each of names as simply as:

vars.put('groupOfNames_ALL',vars.get('groupOfNames_ALL').split(',').collect {"\"$it\""  }.join(', '))

Demo:

JMeter Groovy Add Quotation Marks Around Strings

Also as a gentle reminder: JMeter users are encouraged to use JSR223 Test Elements for any form of scripting since JMeter 3.1

Sign up to request clarification or add additional context in comments.

4 Comments

I have to mark your solution as the right answer as it achieved what i wanted in just a single line. Can you explain what collect and $it is doing in your solution? Thanks a lot anyways :)
You're asking for a story while I'm limited to a chapter. It is implicit parameter: groovy-lang.org/closures.html
i googled a bit after i asked you and got a rough idea. i am not familiar with groovy so couldn't get it. Thanks for providing the link. It helps
@DmitriT thanks for this. have been looking for a couple of hours on how to solve this problem :D
3

Put the below code in your BeanShell PreProcessor:

int matchNr = Integer.parseInt(vars.get("groupOfNames_matchNr"));

for(int i = 1; i <= matchNr; i++){
    String Names = vars.get("groupOfNames_" + i);
    if(i == matchNr){
        vars.put("AllNames", vars.get("AllNames") + "\"" + Names + "\"");
    }
    else if(i == 1){
        vars.put("AllNames","\"" + Names + "\", ");
    }
    else{
        vars.put("AllNames", vars.get("AllNames") + "\"" + Names + "\", ");
    }

Then use the variable ${AllNames} in your post as below:

{
${AllNames}
}

1 Comment

Your solution works fine and it solved my problem. Thanks a ton.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.