JMeter повторно использует полезную нагрузку предыдущего потока вместо полезной нагрузки нового потока - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь адаптировать скрипт, который я уже должен запустить, используя ввод данных .csv.Когда скрипт запускается без .csv, он отлично работает для любых конфигураций, которые я выбрал.Когда он запускается с использованием .csv, любой сценарий в первом ряду будет работать безупречно, но все с этого момента потерпит неудачу.Причина сбоя заключается в том, что некоторые из моих переменных повторно используются в первом потоке, и я не знаю, как это предотвратить.

Вот как выглядит мой скрипт:

HTTP-запрос - GET $ {url} (url объявляется во входных данных CSV и изменяется при каждом запуске)

-> постпроцессор, который извлекает Variable_1, Variable_2 и Variable_3

Sampler1

-> препроцессор JSR223: создает payloadSampler1, используя javascript, пример:

var payloadSampler1 = { };
payloadSampler1.age = vars.get("Variable_2");
payloadSampler1.birthDate = "1980-01-01";
payloadSampler1.phone = {};
payloadSampler1.phone.number = "555-555-5555";
vars.put("payloadSampler1", JSON.stringify(payloadSampler1));

Sampler2

-> препроцессор JSR223: создает payloadSampler1, используя javascript (такой же, как указано выше, но для других значений)

Sampler3

-> препроцессор JSR223: создает payloadSampler1, используя javascript (такой же, как выше, но для других значений)

Sampler4

-> препроцессор JSR223: создает payloadSampler1используя javascript (так же, как и выше, но для других значений)

HTTP-запрос - POST $ {url} / $ {Variable_1} / submit

-> JSR223 препроцессили: создает payloadSubmit, используя javascript, и смешивает и сопоставляет результаты из вышеупомянутых сэмплеров - например, так:

var payloadSubmit = { };
if (vars.get("someVar") != "value" && vars.get("someVar") != "value2" && vars.get("differentVar") != "true") {
    payloadSubmit.ageInfo = [${payloadSampler1}];
}
if (vars.get("someVar2") != "true") {
    payloadSubmit.paymentInfo = [${payloadSampler2}];
}
payloadSubmit.emailInfo = [${payloadSampler3"}];
payloadSubmit.country = vars.get("Variable_3");
vars.put("payloadSubmit", JSON.stringify(payloadSubmit));

-> BodyData, как показано на скриншоте:

request

У меня есть Debug PostProcessor, чтобы увидеть значения всех этих переменных, которые я создаю.Для первой итерации моего сценария все идеально.Для второго, однако, PostProcessor отладки показывает значения для всех payloadSamplers и всех переменных, правильно измененных для соответствия новым данным строки (из csv), но последняя переменная, payloadSubmit просто повторно использует любые значения, где для первогоитерация потока.

Пример:

Отладка PostProcessor в конце первой итерации показывает:

Variable_1=ABC
Variable_2=DEF
Variable_3=GHI
payloadSampler1={"age":"18","email":null,"name":{"firstName":"Charles"}},{"age":"38","email":null}}
payloadSampler2={"paymentChoice":{"cardType":"CreditCard","cardSubType":"VI"}},"amount":"9.99","currency":"USD"}
payloadSampler3={"email":"tes@email.com"}
payloadSubmit={"ageInfo":[{"age":"18","email":null,"name":{"firstName":"Charles"}},{"age":"38","email":null}],"paymentInfo":[{"paymentChoice":{"cardType":"CreditCard","cardSubType":"VI"}},"amount":"9.99","currency":"USD"],"emailInfo":[{"email":"tes@email.com"}],"country":"GHI"}

Но в конце 2-й итерации показывает:

Variable_1=123
Variable_2=456
Variable_3=789
payloadSampler1={"age":"95","email":null,"name":{"firstName":"Sam"}},{"age":"12","email":null}}
payloadSampler2={"paymentChoice":{"cardType":"CreditCard","cardSubType":"DC"}},"amount":"19.99","currency":"USD"}
payloadSampler3={"email":"tes2@email.com"}
payloadSubmit={"ageInfo":[{"age":"18","email":null,"name":{"firstName":"Charles"}},{"age":"38","email":null}],"paymentInfo":[{"paymentChoice":{"cardType":"CreditCard","cardSubType":"VI"}},"amount":"9.99","currency":"USD"],"emailInfo":[{"email":"tes@email.com"}],"country":"USA"}

Я также вижу, что окончательный HTTP-запрос действительно отправляет старые значения.

Мое очень ограниченное понимание состоит в том, что, поскольку я вызываю переменные, такие как "$ {payloadSampler1}", он будетиспользуйте значение, которое было установлено для этого при первом запуске сэмплера (обратно в 1-й итерации потока).Вот что я попробовал:

Если я использую vars.get ("payloadSubmit") в теле HTTP Sampler, я получаю сообщение об ошибке, так что это не вариант.Если я использую vars.get ("payloadSampler1") в семплерах, которые создают переменные, добавляются дополнительные escape-символы, что нарушает мой JSON.Я попытался добавить счетчик в конец имени переменной и увеличить этот счетчик на каждой итерации потока, но результаты одинаковы.Все переменные и сэмплеры, кроме последнего, имеют обновленные значения, но последний всегда будет повторно использовать переменные из первой итерации потока.

Я также пытался использовать $ {__ javaScript (vars.get ("payloadSubmit _" + vars.get ("ThreadIteration")))}, но результаты всегда одинаковы.

ИЯ также пытался использовать элемент $ {__ counter (,)}, но если я установлю его на TRUE, он всегда будет равен 1 для каждой итерации потока, и если я установлю его на FALSE, он начинается с 2 (я предполагаю, что этопотому что я использую счетчик в другом сэмплере в этом потоке - но даже после удаления этого счетчика это все еще происходит).

Я, очевидно, что-то делаю (или многие вещи) неправильно.

Если кто-то можетопределите мои ошибки, я был бы очень признателен за ваши мысли.Или даже указав на какой-то ресурс, который я могу прочитать для подхода, который я могу использовать для этого.Мои знания как javascript, так и jmeter невелики, поэтому я всегда открыт, чтобы узнать больше и исправить свои ошибки.

Наконец, большое спасибо за то, что прочитали эту стену текста и попытались разобраться в этом.

1 Ответ

0 голосов
/ 29 ноября 2018
  1. Трудно сказать, где именно ваша проблема, не видя значений этих someVar и payload, скорее всего, что-то не может быть проанализировано как действительный JSON, поэтому на 2-й итерации ваш последний JSR223 PostProcessorне работает до конца, и в результате ваше значение переменной payloadSubmit не обновляется.Посмотрите внимательнее на графический интерфейс JMeter, там есть желтый треугольник с восклицательным знаком, который указывает на количество ошибок в ваших скриптах.Также он открывает JMeter Log Viewer при нажатии

    enter image description here

    , если рядом с треугольником стоит красное число - очевидно, у вас естьпроблема, и вам нужно будет просмотреть файл jmeter.log для получения подробной информации.

  2. Начиная с JMeter 3.1 рекомендуется использовать язык Groovy для любой формы сценариев в основном из-за того, что Groovy имеет более высокую производительность по сравнению с другими вариантами сценариев .Ознакомьтесь с руководством по синтаксическому анализу и производству JSON , чтобы узнать больше о работе с данными JSON в Groovy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...