我需要一些关于如何使用单元测试来测试弹性搜索超时设置的建议。我希望使用Thread.sleep()进行测试,以便在执行搜索时超过配置的超时设置。这个是可能的吗?
我在Elasticsearch文档中看到,可以在Java中设置超时。https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/_timeouts.html
我想将我的一些代码添加到线程中,因为我编写的测试方法似乎无法执行配置的超时。
这是我声明超时的方法,也是RestHighLevelClient
@Bean
public RestHighLevelClient client(){
RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200))
.setHttpClientConfigCallback(....)
.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback(){
@Override
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder builder){
return builder
.setSocketTimeout(3000)
.setConnectTimeout(3000);
}
});
return new RestHighLevelClient(builder);
}我最初的问题是编写一个测试方法,用上面的配置测试RestHighLevelClient的任何搜索请求,并延迟搜索,以便测试在RestHighLevelClient中配置的超时。有可能吗?
在我的测试java类中,下面是我的代码-- test1()中的客户机是相同的变量,也是与上面方法相同的配置。
@Test
public void test1(){
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(
QueryBuilders.wrapperQuery(query);
);
searchRequest.source(searchSourceBuilder);
await().pollDelay(15, TimeUnit.SECONDS).untilAsserted(
() ->
client.search(searchRequest, RequestOptions.DEFAULT)
);
}test1()一直失败(预期会失败),但错误消息是
"java.lang.IllegalArgumentException:超时(10秒)必须大于轮询延迟(15秒)“
我将客户端超时设置为3秒(用于测试),但是为什么错误消息说超时为10秒。也许我在代码上做错了,有人能给我一些建议吗?非常感谢。
发布于 2022-02-21 08:44:25
您可以使用awaitility并编写如下内容
@Autowired
protected ElasticsearchOperations elasticsearchOperations;
await().atMost(5, TimeUnit.SECONDS)
.pollDelay(0, TimeUnit.MILLISECONDS)
.pollInterval(250, TimeUnit.MILLISECONDS)
.untilAsserted(() ->
assertThat(elasticsearchOperations
.get(id, ReviewRequestDocument.class)).isNotNull());当您的代码发生更改时,我认为您应该更改
await().pollDelay(15, TimeUnit.SECONDS).untilAsserted(
() ->
client.search(searchRequest, RequestOptions.DEFAULT)
);至
await().pollDelay(15, TimeUnit.SECONDS)
.atMost(60, TimeUnit.SECONDS)
.untilAsserted(
() ->
client.search(searchRequest, RequestOptions.DEFAULT)
);换句话说,轮询延迟和轮询超时都不能大于断言的总体超时,否则就没有意义,因为断言在执行单个检查之前就失败了。
https://stackoverflow.com/questions/71203051
复制相似问题