我正在使用外部弹性搜索实例和弹簧启动应用程序,该应用程序公开了一系列将数据存储到elasticsearch集群中的休息服务。在部署spring boot应用程序并配置存储库设置以使用外部elasticsearch实例时,我可以使用webservices,它们将存储到存储库并进入elasticsearch。
我现在正在尝试修改这些服务的集成测试,以使用嵌入式弹性搜索实例来不依赖外部资源。黄瓜测试使用
@ContextConfiguration(classes = Application.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
启动一个jetty服务器实例,在内部部署应用程序,然后运行一堆restassured调用来测试服务。使用内部hsqldb后,这些测试工作正常。但是,切换到嵌入式弹性搜索实例似乎不起作用。我有一些常规单元测试利用嵌入式弹性搜索实例直接使用服务层通过代码,并且工作正常......但是当我使用restassured将实际的http请求发送到webservice端点时,存储库似乎没有工作,它不会存储在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();
我可以调试测试,并通过浏览器从外部查看弹性搜索实例和群集是通过" http://localhost:9200/dataset/"创建的。但是使用restassured的webservice调用似乎无法存储到已配置的存储库中,而只是调用repository.save的常规测试似乎工作正常。有没有人知道,当测试环境中没有自动装配使用存储库的webservice的数据服务时,在测试环境中使这些web服务需要的额外步骤能够利用嵌入式弹性搜索实例。通过webservice类中的spring boot启动过程创建?
使用/配置外部elasticsearch实例时,这些Web服务测试可以正常工作。它只是在某种程度上没有完全链接嵌入式的那个确实正常启动并且与常规单元测试一起使用相同的存储库和jetty部署的服务进行端到端测试。
非常感谢...如果您需要任何其他信息,请告诉我......这是一个包含大量活动部件的大流程,所以只是努力坚持最小化设置。
答案 0 :(得分:0)
想出来......结果证明不是直接连接/弹性搜索问题。我又回到了一个独立的弹性搜索实例,测试仍然失败了。事实证明服务本身失败了,因为我在对象上修改了日期映射,现在它们不再匹配测试用例格式了。嵌入式实例吞下了webservice返回的错误。所以通过服务层直接插入工作...但webservice jackson映射搞砸了,不再插入。修复了现在嵌入式实例正常工作的问题。
谢谢!