我在Jmeter中运行脚本并尝试从返回的json中提取数据,但我收到了WARN建议;但是,使用Sampler我可以看到变量的内容,但是当我在HTTP请求Post或IF控制器中使用时,变量是空的。
这是我的json(包括格式): {"职位":" 2 8 9","长度":13}
这是JSON Patch提取器: 目标变量名称:passwordPositions JSONPath表达式:$。[' position']
这是我收到的警告:
2018/02/08 12:05:11 WARN - com.atlantbh.jmeter.plugins.jsonutils.jsonpathextractor.JSONPathExtractor:提取失败的com.jayway.jsonpath.PathNotFoundException:期望找到一个具有属性的对象[&#39 ;位置']在路径$中但找到' java.lang.String'。根据JsonProvider,这不是json对象:' com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'。 在com.jayway.jsonpath.internal.path.PropertyPathToken.evaluate(PropertyPathToken.java:71) 在com.jayway.jsonpath.internal.path.RootPathToken.evaluate(RootPathToken.java:62) 在com.jayway.jsonpath.internal.path.CompiledPath.evaluate(CompiledPath.java:53) 在com.jayway.jsonpath.internal.path.CompiledPath.evaluate(CompiledPath.java:61) 在com.jayway.jsonpath.JsonPath.read(JsonPath.java:187) 在com.jayway.jsonpath.internal.JsonContext.read(JsonContext.java:102) 在com.jayway.jsonpath.internal.JsonContext.read(JsonContext.java:85) 在com.jayway.jsonpath.JsonPath.read(JsonPath.java:502) 在com.atlantbh.jmeter.plugins.jsonutils.jsonpathextractor.JSONPathExtractor.process(JSONPathExtractor.java:102) 在org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:750) 在org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:452) 在org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:261) 在java.lang.Thread.run(Thread.java:745)
然后使用采样器,我看到变量的内容: enter image description here
但是当我在POST请求中将变量用作json时,json的内容为:
POST数据: { "职位":"", "价值观":" 1 1 5" }
这是我的json测试的定义: { "职位":" $ {passwordPositions}", "价值观":" 1 1 5" }
我做错了什么?我在互联网上查了几个例子,我找不到问题所在?
谢谢,
答案 0 :(得分:0)
根据JSON Path Examples,您应该使用$.positions
。
演示
另请注意,从JMeter 3.0版开始,您拥有JSON Extractor内置组件,因此您不必使用任何插件,如果需要,请参阅API Testing With JMeter and the JSON Extractor文章了解更多信息
答案 1 :(得分:0)
我设法解决了这个问题。我使用了正则表达式提取器而不是Json提取器。我不确定是什么原因,我看到使用邮递员,也许回应不是真的'真实的' json,好像是xml / html;所以使用正则表达式提取器,我可以提取数据。 我对提取器的配置是:
参考名称:passwordPositions
正则表达式:"职位":"(。+?)"
模板:$ 1 $
比赛编号:-1