在JMeter中为同一请求的每次出现更新参数值
我正在准备作为HTTP请求的一部分发送的数据, 因此,数据准备部分是在BeanShell预处理器中完成的 随着请求大小的变化,我需要传递一个可变长度的JSON。 我正在for循环中创建JSON主体,但参数没有改变,例如:在JMeter中为同一请求的每次出现更新参数值,jmeter,blazemeter,Jmeter,Blazemeter,我正在准备作为HTTP请求的一部分发送的数据, 因此,数据准备部分是在BeanShell预处理器中完成的 随着请求大小的变化,我需要传递一个可变长度的JSON。 我正在for循环中创建JSON主体,但参数没有改变,例如: try{ int[] po = {20, 30, 40, 50, 75}; int rNum = getRandom(0,4); String name="${name}"; String _class="${_class}"; Str
try{
int[] po = {20, 30, 40, 50, 75};
int rNum = getRandom(0,4);
String name="${name}";
String _class="${_class}";
StringBuilder msgBody = new StringBuilder();
msgBody.append("{\"name\":\"")
.append(name)
.append("\", \"class\":\"")
.append(_class)
.append("\", \"marks\":[");
for (int i=0;i<po\"[rNum];i++)
{
msgBody.append("{ \"subject\":\"${__P(marks${line_offset})}\"," },");
}
int length=msgBody.length()-1;
log.info(String.valueOf(length));
msgBody.setLength(length);
msgBody.append("] }");
vars.put("json",msgBody.toString());
}
试试看{
int[]po={20,30,40,50,75};
int rNum=getRandom(0,4);
String name=“${name}”;
字符串_class=“${u class}”;
StringBuilder msgBody=新的StringBuilder();
msgBody.append(“{\”名称\“:\”)
.append(名称)
.append(“\”,“class\:\”)
.append(_类)
.附加(“\”,“\”标记“:[”);
对于(int i=0;i在scrips中使用props
代替函数,使用vars
代替变量
props.get("marks" + vars.get("line_offset"));
为什么您希望它会更改?JMeter属性对于整个JVM是全局的,并且在所有线程之间共享。因此${uu p(marks${line\u offset}}}
将始终具有相同的值,除非您在其他地方设置它。根据:
属性与变量不同。变量是线程的局部变量;属性是所有线程的公共属性
还有几件事需要检查/修复:
通常,脚本在当前状态下无法工作,因为它充满了错误,例如:
int[] po\" = {20, 30, 40, 50, 75}; // won't compile due to \"
String class="${class}"; // won't compile as "class" is a reserved keyword
etc.
下次遇到问题时,请提供准确的代码
用于脚本编写,主要是因为。特别是在您的情况下,使用和/或
根据文档-可能是问题的主要原因:
JMeter在将脚本字段传递给解释器之前处理函数和变量引用,因此引用只解析一次。脚本文件中的变量和函数引用将逐字传递给解释器,这可能会导致语法错误。要使用运行时变量,请使用他使用适当的道具和方法,例如
props.get(“START.HMS”);
props.put(“PROP1”、“1234”);