Я пытаюсь адаптировать скрипт, который я уже должен запустить, используя ввод данных .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 невелики, поэтому я всегда открыт, чтобы узнать больше и исправить свои ошибки.
Наконец, большое спасибо за то, что прочитали эту стену текста и попытались разобраться в этом.