Elasticsearch 测试
Elasticsearch提供了一个jar文件,可以添加到任何java IDE中,可以用来测试与Elasticsearch相关的代码。 使用 Elasticsearch 提供的框架可以进行一系列的测试。 在本章中,我们将详细讨论这些测试
- Unit 测试
- Integration 测试
- Randomized 测试
前提条件
要开始测试,我们需要将 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 类创建节点和索引,并且可以使用测试方法来执行测试。 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() | 这将返回当前在客户端节点上运行的客户端。 |
Randomized 测试
这个测试是用每一个可能的数据来测试用户的代码,这样以后任何类型的数据都不会失败。 随机数据是执行此测试的最佳选择。
生成随机数据
在这个测试中,Random 类由 RandomizedTest 提供的实例实例化,并提供了许多方法来获取不同类型的数据。
| 方法 | 返回值 |
|---|---|
| getRandom() | random 的实例 |
| randomBoolean() | 随机布尔值 |
| randomByte() | 随机字节 |
| randomShort() | 随机短整型数 |
| randomInt() | 随机整数 |
| randomLong() | 随机长整型数 |
| randomFloat() | 随机浮点数 |
| randomDouble() | 随机双精度数 |
| randomLocale() | 随机语言环境 |
| randomTimeZone() | 随机时区 |
| randomFrom() | 数组中的随机元素 |
断言
ElasticsearchAssertions 和 ElasticsearchGeoAssertions 类包含断言,用于在测试时执行一些常见检查。 例如,观察此处给出的代码
SearchResponse seearchResponse = client().prepareSearch();
assertHitCount(searchResponse, 6);
assertFirstHit(searchResponse, hasId("6"));
assertSearchHits(searchResponse, "1", "2", "3", "4",”5”,”6”);