2016-04-21 141 views
1

我正在使用RestAssured 2.4.1测试第一个服务通过REST公开的服务堆栈。使用Restassured测试后端超时

现在,我想测试后端没有响应时的行为,这是REST服务应该检测和处理的情况。不幸的是,RestAssured会在REST服务检测到后端超时之前终止POST请求。

如何增加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);