Jmeter提取响应结果中的json数据
在之前寫過提取json數據格式的文章,這次對jmeter讀取json數據格式進行整理。
舉例一個接口的response 格式如下:
{"data" : {"device_vec" : [{"agent_version" : "9.7.0.2225","android_id" : "e3d699cf01620531","asset_number" : "","description" : "89vUwdwfVydEjqNAANxM11c72ujdmn","device_name" : "357568061882002","email" : "1504487508089@tt.com","encryption_log_count" : 0,"encryption_version" : "","engine_version" : "9.715-1024","firewall_log_count" : 0,"firewall_version" : "","group_id" : "aa000000-0000-0000-0000-000000000000","group_name" : "Default","id" : "35756806-1882-0020-0000-000000000000","imei" : "357568061882002","inactive_reason" : 0,"install_time" : 1503642124,"last_connected_time" : 1504742375,"last_scan_time" : 1503642674,"meid" : "","noncomp_reason" : "","os_version" : "4.3","pattern_version" : "2.437.00","phone_number" : "","platform_type" : 512,"policy_id" : 32,"policy_name" : "","security_status" : 3,"status" : 3,"user_name" : "test1504487508089","virus_log_count" : 26,"wtp_log_count" : 0},{"agent_version" : "2.0.0.1518","android_id" : "","asset_number" : "","description" : "3dLAbTlj7UQoOiodnAjDrfX1iI0PCx","device_name" : "Michael’s iPhone","email" : "1504487508089@tt.com","encryption_log_count" : 0,"encryption_version" : "","engine_version" : "","firewall_log_count" : 0,"firewall_version" : "","group_id" : "aa000000-0000-0000-0000-000000000000","group_name" : "Default","id" : "6954500b4f14e50bd20634481ee2c6d9f17b4ee3","imei" : "35 445006 267069 9","inactive_reason" : 0,"install_time" : 1503641446,"last_connected_time" : 1503652862,"last_scan_time" : 1503641477,"meid" : "35445006267069","noncomp_reason" : "","os_version" : "10.3.2","pattern_version" : "","phone_number" : "","platform_type" : 1024,"policy_id" : 6,"policy_name" : "","security_status" : 1,"status" : 3,"user_name" : "test1504487508089","virus_log_count" : 0,"wtp_log_count" : 0}],"total_count" : 2},"error_code" : 1,"message" : "Success","timestamp" : 1504765848 }?
下面就對device_vec取角標2的agent_version 參數進行提取。
?
方法一:Jmter Json插件,JSON Path Extractor 提取器。
處理Json數據的方法是使用JMeter的插件,該插件可以使用JSONPath來獲取JSON數據中特定位置的數據。類似于XML文件中的XPath,JSONPath可以使用簡單的表達式來操作Json對象。JSON Path Extractor是一個開源的增加了post處理器的插件,可以將該插件的Lib文件拷貝到JMeter的lib目錄下或者通過Jmeter UI界面的Options-->Plugins Manager下載json插件即可。
可以使用如下的JSONPath進行描述:
$.data.device_vec[1].agent_version在JMeter中,只需要從PostProcessor菜單中打開JSON Path Extractor然后輸入變量名與默認值即可,如下所示:
JSONPath表達式較短并且易于閱讀,能夠有效提高測試腳本的易維護性,該插件并不隨著標準的JMeter一起安裝。
?
方法二:Jmter 正則表達式插件,正則表達式提取
JMeter安裝了正則表達式插件之后,可以按照固定的格式從字符串中提取數據,而本例中正則表達式如下所示:
"agent_version":"(.+?)"使用了該表達式之后會返回所有服從表達式的字符串,但是只有一個表達式是我們所關注的??梢允褂?個組作為模板($1$),而2則會返回第二個數據。
?
?
?方法三:Jmter BeanShell提取器,?BeanShell提取器
借用了JMeter的對于BeanShell支持的特性,BeanShell是一個輕量級的面向Java的腳本語言。BeanShell Post Processor允許使用標準的Java語法來處理Json數據,使用方法如下圖所示:
?? 1.寫一個jsonpath讀取代碼如下:
?
import java.util.LinkedHashMap;import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.Predicate;import net.minidev.json.JSONArray;public class GetJson {public static String readjson(String json, String jsonPath){try{Object value = JsonPath.read(json, jsonPath, new Predicate[0]);if (value instanceof Integer){return value.toString();}else if (value instanceof String){return value.toString();}else if (value instanceof Boolean){return value.toString();}else if (value instanceof JSONArray){JSONArray arr = (JSONArray)value;if(!arr.isEmpty()){return arr.toJSONString();}elsereturn "";}else if (value instanceof LinkedHashMap){return value.toString();}else if (value instanceof Float) {return value.toString();}else{return value.toString();}}catch(Exception e){return "pathnotfound";}} }?
?
?
然后使用此方法來讀取json數據格式
?
2.導入com.eclipsesource.json 方法直接讀取json
com.eclipsesource.json,源碼下載路徑如下 https://github.com/ralfstx/minimal-json,只需將源碼打成jar包放到jmeter的lib/ext目錄下即可
com.eclipsesource.json 適用方法:http://static.javadoc.io/com.eclipsesource.minimal-json/minimal-json/0.9.3/com/eclipsesource/json/JsonObject.html
?
3.如果是循環讀取,那就要算出List的長度做循環---用jsonpath讀取方式去循環取(前面的jsonpath方法不再貼)
?
4.如果是循環讀取,那就要算出List的長度做循環---用com.eclipsesource.json?api 讀取方式循環讀
如下:
?
?
轉載于:https://www.cnblogs.com/peak911/p/10550831.html
總結
以上是生活随笔為你收集整理的Jmeter提取响应结果中的json数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 号和管道符号(|)在不同场景下的使用方法
- 下一篇: gulp es5语法转换及js/css/