Параметризация удаляет escape-символ из JSON POST-запроса и выдает ошибку Bad request 400 в JMeter.

Запись сценария JMeter захватывает почтовый запрос JSON с тремя escape-символами (\) и повторно запускает его без параметризации, он работает нормально. Но если мы используем любую переменную «${xyz}» в любом месте тела запроса и запускаем в JMeter, все три косых черты (\) становятся двумя косыми чертами (\) при передаче запроса в приложение. Затем запрос не удался как «BAD Request», так как приложение не принимает запрос с двумя косыми чертами.

Я уже пробовал метод "FileToString", но безуспешно.

 "Draft":{
"id": 123654656,
"draftdata":{\\\"accCat\\\":\\\"207\\\",\\\"accNumber\\\":\\\"656565
\\\",\\\"id\\\":${Var_ID},...}
}

 "Draft":{
"id": 123654656,
"draftdata":{\\\"accCat\\\":\\\"207\\\",\\\"accNumber\\\":\\\"656565
\\\",\\\"id\\\":9876,...}
}

Когда я передаю запрос с переменной, запрос становится таким, как показано ниже, и его можно увидеть в дереве результатов как тело запроса.

"Draft":{
"id": 123654656,
"draftdata":{\\"accCat\\":\\"207\\",\\"accNumber\\":\\"656565
\\",\\"id\\":${Var_ID},...}

Но без переменной параметризации он работает отлично, так как запрос идет с тремя косыми чертами (\).


person ArupBiswas    schedule 27.03.2019    source источник


Ответы (4)


Я не могу воспроизвести вашу проблему, используя полезную нагрузку в текстовом файле и функцию __FileToString().

введите здесь описание изображения

JMeter отправляет текстовые данные точно так, как они включают тройную обратную косую черту в соответствующих местах. Я даже перехватил запрос с помощью инструмента Wireshark Sniffer, чтобы исключить возможную проблему с прослушивателем View Results Tree.

введите здесь описание изображения

Возможно, вы страдаете от проблемы, которая уже была устранена в последнем выпуске JMeter, в соответствии с рекомендациями JMeter Best Practices вы всегда должны использовать последнюю версию JMeter, поэтому обязательно обновите ее до JMeter 5.1 или другая последняя доступная версия с JMeter Downloads, и вы сможете без проблем использовать параметризацию.

person Dmitri T    schedule 27.03.2019
comment
Поскольку вы использовали функцию __FileToString() без функции __eval, она не разрешает значение переменной и рассматривает переменную как строку. Когда мы используем метод ${__eval($__FileToString()..), он разрешает переменную, но удаляет одну косую черту. Так что проблема все еще существует. - person ArupBiswas; 27.03.2019

У меня такая же проблема в JMeter 5.1. У меня есть JSON, который встроен в JSON. Пример:

{"messages":"{\"outputs\":[\"{\\\"objectstatus\\\":\\\"${__Random(100,200,)}\\\"}\"]}"}

То, что будет опубликовано, это недопустимый JSON:

{"messages":"{\"outputs\":[\"{\\"objectstatus\\":\\"152\\"}\"]}

Даже если я перенесу все функции из тела запроса и буду использовать только подстановку переменных, произойдет то же самое.

Обходной путь - "двойной экран" всего. Значение \" becomes \\" и \\\" becomes \\\\\\".

person mpp4manu    schedule 16.10.2019

https://bz.apache.org/bugzilla/show_bug.cgi?id=63255 Я добавил простой тест JMX, показывающий противоречивое поведение. В Jmeter 5.3 он все еще есть.

person Alexey Anischenko    schedule 18.05.2020
comment
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - person borchvm; 18.05.2020
comment
Существенной частью здесь является связывание идентификатора дефекта Jmeter, имеющего всю информацию на табличке, с соответствующими вопросами SO. Не думайте, что багзилла Apache никуда не денется :) - person Alexey Anischenko; 18.05.2020

Замените \\\ на \\\\\ Это сработало для меня.

person Ankan Bhattacharyya    schedule 25.03.2021
comment
Не могли бы вы указать, где это изменение должно произойти, с помощью фрагмента кода? - person Yves Gurcan; 26.03.2021