REST Assured 系列汇总 之 REST Assured 53 - How To Create ResponseSpecification Using ResponseSpecBuilder
前提条件
添加 rest assured 依赖库
<!-- REST Assured -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.4.0</version>
</dependency>
请先阅读下面2篇文章,可以更好的理解今天即将介绍的内容。
Interface RequestSpecification – How The Request Will Look Like
ResponseSpecification – Specify How The Expected Response Must Look Like
What is ResponseSpecBuilder?
ResponseSpecBuilder 类提供一个生成器用来创建一个 ResponseSpecification. 相比 ResponseSpecification 接口的方法,这个类有一些不言自明的方法,如 expectStatusCode(), expectHeaders() 等。
用 ResponseSpecBuilder 来创建 ResponseSpecification:
// Create a ResponseSpecification using ResponseSpecBuilder
ResponseSpecBuilder responseSpecBuilder = new ResponseSpecBuilder();
responseSpecBuilder.expectStatusCode(200);
responseSpecBuilder.expectStatusLine("HTTP/1.1 200 OK");
responseSpecBuilder.expectContentType(ContentType.JSON);
responseSpecBuilder.expectResponseTime(Matchers.lessThan(5000L));
ResponseSpecification responseSpecification = responseSpecBuilder.build();
为了避免多次调用 ResponseSpecBuilder ,我们也可以用如下生成器模式:
// Create a ResponseSpecification using ResponseSpecBuilder
responseSpecification = new ResponseSpecBuilder()
.expectStatusCode(200)
.expectStatusLine("HTTP/1.1 200 OK")
.expectContentType(ContentType.JSON)
.expectResponseTime(Matchers.lessThan(5000L))
.build();
实例:
import org.hamcrest.Matchers;
import org.testng.annotations.BeforeClass;
import org.junit.Test;
import io.restassured.RestAssured;
import io.restassured.builder.ResponseSpecBuilder;
import io.restassured.http.ContentType;
import io.restassured.specification.ResponseSpecification;
public class ResponseSpecBuilderExampleBuilderPattern {
ResponseSpecification responseSpecification = null;
@BeforeClass
public void setupResponseSpecification()
{
// Create a ResponseSpecification using ResponseSpecBuilder
responseSpecification = new ResponseSpecBuilder()
.expectStatusCode(200)
.expectStatusLine("HTTP/1.1 200 OK")
.expectContentType(ContentType.JSON)
.expectResponseTime(Matchers.lessThan(5000L))
.build();
}
@Test
public void getAllBookings()
{
// Given
RestAssured
.given()
.baseUri("https://restful-booker.herokuapp.com")
// When
.when()
.get("/booking")
// Then
.then()
// Just pass ResponseSpecification as below
.spec(responseSpecification)
// To verify booking count
.body("size()", Matchers.greaterThan(5));
}
@Test
public void getBookingDetailsWithInvalidFirstName()
{
// Given
RestAssured
.given()
.baseUri("https://restful-booker.herokuapp.com")
// When
.when()
.get("/booking?firstname=jim")
// Then
.then()
.spec(responseSpecification)
// To verify booking count
.body("size()", Matchers.equalTo(0));
}
}