Jmeter HTTP setPath - как мне установить динамический c путь в http-сэмплере - PullRequest
0 голосов
/ 03 мая 2020

Я новичок в Jmeter, и я застрял в состоянии. Я запускаю пример jmeter http с использованием файла csv, где я использую скрипт препроцессора, в котором выполняю следующие действия:

  1. , настраивая http.method в соответствии с запросом, таким как POST, GET, PUT, PATCH
  2. установка http.path как "/ restpath"
  3. установка тела запроса. json

Для пути я использую "http.path" и передал то же самое в http-сэмплере, как $ {http.path}. Все вышеперечисленное работает нормально, пока у меня не будет зависимого HTTP-запроса, как показано в примере ниже -

Шаг 1 - Нажмите HTTP-запрос по пути "/ restpath ". После успешной отправки я получил serverId в ответ и сохранил то же самое в json Извлекающая переменная "serverID".

Шаг 2 - Теперь мне нужно нажать http запрос по пути " / rest / $ {serverID}". когда я пытаюсь передать то же самое из CSV-файла, то же самое не заменяется захваченной переменной на шаге 1. Все, что я передал в CSV-файле в http.path, было передано и отправлено.

Ожидание - В листе -> http.path == "/ restpath / $ {serverID}"При отправке HTTP-запроса ->" / restpath / 4894rh89r"

Actual - In Sheet -> http.path ==" / restpath / $ {serverID}"При отправке HTTP-запроса ->" / 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);
}

Попробовал несколько успешных испытаний с использованием __V () работает, но не повезло :(

1 Ответ

0 голосов
/ 04 мая 2020

Я думаю, вам нужно изменить эту строку:

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

на эту:

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

Демо:

enter image description here

Дополнительная информация:

...