RestAssured使用通用代码

时间:2018-02-13 17:54:47

标签: java json rest-assured

所以我是Rest Assured的初学者。

在JAVA中,我缩短了代码以便于说明和简化。我有一个类,其中包含以下代码:

public class ApiEndpointHelper {

    public static String postIdRequest(String requestBody) {

        String jsonBody = FileReader.getFile(requestBody);

        Response response = RestAssured.given()
                .auth()
                .basic("userbob", "bobspassword")
                .contentType(ContentType.JSON)
                .body(jsonBody)
                .when()
                .post("http://localhost:8080/report/v1/");
        response
                .then()
                .log().ifError().and()
                .statusCode(200);

        return response.asString();
    }

    public static String getId() {

        Response response = RestAssured.given()
                .auth()
                .basic("NEWuserjames", "jamesspassword")
                .contentType(ContentType.JSON)
                .when()
                .get("http://localhost:3099/v1/");
        response
                .then()
                .log().ifError().and()
                .statusCode(200);

        return response.asString();
    }
}

然后另一个课有:

public class BasicTest extends ApiEndpointHelper {
    @Test
    public void Query_endpoint() {
        String ActualResponse = ApiEndpointHelper.getId();

        assertJsonEquals(resource("responseExpected.json"),
                ActualResponse, when(IGNORING_ARRAY_ORDER));
    }
}

我的问题是:

如何以这样的方式使用代码:auth标题,内容类型,帖子URL等常见正文项可以在某处声明,然后所有请求都可以获取它们?两者都使用相同的auth标头但密码不同。有什么聪明的方法让它起作用?! 参见方法:'postIdRequest'和'getId'。我想我可以使用RequestSpecification但不确定如何! 有人可以用例子解释,最好是使用当前的上下文。

1 个答案:

答案 0 :(得分:1)

将公共代码提取到带参数的方法中:

public class ApiEndpointHelper {

    private RequestSpecification givenAuthJson() {
        return RestAssured.given()
            .auth()
            .basic("userbob", "bobspassword")
            .contentType(ContentType.JSON)
    }

    public static String getId() {
        Response response = givenAuthJson()
            .when()
            .get("http://localhost:3099/v1/");
    }
}

如果需要,您可以传递参数进行身份验证。

同样,您可以将URL构造提取到方法中。这是所有基本的编程,所以除非你有特定的问题,否则Stackoverflow的问题可能过于宽泛。