web-dev-qa-db-ja.com

REST確認済みですが、タイムアウトを設定するにはどうすればよいですか?

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);

}

または

ConnectionConfig connectionConfig = new ConnectionConfig()
            .closeIdleConnectionsAfterEachResponseAfter(10L, TimeUnit.MILLISECONDS);
RestAssuredConfig restAssuredConfig = new RestAssuredConfig().connectionConfig(connectionConfig);

私も追加しようとしました

.queryParam("SO_TIMEOUT", 10)

または

.queryParam("CONNECTION_MANAGER_TIMEOUT", 10)

何も機能していないようです。クエリを中止しません

15
TomH

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");

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;

...

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);
6
Tillerino

とてもシンプル

doc = Jsoup.connect(company_url).timeout(2000).get();

どこ company_urlは、ヒットしようとしているAPI URLです。

0
My dear Riya