摘要:在采样器上添加后置处理器--˃jp@gc-JSONPathExtractor在DebugSampler的结果中,我们可以看到prizeNameJson的价值是4元。3) 使用JMeter的BeanShell PostProcessor处理Json数据,将fastjson.jar复制到jmeterlib文件夹,然后重新启动JMeter,在Sampler上添加一个后处理器--˃BeanShell PostProcesser 1importcom.alibaba.fastjson.Json;2importcom.alibaba.fastjson.JSONArray;3importcom.alibaba.fastjson.JSONObject;45Stringjson=prev.getResponseDataAsString();6JSONObjectjso=JSON.parseObject;7JSONObjectdata=jso.getJSONObject;8JSONArray列表=data.getJSONArray;910vars.put;在DebugSampler的结果中,您可以看到prizeNameValue的价值为4元。总之,本文列出了从Json格式的返回值中提取数据的三种可用方法。正则表达式对于处理简单的Json格式数据非常快速和标准化。JsonPath插件可以创建可维护的脚本。根据Java语言的灵活性,可以进一步开发引入fastjson库的BeanShell。
1 {
2 : "code":"000000",
3 : "data":
4 : {
5 : : "pageCount":"1",
6 : : "prizeLists":
7 : : [
8 : : : {
9 : : : : "cellphoneNum":"134****0001",
10 : : : : "prizeId":"1000005",
11 : : : : "prizeName":"10元话费"
12 : : : },
13 : : : {
14 : : : : "cellphoneNum":"134****0001",
15 : : : : "prizeId":"1000007",
16 : : : : "prizeName":"4元话费"
17 : : : }
18 : : ],
19 : : "totalCount":"2"
20 : },
21 : "msg":"成功"
22 }
1)使用正则表达式提取prizeName的第二个值
在Sampler上面添加后置处理器-->正则表达式提取器
引用名称:其他地方引用提取值的变量名称,这里填写的是:prizeNameValue,具体的引用方式是${prizeNameValue}。
正则表达式:提取内容的正则表达式【()表示提取,对于你要提前的内容需要用小括号括起来】。
模板:用$$引用起来,如果在正则表达式中有多个提取表达式(多个括号括起来的部分),则可以是$1$,$2$(表示匹配第一个括号的内容还是第二个括号的内容)等等,表示解析到的第几个值给prizeNameValue,正则表达式的提取模式,值从1开始,值0对应的是整个匹配的表达式。
匹配数字(0代表随机):0代表随机,-1代表所有,其余正整数代表将在已提取的内容中第几个匹配的内容。这里需要提取的是第二个匹配的值。
缺省值:正则匹配失败时取的值。
可以在jmeter中添加Sampler -->Debug Sampler来看正则表达式的取值。
2)使用 JMeter 的插件JSONPath 来获取 JSON 数据中特定位置的数据
在Sampler上面添加后置处理器-->jp@gc - JSON Path Extractor,
在DebugSampler的结果中可以看到prizeNameJson的取值是4元话费。
3)使用JMeter的BeanShell Post Processor来处理Json数据
将fastjson.jar 拷贝到 jmeter lib 文件夹下后重启 jmeter
在Sampler上面添加后置处理器-->BeanShell PostProcessor
1 import com.alibaba.fastjson.JSON;
2 import com.alibaba.fastjson.JSONArray;
3 import com.alibaba.fastjson.JSONObject;
4
5 String json=prev.getResponseDataAsString();
6 JSONObject jso = JSON.parseObject(json);
7 JSONObject data = jso.getJSONObject("data");
8 JSONArray prizeLists = data.getJSONArray("prizeLists");
9
10 vars.put("prizeNameValue",prizeLists.getJSONObject(1).getString("prizeName"));
在DebugSampler的结果中可以看到prizeNameValue的取值是4元话费。
总结
本文列举出了三种可用的从 Json 格式的返回值中提取数据的方法。正则表达式对于简单的 Json 格式数据的处理非常快速标准化,JsonPath 插件可以创建能够被维护的脚本,引入fastjson库的BeanShell 依赖于 Java 语言的灵活性可以进行进一步的开发。大家可以根据自己的习惯和喜好选择任意一种进行数据的提取。