接口响应结果是否和预期一致。如下表,实际结果中是接口响应数据的回写,预期结果是将断言的字段和值,设计成一个json数组。从代码上实现的话,需要以下步骤
(一)
1、创建一个实体类,有2个属性,一个是expression一个是value
2、// 将预期结果封装成Jsonpathvalidate对象
List list = JSONObject.parseArray(excpectedResult, JsonPathValidata.class);
3、用json-path技术, 对response 中通过表达式获取字段的实际值,判断是否和预期结果的value一致。
4、这里的思路,主要是预期结果的设计,看怎么从response中匹配多个字段值。
/**
* 预期结果jsonpath判断内容实体类
* @author 秀秀
*
*/
public class JsonPathValidata {
/**
* 表达式
*/
private String expression;
/**
* 值
*/
private String value;
/**
* 响应报文的断言
*
* @param case1 用例对象
* @param response 实际响应结果
*/
public static String responseAssert(Case case1, String response) {
boolean flag = true;
// 判断预期结果是否与实际结果相符,封装成一个方法,放在assertUil类里面
String excpectedResult = case1.getExpectedResponseData();
Object jsonObject = JSONObject.parse(excpectedResult);
if (jsonObject instanceof JSONArray) {// 如果预期响应数据解析出来是数组
// 将预期结果封装成Jsonpathvalidate对象
List<JsonPathValidata> list = JSONObject.parseArray(excpectedResult, JsonPathValidata.class);
// 遍历结合,取出表达式的值
for (JsonPathValidata jsonPathValidata : list) {
// 表达式
String path = jsonPathValidata.getExpression();
// 表达式的值
String expectedValue = jsonPathValidata.getValue();
// 先把response加载出来,提高性能
Object document = Configuration.defaultConfiguration().jsonProvider().parse(response);
Object obj = JsonPath.read(document, path);
// 用jsonpath提取出想要的内容,并判断
// JSONPath.read(response, path) == null 如果为null的话,是不能转成字符串的,所以先判断是否为null
String actualValue = obj == null ? "" : obj.toString();
if (!actualValue.equals(expectedValue)) {
flag = false;
break;
}
}
} else if (jsonObject instanceof JSONObject) {// 如果预期响应数据解析出来不是数组
flag = excpectedResult.equals(response);
}
System.out.println(flag);
if (flag) {
return "通过";
} else {
return "不通过";
}
}