您的位置:首页 > 运维架构 > Shell

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

2019-05-25 18:04 453 查看

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"
}

接口校验脚本如下:

[code]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);//失败,则暂停,后面接口不需要执行了

}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: