接口校验方法有很多种,校验全部、校验Body(或者Data)、校验某个字段、校验数据库……今天简单做个分享。
前面我们提到接口代码至少800次了,但是对于校验(断言)这块一直没有单独说,今天我们就唠一唠。
断言的意义
断言通常用来在Junit中判断测试结果是否和预期值一致,添加断言是为了找出错误。
断言的N种方法
最简单的getCode
Assert.assertEquals(expectCode,response.getCode());
Assert.assertEquals(expectMsg,response.getMsg());
Assert.assertEquals(expectStatus,response.getStatus());
复制代码
相对简单的getBody
assertEquals(Objects.toString(response.getBody(), ""), expectResult);
复制代码
校验全部返回1
Assert.assertEquals(Objects.toString(response, ""), expectData);
复制代码
校验全部返回2
AssertUtil.isJsonEquals(response, expectData, false);
复制代码
校验某些字段-低级版
校验返回数据body里的某几个字段
String body=JSON.toJSONString(response.getBody());
JSONObject jsonObject = JSON.parseObject(body);
JSONArray array = jsonObject.getJSONArray("otherArchiveNumberList");
String s =jsonObject.getString("archiveNumber");
JSONArray array2 =jsonObject.getJSONArray("archiveMergeDetailList");
assertEquals(bodyotherArchiveNumberList,JSON.toJSONString(array));
assertEquals(bodyarchiveNumber,s);
assertEquals(bodyarchiveMergeDetailList,JSON.toJSONString(array2));
复制代码
校验某些字段-相对高级版1
当返回的数据里data有值时返回data中的某几个字段,当data为空的时候则返回其他字段的错误提示语。
String Result=JSON.toJSONString(response);
JSONObject jsonObject = JSON.parseObject(Result);
//当data不为空的时候校验zrrdahs和zjls
if (response.getType().equals("SUCCESS"))
if (jsonObject.getJSONObject("data")!=null) {
String s = jsonObject.getJSONObject("data").getString("jls");
AssertJUnit.assertEquals(expectData, s);
}
//当data为空的时候则type为error,此时校验错误提示语
if (jsonObject.getJSONObject("data")==null)
assertEquals(Objects.toString(response.getErrorMessage(), ""), expectErrorMessage);
复制代码
其他说明:
Assert.assertEquals(Objects.toString(response, “”), expectData);
这里采用Objects.toString(response, “”)是为了避免当数据为空的时候报空指针。
assertEquals(Objects.toString(response.getErrorMessage(), “”), expectErrorMessage);
这里的response.getErrorMessage()是在response里做了get()和set()。
既然谈到这里就把Response贴一下,基本上可以通用。
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.apache.commons.lang3.StringUtils;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
/**
*
* 客户端的返回
*/
public class ApiKhdResponse {
private String type;
private Object data;
private String errorCode;
private String errorMessage;
private String reason;
public JSONObject convert2JsonObject() {
String dataText = JSON.toJSONString(data, SerializerFeature.WriteMapNullValue);
JSONObject dataObject = JSON.parseObject(dataText);
return dataObject;
}
public JSONArray convert2JsonArray() {
String dataText = JSON.toJSONString(data, SerializerFeature.WriteMapNullValue);
JSONArray dataArray = JSON.parseArray(dataText);
return dataArray;
}
public String getType() {
return this.type;
}
public void setType(String type) {
this.type = type;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
@Override
public String toString() {
return "ApiResponse{" +
"type='" + type + '\'' +
", data=" + data +
", errorCode='" + errorCode + '\'' +
", errorMessage='" + errorMessage + '\'' +
", reason='" + reason + '\'' +
'}';
}
public <T> T getBodyBean(Class<T> clazz) { return JSON.parseObject(data.toString(), clazz); }
}
复制代码
校验某些字段-相对高级版2
//校验数据的返回,如果code返回正常则校验body,如果code返回异常则给出提示语。
String code=response.getHead().get("code");
if ("00000000".equals(code)) {
assertEquals(Objects.toString(response.getBody(), ""), expectResult);
}else{
assertEquals(Objects.toString(response.getMsg(), ""), expectResult);
复制代码
备注:
如果是使用这种校验方法需要在response做一些特别处理,如写一个assertSuccess()的方法,这里我也可以把完整的内容贴一下(不过这个可以在写断言的时候自动导入)。
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.apache.commons.lang3.StringUtils;
import java.util.Map;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
public class XqyResponse {
private Map<String, String> head;
private Object body;
public JSONObject convert2JsonObject() {
String bodyText = JSON.toJSONString(body, SerializerFeature.WriteMapNullValue);
JSONObject bodyObject = JSON.parseObject(bodyText);
return bodyObject;
}
public JSONArray convert2JsonArray() {
String bodyText = JSON.toJSONString(body, SerializerFeature.WriteMapNullValue);
JSONArray bodyArray = JSON.parseArray(bodyText);
return bodyArray;
}
public void assertSuccess() {
String code = head.get("code");
assertEquals("00000000", code);
}
public void assertFailed() {
String code = head.get("code");
//有些返回失败的接口,code直接为空
assertTrue(true);
return;
}
assertTrue(!code.equals("00000000") && !code.contains("1111111"));
}
public Map<String, String> getHead() {
return head;
}
public void setHead(Map<String, String> head) {
this.head = head;
}
public String getCode() {
return head.get("code");
}
public String getMsg() {
return head.get("msg");
}
public String getStatus(){
return head.get("status");
}
public String getTime(){
return head.get("time");
}
public Object getBody() {
return body;
}
public void setBody(Object body) {
this.body = body;
}
public <T> T getBodyBean(Class<T> clazz) {
return JSON.parseObject(body.toString(), clazz);
}
}
复制代码
校验包含某些数据
AssertUtil.isContains(response, expectData);
复制代码
校验数据库
//校验: returnSql的查询结果与期望的returnDB是否相等(type为SUCCESS时数据落库)
JsonUtils.assertDBEquals(jdbcTemplateOfSb, returnSql, returnDB);
复制代码
备注:
能做数据库校验是因为JDBC数据库驱动。JDBC即Java DataBase Connectivity,java数据库连接。JDBC提供的API可以让JAVA通过API方式访问关系型数据库,执行SQL语句,获取数据;常见关系型数据库如Oracle、MySQL、SQLServer等。
好啦,以上就是今天想要分享的内容,下期见!
非小埋语录
1.只有到了山顶才知道坚持的意义。
2.你自己要是翻不过这个篇来,没人能帮你过这个坎。
3.如果生活没让我俩笑出来,那是因为我们没有读懂这个笑话。
4.河都能入江,江都能入海,结局都是一样的,都能幸福,就是绕点弯路呗。
5.回忆需要靠物化。