Elasticsearch提供了一个jar文件,可以将其添加到任何Java IDE中,并可以用于测试与Elasticsearch相关的代码。使用Elasticsearch提供的框架可以执行一系列测试。在本章中,我们将详细讨论这些测试-
单元测试
整合测试
随机测试
先决条件
要开始测试,您需要将Elasticsearch测试依赖项添加到您的程序中。您可以将maven用于此目的,并可以在pom.xml中添加以下内容。
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.1.0</version>
</dependency>EsSetup已被初始化,以启动和停止Elasticsearch节点并创建索引。
EsSetup esSetup = new EsSetup();esSetup.execute() 带有createIndex的函数将创建索引,您需要指定设置,类型和数据。
单元测试
单元测试是通过使用JUnit和Elasticsearch测试框架进行的。可以使用Elasticsearch类创建节点和索引,并且可以使用test方法执行测试。ESTestCase和ESTokenStreamTestCase类用于此测试。
整合测试
集成测试使用群集中的多个节点。ESIntegTestCase类用于此测试。有多种方法可以简化准备测试用例的工作。
| 序号 | 方法与说明 |
|---|---|
| 1 | refresh() 将刷新群集中的所有索引 |
| 2 | ensureGreen() 确保绿色健康集群状态 |
| 3 | ensureYellow() 确保黄色运行状况群集状态 |
| 4 | createIndex(name) 使用传递给此方法的名称创建索引 |
| 5 | flush() 将刷新群集中的所有索引 |
| 6 | flushAndRefresh() flush() 和 refresh() |
| 7 | indexExists(name) 验证指定索引是否存在 |
| 8 | clusterService() 返回集群服务 java 类 |
| 9 | cluster() 返回测试群集类 |
测试集群方法
| 序号 | 方法与说明 |
|---|---|
| 1 | ensureAtLeastNumNodes(n) 确保群集中最多的最小节点数大于或等于指定的数目 |
| 2 | ensureAtMostNumNodes(n) 确保群集中最多的节点数小于或等于指定的数目 |
| 3 | stopRandomNode() 停止群集中的随机节点 |
| 4 | stopCurrentMasterNode() 停止主节点 |
| 5 | stopRandomNonMaster() 停止群集中不是主节点的随机节点 |
| 6 | buildNode() 创建新节点 |
| 7 | startNode(settings) 启动新节点 |
| 8 | nodeSettings() 重写此方法以更改节点设置 |
访问客户端
客户机用于访问集群中的不同节点并执行某些操作。ESIntegTestCase.client()方法用于获取随机客户端。Elasticsearch还提供了访问客户端的其他方法,这些方法可以使用ESIntegTestCase.internalCluster()方法。
| 序号 | 方法与说明 |
|---|---|
| 1 | iterator() 这有助于您访问所有可用的客户端 |
| 2 | masterClient() 这将返回一个与主节点通信的客户机 |
| 3 | nonMasterClient() 这将返回一个客户端,该客户端不与主节点通信 |
| 4 | clientNodeClient() 这将返回当前处于客户端节点上的客户端 |
随机测试
此测试用于测试用户代码与所有可能的数据,以便将来不会出现任何类型的数据失败。随机数据是执行此测试的最佳选择。
生成随机数据
在此测试中,Random类由RandomizedTest提供的实例实例化,并提供了许多用于获取不同类型数据的方法。
| 方法 | 返回值 |
|---|---|
| getRandom() | Instance of random class |
| randomBoolean() | Random boolean |
| randomByte() | Random byte |
| randomShort() | Random short |
| randomInt() | Random integer |
| randomLong() | Random long |
| randomFloat() | Random float |
| randomDouble() | Random double |
| randomLocale() | Random locale |
| randomTimeZone() | Random time zone |
| randomFrom() | Random element from array |
断言
ElasticsearchAssertions和ElasticsearchGeoAssertions类包含断言,这些断言用于在测试时执行一些常规检查。例如,观察此处给出的代码-
SearchResponse seearchResponse = client().prepareSearch();
assertHitCount(searchResponse, 6);
assertFirstHit(searchResponse, hasId("6"));
assertSearchHits(searchResponse, "1", "2", "3", "4",”5”,”6”);