在REST Assured中,如何设置超时?

Tom*_*omH 16 httpclient java-8 rest-assured

我正在使用RestAssured 2.8.0并且我正在尝试设置自己的超时(对于网关超时),所以如果我在X毫秒后没有得到响应我想要中止.

我试过了:

public static ValidatableResponse postWithConnectionConfig(String url, String body, RequestSpecification requestSpecification, ResponseSpecification responseSpecification) {
    ConnectionConfig.CloseIdleConnectionConfig closeIdleConnectionConfig = new ConnectionConfig.CloseIdleConnectionConfig(1L, TimeUnit.MILLISECONDS);
    ConnectionConfig connectionConfig = new ConnectionConfig(closeIdleConnectionConfig);
    RestAssuredConfig restAssuredConfig = new RestAssuredConfig().connectionConfig(connectionConfig);


    return given().specification(requestSpecification)
            .body(body)
            .config(restAssuredConfig)
            .post(url)
            .then()
            .specification(responseSpecification);

}
Run Code Online (Sandbox Code Playgroud)

要么

ConnectionConfig connectionConfig = new ConnectionConfig()
            .closeIdleConnectionsAfterEachResponseAfter(10L, TimeUnit.MILLISECONDS);
RestAssuredConfig restAssuredConfig = new RestAssuredConfig().connectionConfig(connectionConfig);
Run Code Online (Sandbox Code Playgroud)

我也尝试添加

.queryParam("SO_TIMEOUT", 10)
Run Code Online (Sandbox Code Playgroud)

要么

.queryParam("CONNECTION_MANAGER_TIMEOUT", 10)
Run Code Online (Sandbox Code Playgroud)

似乎没什么用.它不会中止我的查询

Luc*_*ens 15

您可以通过设置HTTP客户端参数来配置超时:

RestAssuredConfig config = RestAssured.config()
        .httpClient(HttpClientConfig.httpClientConfig()
                .setParam(CoreConnectionPNames.CONNECTION_TIMEOUT, 1000)
                .setParam(CoreConnectionPNames.SO_TIMEOUT, 1000));

given().config(config).post("http://localhost:8884");
Run Code Online (Sandbox Code Playgroud)

  • CoreConnectionPNames似乎已被弃用.有没有新的方法来配置超时? (7认同)
  • 请参阅 https://github.com/rest-assured/rest-assured/issues/935 和 https://github.com/rest-assured/rest-assured/issues/497 (2认同)

小智 8

以下配置对我有用。

RestAssured.config=RestAssuredConfig.config()
                        .httpClient(HttpClientConfig.httpClientConfig()
                                .setParam("http.socket.timeout",1000)
                                .setParam("http.connection.timeout", 1000));
Run Code Online (Sandbox Code Playgroud)


Til*_*ino 7

由于CoreConnectionPNames不推荐使用,因此这是一种较新的方法。这适用于Apache HTTP客户端4.5.3:

import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.HttpClientBuilder;

import io.restassured.RestAssured;
import io.restassured.config.HttpClientConfig;
Run Code Online (Sandbox Code Playgroud)

...

RequestConfig requestConfig = RequestConfig.custom()
    .setConnectTimeout(5000)
    .setConnectionRequestTimeout(5000)
    .setSocketTimeout(5000)
    .build();

HttpClientConfig httpClientFactory = HttpClientConfig.httpClientConfig()
    .httpClientFactory(() -> HttpClientBuilder.create()
        .setDefaultRequestConfig(requestConfig)
        .build());

RestAssured.config = RestAssured
    .config()
    .httpClient(httpClientFactory);
Run Code Online (Sandbox Code Playgroud)

  • 您应该按照[此处](https://github.com/rest-assured/rest-assured/issues/497)的方式通过这种方式获取“ ClassCastException”。请放心,不支持使用外部httpClient。当前,您必须产生一个“ AbstractHttpClient” (8认同)