本文为霍格沃兹测试学院优秀学员课程学习笔记,想一起系统进阶的同学文末加群交流。
rest-assured
对response
结果的导出
上一篇文章中介绍了rest-assured
对返回结果的断言,最后说明了对于 Response 结果导出的需求。可查看往期文章进行查看。
这里将继续研究rest-assured
对response
结果的导出获取,现有一个登录接口auth/oauth/token
,接口的部分返回值如下:
HTTP/1.1 200 OKServer: nginx/1.12.2Date: Mon, 13 Jan 2020 02:15:11 GMTContent-Type: application/json;charset=UTF-8Transfer-Encoding: chunkedExpires: 0Cache-Control: no-cache, no-store, max-age=0, must-revalidateX-XSS-Protection: 1; mode=blockPragma: no-cacheX-Frame-Options: DENYX-Content-Type-Options: nosniffProxy-Connection: keep-alive
{ "code": 1, "msg": null, "data": { "tenant_id": 6, "userType": "1", "dept_id": 0, "user_id": 6, "username": "xxx", "jti": "afeb93f8-e4e4-4c15-955b-90cee130c4c7", "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.exxxzciLCJjbGllbnRfaWQiOiJzeXN0ZW0iLCJ1c2VybmFtZSI6InFpbnpoZW4ifQ.6NQmjJp_9XSveOaATNLjtTktWe6_WjHY0o9NbBUdDx8", "expires_in": 9999999, "token_type": "bearer" } ... }
复制代码
语法演示
注:因这篇文章主要目的是演示返回值的导出功能,所以演示代码中将省略请求参数部分,如需了解可参考文章往期文章。
extract().path()extract
是我们获取返回值的核心,通过它来指明后面需要获取的内容,path()
中的语法同断言时的JsonPath
一致,例如我们现在要获取user_id
,写法如下:
@Testvoid login(){ .. . when() .log().all().post("http://47.xxx.xxx.133/auth/oauth/token"). then() .log().all().statusCode(200).body("code",equalTo(1)) .extract().path("data.user_id"); System.out.println("返回id的值是:"+id); }
复制代码
运行结果:
extract().asString()有时候我们可能需要获取ResponseBody
中的多个值,例如我们现在想要获取返回体body
中的dept_id
和user_id
,我们就可以利用extract().asString()
先将响应结果以json
字符串的形式保存下来,再一一根据需要获取,具体写法如下:
@Testvoid login(){ .. . when() .log().all().post("http://47.xxx.xxx.133/auth/oauth/token"). then() .log().all().statusCode(200).body("code",equalTo(1)) .extract().asString(); System.out.println("返回body的值是:"+json); System.out.println("获取user_id的值是:"+ from(json).get("data.user_id")); System.out.println("获取dept_id的值是:"+ from(json).get("data.dept_id")); }
复制代码
运行结果:
注:这里用到的 from 是 rest-assured 的,不要导错包了:import static io.restassured.path.json.JsonPath.from;
extract().response()上面都是对响应体的结果进行导出,但是实际工作中我们的需求远不止于此,我们可能还需要响应头等信息,例如一些接口的Token
、就可能会在响应信息的Header
中返回;
这个时候就可以利用extract().response()
来讲所有的response
信息都保存成一个Response
对象:
@Testvoid login(){ .. . when() .log().all().post("http://47.xxx.xxx.133/auth/oauth/token"). then() .log().all().statusCode(200).body("code",equalTo(1)) .extract().response(); System.out.println("返回response是:"+response); }
复制代码
运行结果:
然后再利用各种Response.get
方法来获取。
1)获取所有的Headers
@Testvoid login(){ .. . when() .log().all().post("http://47.xxx.xxx.133/auth/oauth/token"). then() .log().all().statusCode(200).body("code",equalTo(1)) .extract().response(); System.out.println("返回headers是:\n"+response.getHeaders()); }
复制代码
运行结果:
2)获取某一个header
值类似key
,value
的结构,使用getHeader("headerName")
即可,例如我们这里要获取Content-type
的值:
@Testvoid login(){ .. . when() .log().all().post("http://47.xxx.xxx.133/auth/oauth/token"). then() .log().all().statusCode(200).body("code",equalTo(1)) .extract().response(); System.out.println("返回Content-Type是:\n"+response.getHeader("Content-Type")); }
复制代码
运行结果:
3)获取 status line——getStatusLine()
@Testvoid login(){ .. . when() .log().all().post("http://47.xxx.xxx.133/auth/oauth/token"). then() .log().all().statusCode(200).body("code",equalTo(1)) .extract().response(); System.out.println("返回StatusLine是:\n"+response.getStatusLine()); }
复制代码
运行结果:
4)获取 status code——getStatusCode()
@Testvoid login(){ .. . when() .log().all().post("http://47.xxx.xxx.133/auth/oauth/token"). then() .log().all().statusCode(200).body("code",equalTo(1)) .extract().response(); System.out.println("返回StatusCode是:\n"+response.getStatusCode()); }
复制代码
运行结果:
5)获取 cookies——getCookies()、getCookie(“cookieName”)rest-assured 还为我们提供了方便获取 cookie 的方法;因本例中无 cookies 返回,所以仅展示代码语法,有需要的可自行测试或参考官方文档
// Get all cookies as simple name-value pairsMap<String, String> allCookies = response.getCookies();// Get a single cookie value:String cookieValue = response.getCookie("cookieName");
复制代码
评论