如何将RestAssured超时时间设置为120秒?
解决RestAssured中RequestSpecBuilder设置120秒超时未生效的问题
问题说明
当接口响应超过60秒时,会收到504超时错误,尝试通过RequestSpecBuilder将超时时间延长至120秒,但当前配置未生效。
问题分析
你当前使用setParam传入字符串参数名的方式容易出现拼写错误,RestAssured的HttpClientConfig提供了更直观、不易出错的链式API来配置超时参数,直接调用对应方法即可。
另外需要注意:504错误是网关超时,除了客户端超时设置,还要确认服务端或中间网关(如Nginx、API网关)是否也将超时时间调整到120秒以上,否则网关会先于客户端返回超时。
修改后的代码
将原来的config定义替换为以下代码,使用RestAssured提供的专用超时配置方法:
import io.restassured.config.HttpClientConfig; import io.restassured.config.RestAssuredConfig; import io.restassured.builder.RequestSpecBuilder; import io.restassured.specification.RequestSpecification; import io.restassured.filter.log.LogDetail; import io.restassured.filter.log.RequestLoggingFilter; import io.restassured.filter.log.ResponseLoggingFilter; import java.util.concurrent.TimeUnit; public class SpecificationFactory { // 使用RestAssured专用API配置超时,避免参数名拼写错误 public static RestAssuredConfig config = RestAssuredConfig.config() .httpClient(HttpClientConfig.httpClientConfig() .setConnectionTimeout(120, TimeUnit.SECONDS) .setSocketTimeout(120, TimeUnit.SECONDS) .setConnectionManagerTimeout(120, TimeUnit.SECONDS)); private SpecificationFactory() { } public static RequestSpecification getDefaultRequestSpecification(String serviceName) { return new RequestSpecBuilder() .setConfig(config) .setBaseUri(UrlConfig.getUrl(ENV, serviceName)) .addHeader(Headers.AUTHORIZATION_HEADER, String.format(Headers.AUTHORIZATION_BEARER, ACCESS_TOKEN)) .setContentType(ContentType.JSON) .setAccept(ContentType.JSON) .log(LogDetail.ALL) .addFilter(new RequestLoggingFilter()) .addFilter(new ResponseLoggingFilter()) .build() .filter(new AllureRestAssured()); } }
额外检查项
- 确认服务端接口的处理超时时间已调整至120秒以上
- 检查中间网关(如Nginx、Kong等)的
proxy_read_timeout或类似配置是否设置为120秒或更长 - 测试时可以故意构造一个120秒后返回的接口,验证客户端是否能正常等待响应
内容的提问来源于stack exchange,提问作者Ilya Shylkou
相关产品推荐
相关产品推荐

