Почему замена аргумента POST в препроцессоре JSR223 оставляет его удаленным на последующих итерациях? - PullRequest
0 голосов
/ 14 мая 2018

Я изменяю пару значений запроса POST, используя препроцессор JSR223 со следующим кодом:

import org.apache.jmeter.config.Argument;  
import org.apache.jmeter.config.Arguments;

def length = 10 // the size of the random string
def pool = ['a'..'z', 'A'..'Z', 0..9, '-'].flatten() // generating pool
Random random = new Random(System.currentTimeMillis())

def randomChars = (0..9).collect { pool[random.nextInt(pool.size())] }
def randomString = randomChars.join()


Arguments arguments = sampler.getArguments();
for (int i=0;i<arguments.getArgumentCount();i++)
{
  Argument argument = arguments.getArgument(i);
  String name = argument.getName();
  String value = argument.getValue();
  if(name =="mainForm:firstName"){
    sampler.getArguments().removeArgument("mainForm:firstName");        
    sampler.addArgument("mainForm:firstName",randomString); 
    log.info("Name is " + randomString);
}


if(name =="mainForm:covers:0:sumInsured"){
      sampler.getArguments().removeArgument("mainForm:covers:0:sumInsured");
    value = value.replace("\$","");
    value = value.replace(",", "");
    def val = Double.parseDouble(value);
    val++;
                sampler.addArgument("mainForm:covers:0:sumInsured","\$"+String.valueOf(val)); 
    }
}

Я вижу выходные данные журнала для первой итерации, но нет ничего для последующих, предлагающих аргументыпо какой-то причине больше не найдены.

У меня есть этот PreProcessor, присоединенный к HTTP-запросу, который он модифицирует.

Есть идеи, почему он запускается только один раз?

Я заметил висточник для Аргументов, который он упоминает, - RunVersion () - что это делает?

    public  void addArgument(Argument arg) {
    TestElementProperty newArg = new TestElementProperty(arg.getName(), arg);
    if (isRunningVersion()) {
        this.setTemporary(newArg);
    }
    getArguments().addItem(newArg);
}

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Спасибо, Дмитрий, Оказывается, что самым простым решением было изменить аргумент на месте, а не пытаться заменить его:

argument.setValue(randomString);
0 голосов
/ 14 мая 2018

Попробуйте использовать HTTPArgument вместо общего Аргумента, например:

sampler.addArgument(new HTTPArgument("mainForm:firstName",randomString));

Также проверьте jmeter.log файл на наличие подозрительных записей и проверьте, что отправляется через Просмотреть дерево результатов listener.

Также имейте в виду, что вы можете реализовать свое требование вообще без использования сценариев, ознакомьтесь со следующими функциями JMeter :

...