使用Restassured测试后端超时

时间:2016-04-21 09:31:16

标签: rest-assured

我正在使用RestAssured 2.4.1来测试第一个服务通过REST公开的服务堆栈。

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

如何增加RestAssured的相应超时?我正在尝试以下但没有成功

ComboBox

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:-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));
}