如何在Jmeter BeanShell中每次都循环一个HTTP请求并更新变量

我有2个HTTP请求:一个请求从api获取数据,另一个请求将数据发布

到api。

GET请求将多个用户带入JSON。POST请求要求

每个用户1个请求。因此,我需要:

  1. 根据用户数量循环几次相同的POST请求(已经通过使用while控制器来执行此操作,该控制器从JSON响应中检查用户数量)。

  2. 对于每个POST请求,我都需要根据JSON响应中用户的信息来更新该请求中使用的变量。

我正在尝试的方法是在POST请求中使用BeanShell PreProcessor,但是我遇到了麻烦。

假设在POST的请求正文中一个变量称为$ {name}。我正在使用JSON Extractor PostProcessor(在GET请求上)路径:

“ Travelers [0] .FirstName”,它返回第一个用户的名字,但是我需要将第二个用户的名字(Travelers 1 .FirstName)分配

给发送POST请求之前使用相同的变量$ {name},以此类推,每个用户都这样。

  • 我想做一个这样的for循环:
    for (int i = 0; i <= numberOfTravelers; i++) {

    vars.put(“Name”, Travelers[i].FirstName)

    }

问题是我不知道如何从

另一个先前请求的JSON响应中调用JSON路径。有没有一种方法可以将jsonpath引用到

特定的JSON响应,或者将整个JSON响应保存在变量中

,然后在该变量中找到特定的值作为JSON路径。

我已经使用JSON提取器尝试过此操作,但是问题是,如果我使用

路径:Travellers [*]。FirstName,它实际上会获取JSON上的所有名称,

但是变量$ {name}仅存储一个名称,而不存储所有这些都作为一个数组

,以后可以使用普通变量$ {name [i]}在for循环中访问。这

就是为什么我需要从BeanSheall访问JSON路径的原因。

这是JSON响应的示例:

{

"Travelers":

[

{

"FirstName":"VICTOR",

"Surname":"ORREGO",

"Key":"1.1",

"PassengerRPH":1,

"TypeCode":"ADT"

},

{

"FirstName":"JULIO",

"Surname":"OZAETA",

"Key":"2.2",

"PassengerRPH":2,

"TypeCode":"ADT"

}

]

}

这是 我正在使用的GET请求中的PostProcesor JSON提取器 。它当前正在将从JSON响应(Victor)获得的名字分配给变量$ {Name},我需要在POST请求的下一次迭代中,变量$ {Name}返回该路径中的名字,这是Julio。

回答:

这是解决方案..

  1. 将一个JSON提取器添加到get请求..使用match no -1来存储所有名字,如下所示。在此处输入图片说明

    我正在提取所有名字,并使用单个

    JSON提取器2 将其存储在JMeter变量中。向相同的get请求添加JSR223 Post

    处理器

    并将计数器值设置为1

    vars.put(“counter”,”1”);

  2. Add a while loop to the test plan and add the following condition to the while loop.

${__javaScript(parseInt(${counter})<=parseInt(vars.get(“FirstName_matchNr”)),)}

4.在发布请求中添加一个JSR223 预处理器并添加以下代码

vars.put("name",vars.get("FirstName_"+vars.get("counter")));

This will store FirstName_Matchno’s value in name variable.

  1. Add a JSR223 Post Processor to the POST Request and increment the counter.

int counter = Integer.parseInt(vars.get(“counter”)) +1;

vars.put(“counter”,Integer.toString(counter));

您可以在结果中看到它在每次循环迭代中都使用了不同的名称

让我知道是否有帮助。

以上是 如何在Jmeter BeanShell中每次都循环一个HTTP请求并更新变量 的全部内容, 来源链接: utcz.com/qa/426096.html

回到顶部