API接口測(cè)試中,對(duì)于接口請(qǐng)求respone的校驗(yàn)是非常重要的一個(gè)環(huán)節(jié)
在使用Jmeter進(jìn)行接口測(cè)試時(shí),有多種respone校驗(yàn)方式,比如響應(yīng)斷言、BeanShell斷言等等,BeanShell斷言可以自定義斷言,自由靈活的用腳本實(shí)現(xiàn)斷言
什么是BeanShell
小型嵌入式Java源代碼解釋器,具有對(duì)象腳本語(yǔ)言特性,能夠動(dòng)態(tài)地執(zhí)行標(biāo)準(zhǔn)JAVA語(yǔ)法
運(yùn)行其內(nèi)部的腳本處理Java應(yīng)用程序,還可以在運(yùn)行過(guò)程中動(dòng)態(tài)執(zhí)行你java應(yīng)用程序執(zhí)行java代碼,因?yàn)锽eanShell是用java寫(xiě)的,運(yùn)行在同一個(gè)虛擬機(jī)的應(yīng)用程序,因此可以自由地引用對(duì)象腳本并返回結(jié)果
先看看這樣的respone
{
"message": "不能發(fā)送小于當(dāng)前時(shí)間點(diǎn)的定時(shí)任務(wù)",
"statusCode": 200}
現(xiàn)在需要驗(yàn)證statusCode的值是否為200
import org.json.*;import java.util.Arrays;//獲取上一個(gè)請(qǐng)求的返回String jsonString = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(jsonString);//判斷返回值是否和預(yù)期一致if (responseJson.getInt("statusCode") != 200) {//把斷言失敗置為真,即用例失敗,并在結(jié)果樹(shù)中顯示FailureMessageFailure = true;
FailureMessage = "statusCode的返回值有誤";
}
如果要驗(yàn)證respone中message的值是否與預(yù)期一致,需要怎么做呢?
import org.json.*;import java.util.Arrays;//獲取上一個(gè)請(qǐng)求的返回String jsonString = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(jsonString);String fbpcontent = responseJson.getString("message");if (!fbpcontent.equals("不能發(fā)送小于當(dāng)前時(shí)間點(diǎn)的定時(shí)任務(wù)")) {//把斷言失敗置為真,即用例失敗,并在結(jié)果樹(shù)中顯示FailureMessageFailure = true;
FailureMessage = "message與實(shí)際值不一致";
}
現(xiàn)有這樣格式的respone數(shù)據(jù)
{
"statusCode": 200,
"data": [
{
"i": "50356",
"n": "項(xiàng)目一",
"v": "2.0",
"iconUrl": "",
},
{
"i": "45280",
"n": "項(xiàng)目二",
"v": "3.0",
"iconUrl": "",
},
{
"i": "14656",
"n": "項(xiàng)目三",
"v": "2.6",
"iconUrl": "",
},
{
"i": "66213",
"n": "項(xiàng)目四",
"v": "5.0",
"iconUrl": "",
}
]}
需要解析數(shù)組data的值,如何去解析呢?
import org.json.*;import java.util.Arrays;//獲取上一個(gè)請(qǐng)求的返回
String jsonContent = prev.getResponseDataAsString(); JSONObject response = new JSONObject(jsonContent); JSONArray groups = response.getJSONArray("data"); String strData= groups.toString(); log.info(strData)
現(xiàn)在有更加復(fù)雜格式的respone數(shù)據(jù)
{
"priorityGroups": {
"proId": 1234,
"name": "項(xiàng)目一",
"groups": [
{
"id": "50356",
"items": [
{
"proId": 1360,
"n": "PC端",
"index": 1
},
{
"proId": 1361,
"n": "iOS端",
"index": 2
},
{
"proId": 1362,
"n": "安卓端",
"index": 4
}
]
}
]
},
"promotion": {
"proId": 1364,
"cusId": 84,
"name": "項(xiàng)目二",
"from": 1470821215,
"to": 1470907615,
"status": 1,
"objectId": 1069,
"createBy": 394,
"eff": 1470821215000,
"createTime": 1470821155000
}
}
如果需要解析groups中的數(shù)據(jù),需要怎么實(shí)現(xiàn)呢?
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; String jsonContent = prev.getResponseDataAsString(); JSONObject response = new JSONObject(jsonContent); JSONArray groups = response.getJSONObject("priorityGroups").getJSONArray("groups"); String strGroups = groups.toString();
BeanShell的獲取數(shù)據(jù)解析,還可以使用Gson提供的方法
//prev.getResponseDataAsString是Jmeter提供的方法,可以調(diào)取上次請(qǐng)求的響應(yīng)字符串 response = prev.getResponseDataAsString();
//使用Gson提供的方法解析jsonJsonParser parser = new JsonParser();
JsonObject responseObj = (JsonObject) parser.parse(response);