Jmeter通过Beanshell处理复杂业务逻辑

通过Jmeter进行接口测试的过程中,需要根据返回的数据状态进行操作。但是接口返回的数据、状态是动态的。这时候我们就需要用到beanshell元件,通过编写JAVA脚本来处理复杂逻辑,beanshell脚本语言完全符合java 语法,并且又拥有自己的一些语法和方法。如下为查询到的数据,当数据的“codeStatus”字段为5时可以进行启用操作;当数据的“codeStatus”字段为4时可以进行删除操作。我们要根据不同状态对应的“id”进行对应的操作,即取出状态为4的数据id和状态为5的数据id。

{
    "msg": null,
    "code": "500200",
    "data": {
        "msg": null,
        "code": null,
        "data": [
            {
                "idCreateUser": null,
                "setAddLimit": true,
                "pv": 0,
                "remark": null,
                "skipVerify": true,
                "createUserName": "凤",
                "type": 3,
                "gmtCreate": "2021-07-22 17:21:48",
                "setRoundLimit": null,
                "codeStatus": 5,
                "errorMsg": null,
                "expiryDate": "2021-10-20 23:59:59",
                "qrCode": null,
                "configId": null,
                "id": 1040,
                "channelId": 135,
                "setDailyLimit": true,
                "useNameList": []
            },
            {
                "idCreateUser": null,
                "setAddLimit": true,
                "pv": 0,
                "remark": null,
                "skipVerify": true,
                "createUserName": "凤",
                "type": 4,
                "gmtCreate": "2021-07-22 17:21:47",
                "setRoundLimit": null,
                "codeStatus": 4,
                "errorMsg": null,
                "expiryDate": "2021-10-20 23:59:59",
                "qrCode": null,
                "configId": null,
                "id": 1039,
                "channelId": 135,
                "setDailyLimit": true,
                "useNameList": []
            }
        ]
    },
    "success": true
}
View Code

1、首先在查询数据接口的下面添加后置处理Bean Shell Postprocessor,因为返回的数据是JSON格式,需要用到json.jar包对JSON数据进行处理。下载jar包并放在jmeter安装目录下的lib目录,链接:https://pan.baidu.com/s/1EOpl5aPJ4xUqwUxbrlS7Yg     提取码:1234

 2、编写BeanShell脚本,将取到的数据id分别赋值给自定义变量normal_id和invalid_id,默认值分别为“-1”和“-2”。

 1 import org.json.*;  // 导入json包
 2 
 3 String response_data = prev.getResponseDataAsString(); //自定义一个变量response_data,来获取个人活码列表接口的返回值
 4 JSONObject response = new JSONObject(response_data); 
 5 JSONArray list = response.getJSONObject("data").getJSONArray("data"); //自定义一个列表list,来获取响应中data对象下的data数组
 6 JSONObject list_data = null; 
 7 String normal_id = "-1";  //自定义变量,将最终取到的正常状态的数据id赋值给该变量
 8 String invalid_id = "-2"; //自定义变量,将最终取到的作废状态的数据id赋值给该变量
 9 
10 for (int i = 0; i<list.length(); i++ ){
11     list_data = (JSONObject)list.getJSONObject(i); 
12     int status=list_data.getInt("codeStatus"); //把对象中codeStatus的值转换成整型
13     
14     if(status==5){ // 如果第i条的数据等于5,获取该条数据的id给normal_id
15         normal_id = list_data.getString("id").toString(); 
16     }
17     else if(status==4){ // 如果第i条的数据等于4,获取该条数据的id给invalid_id
18         invalid_id = list_data.getString("id").toString(); 
19     }
20     else{
21         continue;
22     }
23 }
24 
25 log.info("正常状态的数据id:"+normal_id);
26 log.info("作废状态的数据id:"+invalid_id);
27 vars.put("normal_id",normal_id); //把状态等于5(正常)的数据id值赋予给参数normal_id
28 vars.put("invali_id",invalid_id); //把状态等于4(正常)的数据id值赋予给参数invalid_id
View Code

3、根据步骤2数据的返回结果,对数据进行操作。添加逻辑控制器 if contrllor,如果normal_id不等于“-1”,说明返回有正常状态的数据,就执行if控制器下面的接口。可以使用${__jexl3(${normal_id}!="-1",)}进行判断,具体操作如下:

3.1 添加if控制器

3.2 使用函数助手对话框中的jexl3函数,对数据进行判断

将判断表达式填写在Expression输入框里

 3.3 同理,通过if控制器来判断是否执行对数据的删除操作,即invalid_id!=“-2”;

4、最后,可以通过控制台查看变量的输出结果

 

posted @ 2021-07-22 22:59  逆风前进的狼  阅读(206)  评论(0编辑  收藏  举报