Тестирование тайм-аута с помощью Restassured

Я использую RestAssured 2.4.1 для тестирования стека сервисов, первый сервис которого предоставляется через REST.

Теперь я хочу протестировать поведение, когда сервер не отвечает, ситуация, которую служба REST должна обнаруживать и обрабатывать. К сожалению, RestAssured завершает запрос POST, прежде чем служба REST обнаружит тайм-аут сервера.

Как я могу увеличить соответствующий тайм-аут RestAssured? Я пытаюсь следующее безуспешно

RestAssuredConfig config = RestAssured.config();
config.getHttpClientConfig()
            .setParam(ClientPNames.CONN_MANAGER_TIMEOUT, 0)  // HttpConnectionManager connection return time
            .setParam(CoreConnectionPNames.CONNECTION_TIMEOUT, 0) // Remote host connection time
            .setParam(CoreConnectionPNames.SO_TIMEOUT,  0) ; // Remote host response time

given()
    .config(config)
    . ...

2 ответа

Я использую RestAssured 3.0.1, но это то, как я это исправил - но в целом (я действительно хотел уменьшить время ожидания по умолчанию). Я также использую SystemDefaultHttpClient, поскольку хочу повторно использовать соединения (HTTP keepalive). Таким образом, это не соответствует 100%, но может дать указатели.

HttpClientConfig clientConfig = RestAssured.config().getHttpClientConfig();
clientConfig = clientConfig.httpClientFactory(new HttpClientConfig.HttpClientFactory() {
    @Override
    public HttpClient createHttpClient() {
        HttpClient rv =  new SystemDefaultHttpClient();
        HttpParams httpParams = rv.getParams();
        HttpConnectionParams.setConnectionTimeout(httpParams, 5 * 1000); //Wait 5s for a connection
        HttpConnectionParams.setSoTimeout(httpParams, 60 * 1000); // Default session is 60s
        return rv;
    }
});

//This is necessary to ensure, that the client is reused.
clientConfig = clientConfig.reuseHttpClientInstance();

RestAssured.config = RestAssured.config().httpClient(clientConfig);

Что именно время ожидания?

Если в вашем тесте используется org.junit.Test, вы можете явно установить время ожидания. Следующее устанавливает время ожидания в 60 секунд (60000 миллисекунд):

@Test(timeout = 60000)
public void canCallFullyQualifiedUrlsWithoutPortDefined() throws Exception {
    // This test hangs forever unless it works
    get("http://filehost-semc-rss-dev.s3.amazonaws.com/testfile1.txt");
}

Вы можете получить фактическое время ответа от уверенности:

@Test public void
response_time_can_be_extracted() {
    long time =
    given().
            param("firstName", "John").
            param("lastName", "Doe").
    when().
            get("/greet").
    then().
            extract().response().time();

    assertThat(time, greaterThan(0L));
}
Другие вопросы по тегам