REST Assured 49 - How To Retrieve Single And MultiValue Headers From Response Using Rest Assure

REST Assured 系列汇总 之 REST Assured 49 - How To Retrieve Single And MultiValue Headers From Response Using Rest Assure

介绍

当发起一个 API 请求时,Server 端会返回 response body 和一些 header。我们有时需要断言 response 中的这些 header,所以首先我们需要从 response 中获取这些 header。

注意区分 request 的 header 和 response 的 header。我们可以控制 request 的 header (除了自动生成的 headers),对于 response 的 header,我们只能可读。

本文概要:

  1. 从 response 中获取单个 header 的值
  2. 从 response 中获取多个 headers
  3. getHeaders(), getHeader(String headerName), headers(), header(String headerName) 方法的用法
  4. 怎样断言 header

前提条件

添加 rest assured 依赖

<!-- REST Assured -->
 <dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>rest-assured</artifactId>
    <version>4.4.0</version>
 </dependency>

从 response 中获取 headers

一旦发起一个 API 请求,我们就需要提取 response。REST Assured 有一个 Response 接口,代表一个 request 的 response。

Response response= 
	RestAssured
	    .given()
	    .get("https://restful-booker.herokuapp.com/booking/1");

Response response= 
	RestAssured
	    .given()
	    .get("https://restful-booker.herokuapp.com/booking/1")
	    .then()
	    .extract()
	    .response();

Response 接口有 4 个方法(有效2个)来获取 header。

header(String headerName)getHeader(String headername) – 获取单个 header 的值

headers() or getHeaders() – 获取所有 headers

REST Assured 中有些方法只是为了语法 syntactic sugar,例如上面方法,getHeader() 看上去比 header() 可读性更好。

一个 header 是一个键值对或一个键多个值。如果想要获取一个具体的 header,可以用 getHeader(String headerName)header(String headerName) 通过 header 名字来获取其值,返回类型是字符串。想要获取所有 headers,可用 headers() 或 getHeaders() ,返回类型是 Headers object。

import org.junit.Test;
 
import io.restassured.RestAssured;
import io.restassured.http.Header;
import io.restassured.http.Headers;
import io.restassured.response.Response;
 
public class RetrievingResponseHeaders {
    
    
 
	@Test
	public void getALlHeadersFromResponse()
	{
    
    
		Response response= 
				RestAssured
					.given()
					.get("https://restful-booker.herokuapp.com/booking/1")
					.then()
					.extract()
					.response();
		
		System.out.println("All Headers of response are :- ");
		Headers allHeaders = response.getHeaders();
		for(Header header : allHeaders)
		{
    
    
			System.out.print(header.getName() +" : ");
			System.out.println(header.getValue());
		}
		
		System.out.println("Value of Header Content-Type : "+response.getHeader("Content-Type"));
		
	}	
	
}

一个 header 是一个多个值的 header,我们可以通过下面方式获取所有值:

// Suppose Content-Type is a multivalue header
List<Header> allValue = response.getHeaders().getList("Content-Type");
for(Header header : allValue)
{
    
    
	System.out.print(header.getName() +" : ");
	System.out.println(header.getValue());
}
		
List<String> allValue1 = response.getHeaders().getValues("Content-Type");
for(String value : allValue1)
{
    
    
	System.out.println(value);
}

怎样断言 header

如果想从 response 中获取一个不存在的 header,将返回 NULL。可以用一个用户自定义 user-defined 的方法可以用来判断一个 header 是否出现在 response。

REST Assured 有一个现存的方法 hasHeaderWithName(String headerName), 如果该 header 存在则返回 true,否则返回 false。

boolean isPresent = response.getHeaders().hasHeaderWithName("Content-Type");

如果用 getHeaders() 也可以通过 get()getValue() 获取header 的值。

String v1 = response.getHeaders().get("Content-Type").getValue();
String v2 = response.getHeaders().getValue("Content-Type");

猜你喜欢

转载自blog.csdn.net/wumingxiaoyao/article/details/120472414