【问题标题】:Conditionally sending jmeter variables with HTTP request有条件地发送带有 HTTP 请求的 jmeter 变量
【发布时间】:2012-12-18 19:12:38
【问题描述】:

我正在使用 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}")。

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    将预处理器替换为 Beanshell 采样器,它将计算布尔值 a 并将其作为 var:

    vars.put("a", value)
    

    然后使用 2 个If Controllers,其中每个将包含一个具有不同参数的采样器。

    第一个条件将是 ${a} 并且它将是 ${a} 的否定。

    【讨论】:

    • 但条件“a”取决于 beanshell 预处理器内部的逻辑。换句话说,我想做: if(a.equals("Something") then send var1 and var2 in HTTP POST, else send var3. 所有 3 vars 已经作为键值对存在于“使用请求发送参数”中JMeter HTTP 请求区域...
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      实现您想要做的最简单和最快的方法是使用 JMeter if controller (Add -> Logic controller -> If controller)。

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

      假设您要发送一个请求,如果您传递给 JMeter 的属性存在:

      ${__P(media)}.length > 0
      

      您为刚刚使用另一个 HTTP 请求采样器检查的内容添加另一个带有否定条件的 if 控制器。

      你已经完成了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-30
        相关资源
        最近更新 更多