如何在Jmeter BeanShell中每次都循环一个HTTP请求并更新变量
我有2个HTTP请求:一个请求从api获取数据,另一个请求将数据发布
到api。
GET请求将多个用户带入JSON。POST请求要求
每个用户1个请求。因此,我需要:
根据用户数量循环几次相同的POST请求(已经通过使用while控制器来执行此操作,该控制器从JSON响应中检查用户数量)。
对于每个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。
回答:
这是解决方案..
将一个JSON提取器添加到get请求..使用match no -1来存储所有名字,如下所示。在此处输入图片说明
我正在提取所有名字,并使用单个
JSON提取器2 将其存储在JMeter变量中。向相同的get请求添加JSR223 Post
处理器
并将计数器值设置为1
vars.put(“counter”,”1”);
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.
- 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