在@BeforeClass下移动RequestSpecification代码后出现问题

时间:2017-04-18 09:35:38

标签: java testng rest-assured

下面的代码对我来说很好用:

    @Test (priority=1, dependsOnMethods = {"checkIfAllServicesAreUp"})
    public void verifyCreateUser() {
        RestAssured.baseURI = "someValidURI";
        RestAssured.basePath = "userservice/user/";
        RequestSpecification spec = new RequestSpecBuilder().setContentType(ContentType.JSON).log(LogDetail.METHOD).build();
        response = RestAssured.given().spec(spec).headers("source","APP").body("{ }").when().post("");
    }

但是当我以下面的方式移动RequestSpecification下的@BeforeClass相关代码时:

    private RequestSpecification spec;

    @BeforeClass
    public void setSpec() {
        spec = new RequestSpecBuilder().setContentType(ContentType.JSON).log(LogDetail.METHOD).build();
    }

    @Test (priority=1, dependsOnMethods = {"checkIfAllServicesAreUp"})
    public void verifyCreateUser() {
        RestAssured.baseURI = "someValidURI";
        RestAssured.basePath = "userservice/user/";
        response = RestAssured.given().spec(spec).headers("source","APP").body("{ }").when().post("");
    }

我的API测试返回错误代码405(不允许使用方法)。

似乎spec覆盖了我的测试方法RestAssured.basePath中的verifyCreateUser分配,因为我没有明确地在spec中设置相同的内容,以及POST调用被someValidURI而不是someValidURI+/userservice/user命中,因此405错误代码。我不想在basePath中设置spec,因为我的每个测试方法都会有所不同。请帮助找到一个优雅的解决方案。

1 个答案:

答案 0 :(得分:2)

修改了我的代码,如下所述,它现在正常工作:

@Test (priority=1, dependsOnMethods = {"checkIfAllServicesAreUp"})
public void verifyCreateUser() {
    RestAssured.baseURI = "someValidURI";
    RequestSpecification spec = new RequestSpecBuilder().setBasePath("userservice/user/").setContentType(ContentType.JSON).log(LogDetail.METHOD).build();
    response = RestAssured.given().spec(spec).headers("source","APP").body("{ }").when().post("");
}

显然,我之前为每个测试配置basePath的方式不正确。我现在在spec内完成。

希望这有助于将来。