将标头添加到所有请求

时间:2019-10-07 12:44:06

标签: java spring-boot rest-assured

是否可以将标头添加到所有请求?

我必须向所有请求添加标头。在生产环境中,标头是通过代理添加的。

在所有测试中手动添加此标头很烦人。

3 个答案:

答案 0 :(得分:0)

您是否使用FeignClient进行请求?

如果确实如此,并且如果您的测试定义了名为test的配置文件,则可以使用以下内容:

@Configuration
public class FeignRequestConfiguration {

    @Bean
    @Profile("test")
    public RequestInterceptor feignRequestInterceptorTest() {
        return (RequestTemplate requestTemplate) -> {
            requestTemplate.header("Some-Header", "Some-Value");
        };
    }
}

答案 1 :(得分:0)

按照@pvpkiran的建议,我创建了过滤器

public class AddHeadersFilter implements Filter {

    @Override
    public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext ctx) {
        requestSpec.header(new Header(IntegrationBaseTest.HEADER_USER_NAME, "test-user"));

        return ctx.next(requestSpec, responseSpec);
    }

}

然后我已将其添加到所有测试中

    @BeforeClass
    public static void configureRestAssured() {
        RestAssured.filters(new AddHeadersFilter());
    }

似乎可以正常工作。

我还添加了(希望)有用的配置

        HeaderConfig headerConfig = headerConfig()
                .overwriteHeadersWithName(HEADER_USER_NAME);
        RestAssured.config().headerConfig(headerConfig);

因此在某些测试中有一种方法可以覆盖标头

答案 2 :(得分:0)

使用以下代码。使用RequestSpecBuilder可以实现这一目标。

RequestSpecBuilder reqbuild=new RequestSpecBuilder();
        //Adding values like path parameters
        reqbuild.addPathParam("customers", "12212");
        reqbuild.addHeader("Content-Type", "application/json");
        requestSpecfication=reqbuild.build();

    given().spec(requestSpecfication).when().get("{customers}/").then().spec(responseSpecification).log().all();