当先锋百科网

首页 1 2 3 4 5 6 7

REST Assured 系列汇总 之 REST Assured 8 - BDD Style

BDD(Behavior Driven Development)是敏捷软件开发流程,并非软件测试流程。它定义App应用的期望结果,从预期的用户行为角度从发。每个scenario都是以Given(前置条件 / 上下文),When(行为 / 事件执行)和Then(结果 / 输出)形式。

Rest Assured允许你用BDD模式写case。通常我们创建feature文件,以BDD的模式写scenario的步骤。但这并不意味着Rest assured支持BDD。显然我们要集成BDD框架如Cucumber结合Rest Assured实现BDD模式。

实际上,Rest Assured允许你采用BDD的风格组织你的测试脚本,使用Given,When,Then。

执行Request的前置条件:- GIVEN
例如 - 设置 Base URI, Base Path, Content Type , Request body (Payload) , cookies, headers , authentication , params etc.

执行请求 :- WHEN
例如 - 执行HTTP方法,GET, POST,PUT 等等

验证和抽取:- THEN
例如 - 验证status code, 响应数据, log, 数据抽取等等.

BDD 风格例子:
具体细节可以参考《REST Assured 4 - 第一个GET REST Assured Test

import org.junit.Test;
import io.restassured.RestAssured;
import org.hamcrest.Matchers;

public class BDDStyleGetRequestTest {

    @Test
    public void GetBookingIds_VerifyStatusCode(){

        //Given
        RestAssured.given()
                .baseUri("https://restful-booker.herokuapp.com")
        // When
        .when()
            .get("/booking")

        // Then
        .then()
            .statusCode(200)
            .statusLine("HTTP/1.1 200 OK")
            // To verify booking id at index 3
            .body("bookingid[3]", Matchers.equalTo(10))
            // To verify booking count
            .body("bookingid.sum()", Matchers.hasSize(3));
    }
}

BDD 风格static import 例子:
注意:对于初学者,最好不要使用static import,因为它会让你困惑,不指导方法是调用自哪个类。一旦你熟练掌握了一些类的方法后,你再应用静态导入。

import org.junit.Test;

import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;

public class BDDStyleGetRequestWithStaticImportTest {

    @Test
    public void GetBookingIds_VerifyStatusCode(){
        // Given
        given()
            .baseUri("https://restful-booker.herokuapp.com")
        // When
        .when()
            .get("/booking")
        //Then
        .then()
            .statusCode(200)
            .statusLine("HTTP/1.1 200 OK")
            // To verify booking id at index 3
            .body("bookingid[3]", equalTo(3))
            // To verify booking count
            .body("bookingid.sum()", hasSize(10));
    }
}