我正在使用Jmeter进行性能测试并坚持以下几点:我从Webapi获得JSON响应,如下所示:
PersonInfoList:
Person
[0]
{
id: 1
name: Steve
}
[1]
Person
{
id: 2
name: Mark
}
Run Code Online (Sandbox Code Playgroud)
我需要根据这个JSON数组的计数得到id并创建一个逗号分隔的字符串as("Expected value" = 1,2)
我知道如何使用JSON Post处理器或Regex处理器读取特定元素,但无法循环遍历数组并按照说明创建字符串,以便我可以在下一个采样器请求中使用此值.
请帮我解决这个问题:我正在使用Jmeter 3.0,如果可以在不使用外部第三方库的情况下实现这一点,那就太棒了.很抱歉上面的JSON语法
实际上JSON Path PostProcessor附带了类似的功能,它出现在JMeter 3.0中.为了获得单个变量中的所有值,请按如下方式配置JSON Path PostProcessor:
id$..id或者用于提取ID的任何内容因此,您将获得id_ALL包含所有JSON Path表达式匹配项的变量(以逗号分隔)
更普遍的答案,适用于任何其他提取器类型,实际上将允许连接任何任意JMeter变量使用脚本(除非你需要这个"期望值和括号")
为了将名称以"id"开头的所有变量连接成单个字符串,在JSON Path PostProcessor之后的某处添加Beanshell PostProcessor并将以下代码放入"Script"区域
StringBuilder result = new StringBuilder();
result.append("(\"Expected value\" = ");
Iterator iterator = vars.getIterator();
while (iterator.hasNext()) {
Map.Entry e = (Map.Entry) iterator.next();
if (e.getKey().matches("id_(\\d+)")) {
result.append(e.getValue());
result.append(",");
}
}
result.append(")");
vars.put("expected_value", result.toString());
Run Code Online (Sandbox Code Playgroud)
上面的代码会将结果字符串存储到${expected value}JMeter变量中.有关使用脚本并使用Beanshell测试元素中的JMeter和Java API绕过JMeter限制的更多信息,请参见如何使用BeanShell:JMeter最喜欢的内置组件文章.
演示:
| 归档时间: |
|
| 查看次数: |
4992 次 |
| 最近记录: |