Elasticsearch 还提供了一个 jar 文件,用于测试 Elasticsearch 相关的代码
我们可以将它添加到任何 Java IDE 中,接着使用 Elasticsearch 提供的框架的进行一系列的测试,例如
1、 单元测试;
2、 集成测试;
3、 随机测试;
开始测试前,我们需要将 Elasticsearch 测试依赖项添加到我们的程序中
如果你使用 maven 来管理项目,那么可以在 pom.xml 中添加以下内容
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>6.3.0</version>
</dependency>
接着初始化 EsSetup,然后就可以用它来启动启动和停止 Elasticsearch 节点并创建索引
EsSetup esSetup = new EsSetup();
最后可以调用 esSetup.execute() 方法并传递 createIndex 参数和其它配置、类型、数据等参数来创建索引
单元测试
可以使用 JUnit 和 Elasticsearch 测试框架来运行单元测试
使用Elasticsearch 类创建节点和索引,并且可以使用 ESTestCase和 ESTokenStreamTestCase 类来执行测试
集成测试
集成测试需要使用 ESIntegTestCase 类,而且可以使用集群中的多个节点
Elasticsearch 提供了大量的方法用于集成测试
| 方法 | 说明 | 
|---|---|
| refresh() | 重新更新集群中的所有索引 | 
| ensureGreen() | 确保集群处于健康的运行状态 | 
| ensureYellow() | 确保集群处于亚健康的黄色运行状态 | 
| createIndex(name) | 使用传递的参数 name创建一个索引,该索引使用默认配置 | 
| flush() | 更新集群中的所有索引 | 
| flushAndRefresh() | 顺序调用 flush()和refresh()方法 | 
| indexExists(name) | 判断 name索引是否存在 | 
| clusterService() | 返回集群服务 Java 类 | 
| cluster() | 返回集群测试类 | 
提供的用于测试集群的方法
| 方法 | 说明 | 
|---|---|
| ensureAtLeastNumNodes(n) | 确保集群中的节点数量的最小值大于等于参数 n | 
| ensureAtMostNumNodes(n) | 确保集群中节点数量的最大值是否小于等于参数 n | 
| stopRandomNode() | 随机停止集群中的某个节点 | 
| stopCurrentMasterNode() | 停止当前主节点 | 
| stopRandomNonMaster() | 随机停止集群中不是主节点的其它节点 | 
| buildNode() | 创建一个新的节点 | 
| startNode(settings) | 使用配置 settings开始一个新的节点 | 
| nodeSettings() | 可以重写该方法来更改节点配置 | 
提供的用于访问客户端的方法
客户端用于访问群集中的不同节点并执行某些操作
可以用ESIntegTestCase.client() 方法随机获取一个客户端
Elasticsearch 还提供了访问客户端的其它方法,可以使用 ESIntegTestCase.internalCluster() 方法的返回值来调用这些方法
| 方法 | 说明 | 
|---|---|
| iterator() | 用于迭代访问所有的可用客户端 | 
| masterClient() | 返回一个可以跟主节点进行通讯的客户端 | 
| nonMasterClient() | 返回一个不可以跟主节点进行通讯的客户端 | 
| clientNodeClient() | 返回客户端节点中的当前客户端 | 
随机测试
如果需要测试用户的代码和每个可能的数据,以便将来使用任何类型的数据都不会失败,那么随机数据是执行此测试的最佳选择
生成随机数据
这种测试方法中,可以使用 RandomizedTest 的实例来实例化一个Random 类的对象,然后通过该对象上的不同方法来获取不同类型的数据
| 方法 | 返回值 | 
|---|---|
| getRandom() | 随机返回一个类的实例 | 
| randomBoolean() | 随机返回一个布尔值 ( boolean ) | 
| randomByte() | 随机返回一个字节数据 ( byte ) | 
| randomShort() | 随机返回一个短整数 ( short ) | 
| randomInt() | 随机返回一个整形 ( integer ) | 
| randomLong() | 随机返回一个长整型 ( long ) | 
| randomFloat() | 随机返回一个浮点数 ( float ) | 
| randomDouble() | 随机返回一个双精度浮点数 ( double ) | 
| randomLocale() | 随机返回一个地区 ( locale ) | 
| randomTimeZone() | 随机返回一个时区 ( time zone ) | 
| randomFrom() | 随机返回数组中的一个元素 | 
断言 ( Assertions)
ElasticsearchAssertions 和 ElasticsearchGeoAssertions 类包含一些可以在测试时进行常见检查的断言
例如
SearchResponse seearchResponse = client().prepareSearch();
assertHitCount(searchResponse, 6);
assertFirstHit(searchResponse, hasId("6"));
assertSearchHits(searchResponse, "1", "2", "3", "4",”5”,”6”);