1. 程式人生 > >jmeter ---json幾種讀取方式,ArrayList循環讀取

jmeter ---json幾種讀取方式,ArrayList循環讀取

導入 一起 .com json數據格式 jmeter ips pos processor 直接

  在之前寫過提取json數據格式的文章,這次對jmeter讀取json數據格式進行整理。

  舉例一個接口的response 格式如下:

{
   "data" : {
      "device_vec" : [
         {
            "agent_version" : "9.7.0.2225",
            "android_id" : "e3d699cf01620531",
            "asset_number" : "",
            "description" : "89vUwdwfVydEjqNAANxM11c72ujdmn",
            
"device_name" : "357568061882002", "email" : "[email protected]", "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" : "[email protected]", "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個組作為模板($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 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();}
                  return "";
            }else if (value instanceof LinkedHashMap){
                    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 讀取方式循環讀

如下:

技術分享

總結

本文列舉出了三種可用的從Json格式的返回值中提取數據的方法,正則表達式對於簡單的Json格式的數據的快速標準化非常占優勢。而JsonPath插件可以用於創建能夠被維護修改的腳本,但是需要額外的插件安裝工作。而最後的帶JSON庫的BeanShell確實非常詳細並且依賴於Java語言的靈活性可以進行進一步的開發。

jmeter ---json幾種讀取方式,ArrayList循環讀取