返回的结果,提取token

{
    "code": 0,
    "msg": "login success!",
    "token": "234af73571da46ade79ea6a74961b1d23d609b79",
    "username": "test"
}

方法一:json提取器,此提取器用于提取请求返回结果中的某个值或者某一组值,用法比正则表达式要简单,标准写法为$.key,其中key为返回结果map中的一个键,如果是多层则继续用.key.key (或 ..key)进行即可,如果遇到key的value值为一个List,则使用.key[n],其中n为list中元素的编号

    

 

    JSON提取器参数说明:

  • Names of created variables 参数名称
  • JSON Path expressions 提取表达式
  • Match No.(0 for Random) 匹配规则,-1所有,0随机,1第一个
  • Compute concatenation va 如果有匹配到多个值,选择此项,会将全部值保存到_ALL,并使用逗号分割每个值,注意Match No. (0 for Random)需要为-1才有效,不然只能匹配到一个值了
  • Default Values 没提取到就给默认值

     jsont 提取器详解可参考文章:http://www.51testing.com/html/18/n-4461218.html

 

方法二:正则表达式提取,添加后置处理器-正则提取器

     

    正则提取器参数说明:

    • 要检查的响应字段:样本数据源,默认选主体。

    • 引用名称:其他地方引用时的变量名称(re_token),可自定义设置,引用方法:${引用名称}

    • 正则表达式:数据提取器,()括号里为你要获取的的值,如:"token": "(.*?)"

    • 模板:$$对应正则表达式提取器类型。-1全部,0 随机,1第一个2第二个,以此类推,若只有一个正则一般就填写$1$

    • 匹配数字:正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。
      -1表示全部,0随机,1第一个,2第二个,以此类推。若只要获取到匹配的第一个值,则填写1

    • 缺省值:匹配失败时的默认值,可以随便写个,不写也可以,或者勾选失败时候使用空值

 

    原文地址:https://www.cnblogs.com/yoyoketang/p/11961988.html

 

方法三BeanShell PostProcessor,jmeter中添加后置处理器BeanShell PostProcessor 

 需求:提取sample返回json数据中所有name字段值,返回的json格式如下: 

         {“body”:{“apps”:[{“name”:”111”},{“name”:”222”}]}} 

    import org.json.*; #需先将json.jar包放到jmeter的lib目录下

#import org.json.JSONObject;   #单独导入
#import org.json.JSONArray String response_data = prev.getResponseDataAsString(); #获取的string格式response转换为json对象,进行后续处理 JSONObject data_obj = new JSONObject(response_data); #转换为json对象(dict) String apps_str = data_obj.get("body").get("apps").toString(); #是string形式变量 须要toString转换
log.info(response_data) #可以在log输出返回值 JSONArray apps_array =
new JSONArray(apps_str); String[] result = new String[apps_array.length()]; for(int i=0;i<apps_array.length();i++){ JSONObject app_obj = new JSONObject(apps_array.get(i).toString()); String name = app_obj.get("name").toString(); result[i] = name; } vars.put("result", Arrays.toString(result)); #将变量放到jmeter变量中


#BeanShell断言使用JSONObject

    import com.alibaba.fastjson.JSONException;
    import com.alibaba.fastjson.JSONObject;

    //状态码断言

    if(ResponseCode.equals("200")){

        Failure = false;
    }
    else{
        Failure = true;
        FailureMessage = "响应HTTP状态码错误(非200): " + ResponseCode; //指定失败原因
    }
    //获取响应数据
    String response = prev.getResponseDataAsString();
    try {
        JSONObject respJson = JSONObject.parseObject(response);
        String code = respJson.getString("code");
        String msg = respJson.getString("message");
     if ("1".equals(code)) {
        Failure=false;
     } else {
        Failure=true;
        FailureMessage = saleStr + "响应不成功," + code + ":" + msg;
        log.error(saleStr + "响应不成功," + "," + response);
        }
     }catch (JSONException e){

        Failure=true;
        FailureMessage = 响应解析不成功," + response;
        log.error("响应解析不成功,"  + "," + response);
    }

    

 参考文章:https://blog.csdn.net/weixin_42172039/article/details/105389838
http://www.javashuo.com/article/p-mpgonuzw-nr.html
 

引用变量 ${变量名}