(五)java+testng+poi之响应结果多字段断言

接口响应结果是否和预期一致。如下表,实际结果中是接口响应数据的回写,预期结果是将断言的字段和值,设计成一个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 "不通过";
		}
	}

你可能感兴趣的:(接口自动化测试)