我正在使用一个外部 elasticsearch 实例和一个 spring boot 应用程序,该应用程序公开了一堆 rest 服务,这些服务会将数据存储到 elasticsearch 集群中。在部署 Spring 启动应用程序并将存储库设置配置为使用外部 elasticsearch 实例时,我可以使用 Web 服务,它们将存储到存储库和 elasticsearch 中。
我现在正在尝试修改这些服务的集成测试,以使用嵌入式 elasticsearch 实例来不依赖外部资源。黄瓜测试使用
@ContextConfiguration(classes = Application.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
它会启动一个码头服务器实例以在内部部署应用程序,然后运行一堆放心的调用来测试服务。这些测试在使用内部 hsqldb 后工作正常。但是,切换到嵌入式 elasticsearch 实例似乎不起作用。我有一些常规的单元测试,使用嵌入式 elasticsearch 实例,只是通过代码直接使用服务层,并且工作正常......但是当我使用 restassured 向 Web 服务端点发送实际的 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 启动过程创建的时,我需要让测试环境中的这些 Web 服务能够使用嵌入式 elasticsearch 实例?
这些 Web 服务测试在使用/配置外部 elasticsearch 实例时确实有效。它只是不知何故没有完全链接嵌入式的,嵌入式的开始很好,并且可以在端到端测试中使用相同的存储库和码头部署的服务进行常规单元测试。
多谢...如果您需要任何其他信息,请告诉我...这是一个很大的过程,有很多活动部件,所以只是试图坚持最小的设置。
想通了...事实证明这不是直接连接/弹性搜索问题。我恢复到一个独立的弹性搜索实例,测试仍然失败。事实证明,服务本身失败了,因为我修改了对象上的日期映射,它们现在不再与测试用例格式匹配。嵌入的实例已吞噬 Web 服务返回的错误。因此,通过服务层直接插入是有效的...但是网络服务杰克逊映射搞砸了,不再插入。修复了这个问题,现在嵌入式实例工作正常。
谢谢!