本文共 2432 字,大约阅读时间需要 8 分钟。
继续来学习Rest Assured中常见的功能,上篇介绍了两种方法得到不同类型的响应数据,其实还有一个方法,可以把响应对象装换成字节数组对象。第二个介绍extract().path()方法去摘取某一个字段的值,最后介绍我们实际接口用例开发中的写法是,先获取响应对象,然后根据响应对象提供的方法,去解析拿到响应正文,状态码和响应头字段等。
1.响应转换成字节数组
虽然我也不知道为什么要转换成字节数组,以及这种字节数组的好处在哪里,这里来看看如何转换。
/** * 以字节数组方式拿到响应对象 * @throws IOException */ @Test public void testGetResponseAsByteArray() throws IOException { byte[] bytes = get("https://reqres.in/api/users/2").asByteArray(); System.out.println("The Response: \n\n" + bytes.length); //遍历这个字节数组看看 for (byte b : bytes) { System.out.print(b + " "); } }
运行结果
170123 34 100 97 116 97 34 58 123 34 105 100 。。。这后面还有很多没写出来
2.使用path()和extract()方法摘取内容
场景浏览器打开
第一步通过相关方法摘取上面红圈这个url的内容,然后拿着这个url去进行发送get请求。
/** * 使用path方法提取内容 */ @Test public void testExtractDetailsUsingPath() { String href = when(). get("http://jsonplaceholder.typicode.com/photos/1"). then(). contentType(ContentType.JSON). body("albumId", equalTo(1)). extract(). path("url"); System.out.println(href); when().get(href).then().statusCode(200); }
运行结果
[RemoteTestNG] detected TestNG version 6.14.3https://via.placeholder.com/600/92c952PASSED: testExtractDetailsUsingPath
上面then()后两行代码的意思是,contentType是设置响应内容为JSON格式,之前我们都是默认,不进行显式设置。body这行代码是对响应正文进行断言,判断这个id是不是等于1. 后面extract().path()是根据xpath路径去摘取这个字段的值。也就是上面红圈这个url,拿到之后去执行发送请求。
上面这个用例,还可以一行代码简写成这样。
/** * 使用path方法提取内容,一行代码写法 */ @Test public void testExtractDetailsUsingPath2() { String href = get("http://jsonplaceholder.typicode.com/photos/1").path("url"); System.out.println(href); when().get(href).then().statusCode(200); //第二种写法 String href1 = get("http://jsonplaceholder.typicode.com/photos/1").andReturn().jsonPath().getString("url"); System.out.println(href1); when().get(href1).then().statusCode(200); }
3.先拿到响应再做其他事情(重点掌握)
有时候我们并不喜欢我们上面这些写法,很多场景下,我们都是习惯先拿到响应对象,然后再去做其他事情。例如获取响应头,获取响应状态码,然后获取响应正文中部分字段的值等,看看下面这个例子。
/** * 先拿到响应对象,然后再解析 */ @Test public void testFirstGetResponseThenDoActions() { Response resp = get("http://jsonplaceholder.typicode.com/photos/1"). then(). extract(). response(); // 解析响应 System.out.println("Context Type: " + resp.contentType()); System.out.println("Status Code: " + resp.statusCode()); System.out.println("Href: " + resp.path("url")); }
运行结果:
[RemoteTestNG] detected TestNG version 6.14.3Context Type: application/json; charset=utf-8Status Code: 200Href: https://via.placeholder.com/600/92c952PASSED: testFirstGetResponseThenDoActions
转载地址:http://ljows.baihongyu.com/