2016-04-21 5 views
1

Я использую RestAssured 2.4.1 для тестирования стека службы, чья первая служба открывается через REST.Тестирование бэкэнд-тайм-аута с Restassured

Теперь я хочу проверить поведение, когда бэкэнд не отвечает, что служба 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) 
    . ... 

ответ

-1

Что именно происходит?

Если ваш тест использует 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)); 
} 
+0

Это совсем не помогает. Этот вопрос касается увеличения тайм-аута, а не прекращения его еще раньше. – morty

+0

@morty Разве вам не приходило в голову, что в таком случае вы должны установить тайм-аут выше 60000? Забавное. – MikeJRamsey56

+0

В вопросе четко указывается, что RestAssured отключен. Установка или увеличение времени до того, как Junit завершает тест, не решает проблему, так как она абсолютно не влияет на RestAssured. Ваш ответ был бы правильным, если бы у Junit был тайм-аут по умолчанию, который был ниже тайм-аута RestAssured и увеличился, что бы решить проблему. – morty

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