利器 | 接口自动化测试框架 RESTAssured 实践(三):对 Response 结果导出

疫情当下,各种压力接踵而来!唯有静下心来,锻炼身体,学习技能提升自我是破局之道!本文为霍格沃兹测试学院优秀学员课程学习笔记,想一起系统进阶的同学文末加群交流。


** rest-assuredresponse结果的导出**

上一篇文章中介绍了rest- assured对返回结果的断言,最后说明了对于Response结果导出的需求。可查看往期文章进行查看。

这里将继续研究`rest-

assuredresponse结果的导出获取,现有一个登录接口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_iduser_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");

** _
来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
QQ交流群:484590337
公众号 TestingStudio
点击获取更多信息

原文地址:https://www.cnblogs.com/hogwarts/p/15812515.html