0

I am new to jmeter and i am stuck in a condition . I am running jmeter http sample using a csv file where i am using a pre-processor script in which doing the following-

  1. setting http.method as per request like POST , GET , PUT ,PATCH
  2. setting http.path as "/restpath"
  3. setting request body.json

For Path i am using a "http.path" and passed the same in http sampler like ${http.path}. All above is working fine until i have dependent HTTP request like below use case -

Step 1 - Hit HTTP Request on path "/restpath" . After successful submission , i got a serverId in response and save the same in json extractor variable "serverID".

Step 2- Now i have to hit http request on path "/rest/${serverID}" . when i am trying to pass the same from csv file then the same is not replacing with captured variable in step 1 . Whatever i passed in csv file in http.path got passed and submit.

Expectation - In Sheet --> http.path == "/restpath/${serverID}" In HTTP Request submission --> "/restpath/4894rh89r"

Actual - In Sheet --> http.path == "/restpath/${serverID}" In HTTP Request submission --> "/restpath/${serverID}"

import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.protocol.http.util.HTTPArgument;

//test input parameters
def httpMethod = vars.get("http.method");

//change the http method as per the data sheet
sampler.setMethod(httpMethod);

//set the HTTP Path
//URL url = new URL(vars.get('http.path'));
//vars.put('http.path',url.getPath());

//set the HTTP request body
if(!vars.get("input.json").equals("")){
    def dataToBePosted = new CompoundVariable(new File(vars.get("jmeter.test.home") + vars.get("input.json")).text).execute();
    def arg= new HTTPArgument("", dataToBePosted, null, true);
    arg.setAlwaysEncoded(false);
    sampler.getArguments().addArgument(arg);

    //HTTP Body is set to
    log.info(dataToBePosted);
}

Tried couple of hit n trial using __V() functions but no luck :(

1 Answer 1

0

I think you need to change this line:

def dataToBePosted = new CompoundVariable(new File(vars.get("jmeter.test.home") + vars.get("input.json")).text).execute();

to this one:

def dataToBePosted = ((org.apache.jmeter.engine.util.CompoundVariable)([new File(vars.get("jmeter.test.home") + vars.get("input.json")).text])).execute()

Demo:

enter image description here

More information:

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

1 Comment

Thanks for looking on this. I got the solution simply using ${__eval(${http.path})} function :)

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.