jmeter使用BeanShell断言校验接口响应

    xiaoxiao2023-11-04  169

    1、通常可以使用响应断言来判断,但是接口如果返回响应过于复杂,或者需要校验多个响应时,不太实用

    2、使用BeanShell断言

    响应示例如下:需要校验返回data中的ranking,以及top_list数组

    {     "code":1000,     "message":"成功",     "data":     {         "top_list":         [             {                 "nickname":"honglu",                 "member_id":"93435016",                 "role":"1",                 "area":"2",                 "directcount":"9",                 "groupcount":"107"             },             {                 "nickname":"用户17xixfjks附近开始代理费计算的",                 "member_id":"93435776",                 "role":"1",                 "area":"2",                 "directcount":"30",                 "groupcount":"47"             },             {                 "nickname":"用户9437031758",                 "member_id":"93435850",                 "role":"1",                 "area":"2",                 "directcount":"13",                 "groupcount":"32"             },             {                 "nickname":"用户06",                 "member_id":"93435765",                 "role":"1",                 "area":"2",                 "directcount":"27",                 "groupcount":"29"             },             {                 "nickname":"用户04",                 "member_id":"93435763",                 "role":"1",                 "area":"2",                 "directcount":"12",                 "groupcount":"12"             }         ],         "direct":"9",         "group":"107",         "ranking":"1"     },     "agent":"Apache-HttpClient\/4.5.5 (Java\/10.0.2)",     "client_type":"pc" }

    接口校验脚本如下:

    import org.json.*; import java.util.Arrays; import org.apache.jmeter.assertions; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.assertions.AssertionResult; //取响应状态码 String code = prev.getResponseCode(); log.info("返回code为:" + code); //判断响应code是否一致 if (code.equals("${my_code}")) { String response_data = prev.getResponseDataAsString();//获取接口返回数据 JSONObject response_json = new JSONObject(response_data);//转换成json //校验data里面ranking String ranking = response_json.get("data").get("ranking").toString(); log.info("返回ranking为:" + ranking); if(ranking.equals("${my_ranking}")) {Failure = false;} else { Failure = true; FailureMessage = "响应ranking与预期不符"; } //校验data中top_list数组 JSONArray response_array = response_json.get("data").getJSONArray("top_list");//将json转化为Array,根据响应格式确定从哪里开始转化数组 log.info("数组长度是:" + response_array.length()); String[][] array = new String[][]{{"93435016","honglu","1","2","9","107"},{"93435776","用户17xixfjks附近开始代理费计算的","1","2","30","47"},{"93435850","用户9437031758","1","2","13","32"},{"93435765","用户06","1","2","27","29"},{"93435763","用户04","1","2","12","12"}}; for (int i=0;i<response_array.length();i++) { String member_id = response_array.getJSONObject(i).get("member_id").toString(); String nickname = response_array.getJSONObject(i).get("nickname").toString(); String role = response_array.getJSONObject(i).get("role").toString(); String area = response_array.getJSONObject(i).get("area").toString(); String directcount = response_array.getJSONObject(i).get("directcount").toString(); String groupcount = response_array.getJSONObject(i).get("groupcount").toString(); if (member_id.equals(array[i][0]) && nickname.equals(array[i][1]) && role.equals(array[i][2]) && area.equals(array[i][3]) && directcount.equals(array[i][4]) && groupcount.equals(array[i][5])) { log.info("第"+i+"行校验成功"); Failure = false; continue; } else{ Failure = true; FailureMessage = "响应top_list与预期不符"; } } } else { Failure = true; FailureMessage = "响应code与预期不符"; prev.setStopThread(true);//失败,则暂停,后面接口不需要执行了 }

     

    最新回复(0)