我在jmeter中使用json路径提取器。但是,似乎每次提取器每次只能提取一个值。即名称: - 变量名,JSON路径: - $ .id
如果我需要拉出说id,从json命名并想要存储在两个不同的变量中,我可以使用单个json提取器。 就像是 名称: - id_value,name_value JSON路径: - $ .id,$ .name
json string
{"id":"blah id", "name":"blah name"}
非常直接使用两个提取器来获取两个值。但是,它可以在一个提取器中使用吗?
答案 0 :(得分:2)
如果您使用的是支持JSON Extractor的jmeter版本,则可以使用一个JSON Extractor后处理器提取多个值并将它们存储在多个变量中。
请注意,变量名,JSON路径表达式和默认值必须用分号分隔&#34 ;;"并且必须按照用户手册中的说明匹配彼此的数字(3个变量名称= 3个表达式和3个默认值)。
答案 1 :(得分:1)
对于JSON Path Extractor的当前版本1.2.0,它不受支持。
但是你可以使用Regular Expression Extractor完成它。
myVar
{"id":"(.+?)", "name":"(.+?)"}
$1$$2$
4.其他选项与Debug Sampler结合使用以获取JMeter变量名称
所以你可以参考:
${myVar_g1}
${myVar_g2}
答案 2 :(得分:1)
这是一个老问题,但我正在努力解决这个问题,这是我的解决方案。在这里问的情况下
{"id":"blah id", "name":"blah name"}
您可以使用JSON Extractor Post-processor解决它。根据我的经验,我无法使用两个后处理器。 这是用于获取id和名称的后处理器:
在JSON Path表达式中编写:
$.["id", "name"]
然后testVar2将具有该值(来自debug sampler):
testVar2_1={"name":"blah name","id":"blah id"}
testVar2_matchNr=1
但是,我无法使用JSON Extractor后处理器来执行json响应,如:
{"id":"blah id", "other" : {"name":"blah name"}}
在这种情况下,我不得不使用带有这样的脚本的BeanShell PostProcessor:
import net.minidev.json.parser.JSONParser;
import net.minidev.json.JSONObject;
import net.minidev.json.JSONArray;
JSONParser p = new JSONParser(JSONParser.MODE_PERMISSIVE);
String jsonString = prev.getResponseDataAsString();
JSONObject jsonObj = (JSONObject) p.parse(jsonString);
String idString = (String) jsonObj.get("id");
JSONObject otherJSONObject = jsonObj.get("other");
String nameString = (String) otherJSONObject.get("name");
log.info("ID:" + idString);
log.info("NAME:" + nameString);
vars.put("IDVAR", idString);
vars.put("NAMEVAR", nameString);