Dav*_*vid 6 arrays json path count jmeter
在JMeter中,我想检查从服务器收到的JSON数组中的对象数.
例如,在某个请求中,我期望一个包含5个对象的数组.
[{...},{...},{...},{...},{...}]
看完之后:用jsonpath计算成员?,我尝试使用以下JSON路径断言:
但是,这似乎不能正常工作.当我确实在数组中接收到5个对象时,响应断言表明它不匹配.
我究竟做错了什么?或者我怎么能这样做?
Dmi*_*i T 10
虽然JSONPath Extractor不提供hasSize功能,但仍然可以完成.
给出PMD UBIK-INGENIERIE答案中的示例JSON,您可以book至少以两种方式获取阵列上的匹配数:
1.容易(但脆弱)的方式 - 使用正则表达式提取器.
如您所见,有4个条目用于category:
{ "category": "reference",
{ \"category\": \"fiction\"
...
Run Code Online (Sandbox Code Playgroud)
如果添加如下配置的正则表达式提取器:

它将捕获所有category条目并返回匹配号码如下:

因此,您可以${matches_matchNr}在需要的地方使用此变量.
这种方法简单易行,但很容易受到响应格式的任何变化的影响.如果您预计JSON数据可能在可预见的未来发生变化,请继续下一个选项.
2.更难(但更稳定)的方式 - 从Beanshell PostProcessor调用JsonPath方法
JMeter具有Beanshell脚本扩展机制,可以访问范围内的所有变量/属性以及对底层JMeter和第三方依赖API的访问.在这种情况下,您可以直接从Beanshell PostProcessor 调用JsonPath库(位于JsonPath Extractor的引擎盖下).
import com.jayway.jsonpath.Criteria;
import com.jayway.jsonpath.Filter;
import com.jayway.jsonpath.JsonPath;
Object json = new String(data);
List categories = new ArrayList();
categories.add("fiction");
categories.add("reference");
Filter filter = Filter.filter(Criteria.where("category").in(categories));
List books = JsonPath.read(json, "$.store.book[?]", new Filter[] {filter});
vars.put("JSON_ARRAY_SIZE", String.valueOf(books.size()));
Run Code Online (Sandbox Code Playgroud)
上面的代码评估$.store.book[?]针对父采样器响应的JSONPath表达式,计数匹配数字并将其存储到${JSON_ARRAY_SIZE}JMeter变量中

以后可以在If子句或断言中重用.
参考文献:
| 归档时间: |
|
| 查看次数: |
16561 次 |
| 最近记录: |