在JMeter中,我想检查从服务器接收到的JSON数组中的对象数。
例如,在一个特定的请求中,我期望一个包含5个对象的数组。
[{...},{...},{...},{...},{...}]
读完这个:使用jsonpath?计数成员后,我尝试使用以下JSON路径断言:
然而,这似乎没有正常工作。当我真的在数组中收到5个对象时,响应断言说它不匹配。
我做错了什么?或者我还能怎么做?
对于您正在使用的插件(JMeter插件),这是不可能的。
但是,自从JMeter 3.0以来,这个插件已经由UbikLoadPack捐赠,可以用JSON提取器来完成(http://jmeter.apache.org/changes_history.html)
例子:
假设这个JSON包含一系列书籍:
{ "store": {"book": [
{ "category": "reference","author": "Nigel Rees","title": "Sayings of the Century","price": 8.95},
{ "category": "fiction","author": "Evelyn Waugh","title": "Sword of Honour","price": 12.99},
{ "category": "fiction","author": "Herman Melville","title": "Moby Dick","isbn": "0-553-21311-3","price": 8.99},
{ "category": "fiction","author": "J. R. R. Tolkien","title": "The Lord of the Rings","isbn": "0-395-19395-8","price": 22.99}
],
"bicycle": {"color": "red","price": 19.95}} }
要做到这一点:
1/添加JSON提取器:
然后,您可以通过以下方式访问该计数:
${bookTitle_matchNr}
运行此测试计划将显示以下内容:
如您所见,Debug Sampler-${bookTitle_matchNr}显示了Debug Sampler-4
虽然JSONPath提取器不提供hasSize
功能,但它仍然可以完成。
根据PMD UBIK-INGENIERIE给出的答案中的JSON示例,您可以通过至少两种方式在book
数组中获取匹配数:
1.最简单(但脆弱)的方法——使用正则html" target="_blank">表达式提取器。
如您所见,category
有4个条目,如:
{ "category": "reference",
{ \"category\": \"fiction\"
...
如果添加正则表达式提取器,其配置如下:
它将捕获所有类别
条目并返回匹配编号如下:
因此,您将能够在任何需要的地方使用这个${matches_matchNr}
变量。
这种方法很简单,也很容易实现,但是它很容易受到响应格式的任何更改的影响。如果您预计JSON数据在可预见的未来可能会发生变化,请继续使用下一个选项。
2.更难(但更稳定)的方法——从Beanshell后处理器调用JsonPath方法
JMeter有一个Beanshell脚本扩展机制,可以访问范围内的所有变量/属性,以及底层JMeter和第三方依赖API。在这种情况下,您可以直接从Beanshell后处理器调用JsonPath库(位于JsonPath提取器的引擎盖下)。
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()));
上面的代码根据父采样器响应计算$.store.book [?]
的JSONPath表达式,计数匹配的数字并将其存储到${JSON_ARRAY_SIZE}
JMeter变量中
以后可以在if子句或断言中重用。
参考资料:
是否可以使用JsonPath计算成员数? 使用spring mvc测试,我正在测试一个生成 具有 我想确保生成的json中没有其他成员。希望通过使用jsonPath计算它们。可能吗?也欢迎其他解决方案。
问题内容: 这是我的JSON: 如何计算其中的对象数量? 问题答案: 那是一个数组。 您可以解析它(),然后使用该属性。
我使用jayway JsonPath库使用给定的路径解析JSON。如果我给出正确的路径,我就能得到字符串值。但是,如果路径是数组,我想在给出路径时得到贴图列表。例如,我有一个JSON,如下所示: 下面是我用来解析json的代码。 如果我给出路径,我正在获取字符串,但我需要地图列表。下面是我使用jsonpath解析Json的代码。 任何人建议适当的方法来得到我所期望的。
我正在寻找为json对象中的所有字段打印jsonpath的Java API。需求的第一部分是,对于给定的json对象(或字符串)- 它应该以key-value的方式打印所有属性,其中key是字段的jsonpath。 输出应该如下所示- 等等。这将用于匹配来自另一个json对象的值(我的第二个需求)。 我找到了一个APIhttps://github.com/json-path/JsonPath,它有
我试图从json文件中获取一个对象数组,但遇到了一个问题。 我应该使用什么路径来获取项目中的所有项目(item0、item1、item2…)? 你能给我一个怎么做的建议吗。 Json 示例 从items对象中过滤item的最佳方法,但我不知道如何使用json路径。
问题内容: 我有一个简单的应用程序,它需要遍历一个大型数组(包含约2万个项目),并且在每个数组中,我解析一个子数组。每个项目如下所示: 我正在遍历每个项目。我要做的是首先读取长度,然后简单地遍历整个数组。但这非常慢(例如每秒1个项目)。 有没有优化的方法? 问题答案: 得到它了。多亏了Erwin,我可以一次将整个JSON解析成一个简单的样子: 然后我们可以简单地调用以访问循环中的特定项目: