В 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);
}
или
ConnectionConfig connectionConfig = new ConnectionConfig()
.closeIdleConnectionsAfterEachResponseAfter(10L, TimeUnit.MILLISECONDS);
RestAssuredConfig restAssuredConfig = new RestAssuredConfig().connectionConfig(connectionConfig);
Я также попытался добавить
.queryParam("SO_TIMEOUT", 10)
или
.queryParam("CONNECTION_MANAGER_TIMEOUT", 10)
ничего не работает.
Он не отменяет мой запрос
Ответы
Ответ 1
Вы можете настроить таймауты, установив параметры 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");
Ответ 2
Поскольку 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);
Ответ 3
Очень просто
doc = Jsoup.connect(company_url).timeout(2000).get();
Где company_url
- это URL вашего API, который пытается попасть.