接口测试过程中往往需要对返回响应体的结构以及各节点的属性进行判断及验证,JsonPath 很便捷的解决了从庞大的节点获取属性的问题。
了解一下JsonPath在rest-assured中的使用。
package com.restassured.test;
import static io.restassured.RestAssured.get;
import static org.hamcrest.Matchers.equalTo;
import java.util.Iterator;
import java.util.List;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;
public class test {
public static void main(String[] args){
//发起一个接口请求
String url = "https://club.app.autohome.com.cn/club_v7.5.0/club/jinghuatopic-pm1-p1-s20-b0.json";
Response response =get(url);
//如果返回的结构体是json格式的话,用jsonpath可以很方便的获取json中的各种数据
System.out.println(response.getBody().jsonPath().getString("result.list[1].bbsname"));
//直接获取json结构体中的数据
System.out.println(response.getBody().jsonPath().getString("returncode"));
//也可以从json结构体中指定的根路径开始获取(当前指定result)
JsonPath jsonPath = new JsonPath(response.asString()).setRoot("result");
//获取result下list列表中的值
System.out.println(jsonPath.get("list.bbsname"));
System.out.println(jsonPath.get("list.userpic"));
//获取list下所有userpic的值并验证链接是否有效
List<String> imgurls = jsonPath.getList("list.userpic");
for (Iterator iterator = imgurls.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
System.out.println(string );
}
}
}
测试过程中经常需要对于返回体中的部分元素进行验证,我们可以利用 org.hamcrest.Matchers 提供的各种断言结合rest-assured一起使用,来帮助简化测试代码。
比如判断 returncode 的值是否与预期的值一致
response.then().body("returncode", equalTo(0));
判断 url 返回的 code 码是否为 200 等等
get(url).then().assertThat().statusCode(200);
https://testerhome.com/topics/6451 这篇帖子中已经列出了大部分常用断言方式
对 org.hamcrest.Matchers 感兴趣的同学可以参照 http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matchers.html 官网 API,进行学习。
对JsonPath感兴趣的同学想要更深入的了解可以参照 https://github.com/jayway/JsonPath
rest-assured 中XmlPath的使用与JsonPath大同小异,感兴趣的同学可以参照 https://blog.jayway.com/2013/04/12/whats-new-in-rest-assured-1-8/