RestAssured接口自动化从入门到框架搭建-8-RestAssured基本功能-5-摘取内容

继续来学习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 + " ");
		}
	}

运行结果

170
123 34 100 97 116 97 34 58 123 34 105 100 。。。这后面还有很多没写出来

 

2.使用path()和extract()方法摘取内容

场景浏览器打开 http://jsonplaceholder.typicode.com/photos/1

RestAssured接口自动化从入门到框架搭建-8-RestAssured基本功能-5-摘取内容_第1张图片

第一步通过相关方法摘取上面红圈这个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.3
https://via.placeholder.com/600/92c952
PASSED: 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.3
Context Type: application/json; charset=utf-8
Status Code: 200
Href: https://via.placeholder.com/600/92c952
PASSED: testFirstGetResponseThenDoActions

 

你可能感兴趣的:(Rest,Assured,Extract(),path(),摘取内容)