java返回zip文件流可以用post方式吗 jar包返回值

admin2024-06-04  8

 

1、环境准备

    1)  Jmeter、JDK

     2) 将json.jar包置于..\lib\下 

         

java返回zip文件流可以用post方式吗 jar包返回值,java返回zip文件流可以用post方式吗 jar包返回值_json,第1张

         json包下载地址:https://mvnrepository.com/ (国内的maven地址)

 

    3)Beanshell处理器:import org.json.*; 也可以 import org.json.JSONObject; import org.json.JSONAarry;主要是处理这两种类型的数据,Json对象和Json数组

2、主体思想

  1).获取response返回的数据(返回值)    

    String response_data = prev.getResponseDataAsString(); //自定义一个变量response_data,来获取请求的返回值String

  2).利用上一步获取的字符串形式的JSON,结合Java处理Json的方法,将需要的键值提取出来;

    JSONObject response =  new JSONObject(response_data); //自定义一个对象response,将返回值构造JSON对象

    这里构造的是JSONObject(对象JSON)也可以自己构造JSONAarry(数组对象)方法是一样的  
              JSONArray data_array = new JSONArray();

            //获取响应结果中参数jobs值; jobs为数组
            JSONArray data_array = data_obj.get("data").getJSONArray("jobs"); 

  3).获取需要拿到的数据

    String total_metaData = response.get("data").get("pageMetaData").get("totalSize").toString();   

   4).设置为Jmeter中的全局变量,供后续使用

    vars.put("total_meta",total_metaData); 

3、示例代码:

import org.json.*; //注意-------需要jmeter的lib/ext中放入 json.jar包

//获取jmeter接口请求返回值。此处获取到String类型;
String response_data  = prev.getResponseDataAsString();
String result = "";
String status="";
try {
    result = java.net.URLDecoder.decode(response_data, "UTF-8");
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

//将接口响应结果转换为jsonobject对象
JSONObject data_obj=new JSONObject(response_data);

//获取响应结果中参数jobs值; jobs为数组
JSONArray data_array = data_obj.get("data").getJSONArray("jobs"); 

//获取jobs数组的长度
int len = data_array.length();
if(len >= 0){
	//只取第一个数据的值,这个是最新值
	JSONObject jsonTemp = (JSONObject)data_array.getJSONObject(0);
     status = jsonTemp.get("status").toString();
     log.info("status------>"+status);
}
if(status.contains("SUCCEEDED")) {
    Failure = false;
    FailureMessage = "断言成功";
    log.info("断言成功");
}else{
    Failure = true;
    FailureMessage = "断言失败";
    log.info("断言失败");
}

  代码中使用的json数据格式如下:

{
	"msg": "ok",
	"code": 1000,
	"data": {
		"jobs": [{
			"jobName": "job0",
			"isChecked": false,
			"status": "SUCCEEDED",
		}, {
			"jobName": "job1",
			"isChecked": false,
			"status": "SUCCEEDED",
		}, {
			"jobName": "job03",
			"isChecked": false,
			"status": "KILLED",
		}],
		"totalJobs": 3,
		"totalPages": 1,
		"pageSize": 10,
		"currentPage": 1
	},
	"time_used": 1008,
	"request_id": "ca94cb21-b769-47d9-b8c8"
}

4、解析JSON串的方法

一)、解析接口请求返回json中含数组的一层对象的简单结构
1 数据结构如下:

{
“data”: [
    {
    “cpid”: “20190904162049UyPhgiTkUAoQ8w0i70BdnqQybmB4”,
    “dbServerName”: “192.168.0.1”
    },
    {
    “cpid”: “20190906113836wyzwnK9IWdfYhI2kwxNoTPGbv8W6”,
    “dbServerName”: “172.15.103.27”
    }
    ],
“pageIndex”: 0,
“pageNo”: 1,
“pageSize”: 10
}

2. 如解析1中的数据指定ip为192.168.0.1的cpid,代码如下:

import org.json.JSONObject; //需要jmeter的lib/ext中放入 json.jar包
import org.json.JSONArray;

//获取jmeter接口请求返回值。此处获取到String类型;
String response_data = prev.getResponseDataAsString();
//log.info(“response_data------>”+response_data); //jmeter beanshell打印出返回的结果

JSONObject data_obj = new JSONObject(response_data); //将接口响应结果转换为jsonobject对象
JSONArray data_array = data_obj.getJSONArray(“data”); //获取响应结果中参数data值; data为数组
//log.info(“data_array------>”+data_array.toString());

int len = data_array.length(); //获取data数组的长度

String strlen = Integer.toString(len);
String cpidR="";

//循环data数据中的数据找到要获取的指定数据
for(int i = 0;i <len;i++){
    JSONObject jsonTemp = (JSONObject)data_array.getJSONObject(i);
    //log.info(“jsonTemp------>”+jsonTemp.toString());
    String dbServerName = jsonTemp.get(“dbServerName”).toString(); //获取data中的dbServerName
    //log.info(“dbServerName”+i+"------>"+dbServerNameR);

    if(dbServerName.equals("192.168.0.1") )
    {
        cpidR = jsonTemp.get("cpid").toString();  //将满足条件的数据获取赋值给全局变量cpidR
        break;
    }else{
        continue;
    }
}
log.info(“cpidR------>”+cpidR);
vars.put(“orcl_cpid”,cpidR); //将获取的满足条件的cpidR值存为jmeter变量,提供下个接口使用,下个接口直接使用此处的${orcl_cpid}即可
return “成功返回cpid”;

二)、解析接口请求返回json中含数组的多层对象的复杂结构
1. json数据结构

{
“data”: [
    {
    “cpid”: “20190904162049UyPhgiTkUAoQ8w0i70BdnqQybmB4”,
    “dbServerName”: “192.168.0.1”
    “coonpool”:
    {
        “poolid”:“123456789”,
        “poolname”:“nametest”
    } //第二层对象
    },

    {
    “cpid”: “20190906113836wyzwnK9IWdfYhI2kwxNoTPGbv8W6”,
    “dbServerName”: “172.15.0.25”
    “coonpool”:
        {
        “poolid”:“A123456789”,
        “poolname”:“nametest”
        }
    }
],
“pageIndex”: 0,
“pageNo”: 1,
“pageSize”: 10
}

2. jmeter使用beanshell解析的java代码如下:
需求:获取poolid为123456789的poolname与cpid

import org.json.JSONObject;
import org.json.JSONArray;

//获取请求返回值。此处获取到String类型;
String response_data = prev.getResponseDataAsString();
log.info(“response_data------>”+response_data);

JSONObject data_obj = new JSONObject(response_data);
JSONArray data_array = data_obj.getJSONArray(“data”); //获取响应结果中参数data值; data为数组

log.info(“data_array------>”+data_array.toString());
int len = data_array.length(); //获取data数组的长度

String strlen = Integer.toString(len);
String cpid ="";
String poolname="";

for(int i = 0;i <len;i++){

    JSONObject responseRunVo1 = (JSONObject)data_array.getJSONObject(i);
    JSONObject responseRunVo2 = (JSONObject)jsonTemp.getJSONObject(“connpool”);

    // log.info(“获取数组的第二层对象元素:”+responseRunVo);

    String poolidR= responseRunVo2.getString("poolid");
    if (poolidR.equals("123456789") )
    {
        cpid =responseRunVo1.getString("cpid");   //第一层对象的数据
        poolname= responseRunVo2.getString("poolname");  //第二层对象的数据           
        break;
    }else{
        continue;
    }
}

log.info(“cpid------>”+cpid);
log.info(“poolname------>”+poolname);

vars.put(“orcl_cpid”,cpid);
vars.put(“orcl_poolname”,poolname);
//下个接口可以直接使用变量orcl_cpid与orcl_poolname获取结果值
return “成功返回”;

 

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!