首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索搜索测试超时

搜索搜索测试超时
EN

Stack Overflow用户
提问于 2022-02-21 08:13:25
回答 1查看 315关注 0票数 1

我需要一些关于如何使用单元测试来测试弹性搜索超时设置的建议。我希望使用Thread.sleep()进行测试,以便在执行搜索时超过配置的超时设置。这个是可能的吗?

我在Elasticsearch文档中看到,可以在Java中设置超时。https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/_timeouts.html

我想将我的一些代码添加到线程中,因为我编写的测试方法似乎无法执行配置的超时。

这是我声明超时的方法,也是RestHighLevelClient

代码语言:javascript
复制
@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()中的客户机是相同的变量,也是与上面方法相同的配置。

代码语言:javascript
复制
@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秒。也许我在代码上做错了,有人能给我一些建议吗?非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2022-02-21 08:44:25

您可以使用awaitility并编写如下内容

代码语言:javascript
复制
@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());

当您的代码发生更改时,我认为您应该更改

代码语言:javascript
复制
await().pollDelay(15, TimeUnit.SECONDS).untilAsserted(
        () ->
            client.search(searchRequest, RequestOptions.DEFAULT)
    );

代码语言:javascript
复制
await().pollDelay(15, TimeUnit.SECONDS)
  .atMost(60, TimeUnit.SECONDS)
  .untilAsserted(
        () ->
            client.search(searchRequest, RequestOptions.DEFAULT)
    );

换句话说,轮询延迟和轮询超时都不能大于断言的总体超时,否则就没有意义,因为断言在执行单个检查之前就失败了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71203051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档