我在响应正文中有以下JSON格式
[
{
"Name" : "Prashant",
"City" : "Sydney"
},
{
"Name" : "Yogi",
"City" : "London"
}
]
检查此数组是否有任何记录的更好方法是什么?如果是,则为第一个数组索引提供“名称”。我正在为jMeter使用jp @ gc JSON提取器插件。
是否可以使用插件解析此问题,还是需要使用正则表达式进行解析?
答案 0 :(得分:8)
为JMeter 使用Ubik Load Pack JSON插件,这是JMeter自3.0版(捐赠的插件)的一部分,并且名为JSON Extractor,您可以这样做:
测试计划概述:
ULP_JSON PostProcessor:
如果是控制器:
以下是运行结果:
因此,您可以通过我们的解决方案看到它是可能的
答案 1 :(得分:6)
我不确定你的插件,但如果它支持JSON路径表达式,它应该是可能的。
试试这个表达式:$.[0].Name
。
这是我使用的插件:http://jmeter-plugins.org/wiki/JSONPathExtractor/并且给定的表达式可以使用它。
您可以在此处找到有关JSON路径表达式的更多信息:http://goessner.net/articles/JsonPath/index.html#e2。
答案 2 :(得分:5)
在JMeter中使用JSON并不容易,因为JMeter很久以前就是在JSON发明之前设计的。 然而,有一些扩展使生活更轻松:
答案 3 :(得分:3)
我们可以添加一个正则表达式提取器来从响应中获取值。
喜欢这个:
答案 4 :(得分:0)
如果可能,请始终使用Regular Expression Extractor
。尽量避免使用JSON / XPATH /其他提取器。它们看起来很容易使用。但是他们消耗更多的记忆和时间。它会影响测试计划的性能。
来源:http://www.testautomationguru.com/jmeter-response-data-extractors-comparison/
答案 5 :(得分:0)
Rest Get服务示例:
{
"ObjectIdentifiers": {
"internal": 1,
"External1": "221212-12121",
"External3": "",
"Name": "koh"
},
"PartyType": "naturalPerson",
"NaturalPerson": {
"idNo": "221212-12121",
"Title": "Mr",
"Name": "koh",
"FirstName": "",
我们在项目中对使用jmeter解析json响应有类似的要求。要求是验证json响应中的所有字段,并从外部数据源提供该字段的期望值。
在这种情况下,我发现JSR223 PostProcessor非常有用,因为我们能够以此实现Groovy脚本。它是Jmeter最新版本的默认插件
编辑:
下面是代码段:
//get the JSON response from prev sampler
String getResponse = prev.getResponseDataAsString();
//parse the response and convert to string
JSONParser parser = new JSONParser(JSONParser.MODE_JSON_SIMPLE);
String parResponse = parser.parse(getResponse);
String preResponse = parResponse.toString();
JsonObject NaturalPerson = JsonObject.readFrom(preResponse);
//replace all commas with a semi-colon
String csvResponse = preResponse.replaceAll(",", ";");
//log response to file
logFileName = "C:/apache-jmeter-5.1.1/Web_Service_Output.csv";
BufferedWriter outLog = new BufferedWriter(new FileWriter(logFileName, true));
outLog.write(csvResponse + "\n");
outLog.close();