gpt4 book ai didi

java - 嵌入式 Elasticsearch junit web 服务测试

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:10 24 4
gpt4 key购买 nike

我正在使用一个外部elasticsearch实例和一个spring boot应用程序,它公开了一堆将数据存储到elasticsearch集群中的休息服务。当部署 Spring Boot 应用程序并配置存储库设置以使用外部 Elasticsearch 实例时,我可以使用 Web 服务,它们将很好地存储到存储库和 Elasticsearch 中。

我现在正在尝试修改这些服务的集成测试,以使用嵌入式 Elasticsearch 实例,而不依赖于外部资源。 cucumber 测试使用

@ContextConfiguration(classes = Application.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

它启动一个jetty服务器实例来在内部部署应用程序,然后运行一堆放心的调用来测试服务。使用内部 hsqldb 后,这些测试运行良好。但是,切换到嵌入式 Elasticsearch 实例似乎不起作用。我有一些利用嵌入式 Elasticsearch 实例的常规单元测试,只是通过代码直接使用服务层,并且工作正常......但是当我使用 resassured 向 webservice 端点发送实际的 http 请求时,存储库似乎不起作用,并且不会存储到 elasticsearch 中。我的配置如下:

Settings.Builder elasticsearchSettings = Settings.settingsBuilder()
.put("http.enabled", "true")
.put("cluster.name", "myCluster")
.put("path.home", "target/elasticsearch-home")
.put("elasticsearch.host","localhost")
.put("elasticsearch.port", "9300");
.put("path.data", dataDirectory.toString());

node = NodeBuilder.nodeBuilder()
.local(true)
.settings(elasticsearchSettings.build())
.node();
node.client().admin().indices().prepareCreate("dataset").get();

我可以调试测试并通过浏览器从外部看到elasticsearch实例和集群是通过“http://localhost:9200/dataset/”创建的,但是使用restassured的web服务调用似乎无法存储到配置的存储库中,但仅调用repository.save的常规测试似乎工作正常。有谁知道当使用存储库的 Web 服务的数据服务不是在测试本身中自动连接而是通过 Web 服务类中的 Spring Boot 启动过程创建时,我缺少哪些额外步骤才能使测试环境中的这些 Web 服务能够利用嵌入式 Elasticsearch 实例?

这些 Web 服务测试在使用/配置外部 Elasticsearch 实例时确实有效。它只是以某种方式并没有完全链接到嵌入式测试,该嵌入式测试启动良好,并且可以在端到端测试中利用相同的存储库与 jetty 部署的服务进行常规单元测试。

非常感谢...如果您需要任何其他信息,请告诉我...这是一个很大的过程,有很多移动部件,所以只是尝试坚持最小的设置。

最佳答案

弄清楚了...事实证明不是直接连接/elasticsearch 问题。我恢复到独立的 Elasticsearch 实例,测试仍然失败。结果服务本身失败了,因为我修改了对象上的日期映射,并且它们现在不再匹配测试用例格式。嵌入式实例已经吞掉了 Web 服务返回的错误。因此,通过服务层直接插入是有效的...但是 Web 服务 jackson 映射搞砸了并且不再插入。修复了这个问题,现在嵌入式实例可以正常工作了。

谢谢!

关于java - 嵌入式 Elasticsearch junit web 服务测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49881218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com