Я использую вызов функции внутри другой функции в Препроцессор JSR223
Получение тела запроса из родительского пробоотборника HTTP
String requestBody = sampler.getArguments().getArgument(0).getValue();
log.info("Request body is : " + requestBody);
Значение правильно обрабатывается в функции __V
log.info(${__V(requestBody)});
Та же функция __V не оценивается внутри функции MD5
String md5hash = "${__MD5(${__V(requestBody)},)}";
log.info("md5hash is : " + md5hash);
Журнал JMeter приведен ниже:
2022-03-17 15:10:01,135 INFO o.a.j.m.J.JSR223 PreProcessor: Request body is : {
"contact":"1234567890"
}
2022-03-17 15:10:01,135 INFO o.a.j.m.J.JSR223 PreProcessor: {
"contact":"1234567890"
}
2022-03-17 15:10:01,135 INFO o.a.j.m.J.JSR223 PreProcessor: md5hash is :
1be38aa366c4b7daef5e4b527902a97b
Хэш MD5, сгенерированный на шаге 4, т. е. 1be38aa366c4b7daef5e4b527902a97b представляет собой текст запростело. Я хочу, чтобы MD5 генерировался для переменной запростело.
Не встраивайте Функции или переменные JMeter в скрипты Groovy в соответствии с документацией JSR223 Sampler:
The JSR223 test elements have a feature (compilation) that can significantly increase performance.
When using this feature, ensure your script code does not use JMeter variables or JMeter function calls directly in script code as caching would only cache first replacement. Instead use script parameters.
Чтобы сгенерировать контрольную сумму MD5 переменной requestBody
, используйте следующий код:
def md5hash = vars.get('requestBody').md5()
Дополнительная информация о сценариях Groovy в JMeter: Apache Groovy — зачем и как его использовать
Эта функция возвращает правильную контрольную сумму md5 для значения переменной requestBody
, если контрольная сумма отличается от ожидаемой, вам нужно повторно посетить место, где вы создаете/назначаете эту переменную. Его значение можно проверить с помощью Комбинация Debug Sampler и View Results Tree Listener
Теперь я не использую функции внутри семплера JSR223, а вместо этого использую функцию .md5().
Привет @Dmitri, вышеуказанная функция не возвращает правильное значение MD5, например. тело моего запроса {"contact":"9876543210"}. Правильное хэш-значение MD5 — a73602753fe29e781aebc24a14d6e203, но функция md5 возвращает значение как 904c7a176f07435919ac6a7a08662166.