无法通过jmeter post call的动态响应来获取呼叫

时间:2016-10-17 20:34:55

标签: json regex post jmeter dynamic-variables

是JMeter的新手。我用不同的数据集点击多个“post”调用。每个帖子调用都会产生唯一ID作为响应。我想再次以5分钟的间隔将每个唯一ID传递给“get”。我用正则表达式提取器提取了唯一的id。问题是,我只能将最后一个唯一ID传递给“get”调用而不是每个唯一ID。有没有办法可以创建动态正则表达式和下游值以供进一步使用?enter image description here

2 个答案:

答案 0 :(得分:0)

您可以通过多种方式解决此问题。举几个名字:

  1. 将每个不同的POST响应ID捕获为唯一变量,然后可以在将来的GET调用中使用它们,每个请求使用一个唯一ID。 示例:ID1,ID2,ID3等......
  2. 为每个POST / GET方案创建单独的线程组。 JMeter变量只对线程组是本地的,因此它们将彼此隔离。如果需要的话,这也可以同时运行它们。
  3. 使用变量(排序计数)在每个POST上递增,并将其附加到公共变量名称。 示例:ID $ {count}。您必须添加Beanshell预处理器以增加每个HTTP请求采样器中的计数变量。
  4. int count = Integer.parseInt(vars.get("count")); count = count + 1; vars.put("count", count.toString());

    然后,您可以进行迭代,直到在发出GET请求时达到While控制器中的count值,或者您可以减少计数。如果满足While语句中的条件,则两者都将提供相同的功能。另外,你可以使用一个带有count作为迭代次数的循环控制器,并且只需要另一个在循环生命周期内递增的计数。

答案 1 :(得分:0)

可能最简单的方法是使用增量后缀,如:

  1. 添加__counter()函数作为"参考名称"的后缀。像

    counter postfix

  2. 每次调用正则表达式提取器时,都会创建一个新的batchid_N变量,其中N是__counter()函数生成的递增数字

    Variables originated from counter

  3. 您可以根据需要将这些变量值作为${batchid_1}${batchid_2}等进行访问。还可以通过__V()函数使用另一个JMeter函数或变量作为后缀值,如:

    • ${__V(batchid_${yourVar})} - 结合" batchid _"带有${yourVar}变量的前缀

    • ${__V(batchid_${__counter(,)})} - 结合" batchid _"带有__counter()函数的前缀

  4. 有关上述和其他JMeter功能的更多信息,请参阅How to Use JMeter Functions文章系列。