通过HTTP请求有条件地发送jmeter变量

通过HTTP请求有条件地发送jmeter变量,jmeter,Jmeter,我正在使用JMeter发送HTTP POST请求 我的请求主体是JSON,例如类似于{“Var1”:“${Var1}”,“Var2”:${Var2},“Var3”:“${Var3}”} 这些是在HTTP请求的参数中设置的,参数没有名称。这很好,我可以使用在beanshell预处理器中设置的变量发送请求(通过设置变量并使用vars.put()) 我的问题是如何通过预处理器部分以编程方式发送参数?例如: if(a){ send parameters `{"Var1": "${Var1}","Var2

我正在使用JMeter发送HTTP POST请求

我的请求主体是JSON,例如类似于
{“Var1”:“${Var1}”,“Var2”:${Var2},“Var3”:“${Var3}”}

这些是在HTTP请求的参数中设置的,参数没有名称。这很好,我可以使用在beanshell预处理器中设置的变量发送请求(通过设置变量并使用vars.put())

我的问题是如何通过预处理器部分以编程方式发送参数?例如:

if(a){
send parameters `{"Var1": "${Var1}","Var2": ${Var2}` as my JSON
}
else {
send parameters `{"Var3":"${Var3}"}` as my JSON
}

vars.remove()对我不起作用,因为它从变量中删除了值,但仍然在请求中发送它(例如,
“${Var1}”
)。

用Beanshell采样器替换预处理器,该采样器将计算布尔值a,并将其作为变量:

vars.put("a", value)
然后使用2个s,每个s将包含一个具有不同参数的采样器


第一个条件将是${a},而对于be,它将是${a}的否定

只需使用“身体数据”选项卡即可。您可以有条件地创建JSON字符串,然后使用普通占位符“打印”正文数据中的变量。

实现所需操作的最简单和最快方法是使用JMeter if controller(添加->逻辑控制器->if controller)

将if控制器添加到正在处理的线程组中,并将返回布尔值的表达式放入条件(默认Javascript)。作为if控制器的子节点,放置要在if成功时触发的HTTP请求采样器

假设您希望在传递给JMeter的属性存在时发送请求:

${__P(media)}.length > 0
您可以添加另一个if控制器,该控制器的条件为您刚刚使用另一个HTTP请求采样器检查的内容的否定条件


完成。

但条件“a”取决于beanshell预处理器内部的逻辑。换句话说,我想做的是:如果(a.equals(“某物”),那么在HTTP POST中发送var1和var2,否则发送var3。所有3个VAR都已经作为键值对存在于JMeter HTTP请求的“发送参数和请求”区域中。。。