Elasticsearch 简明教程
Elasticsearch - Testing
Elasticsearch 提供了一个 jar 文件,可以将其添加到任何 java IDE,并可以用来测试与 Elasticsearch 相关的代码。使用 Elasticsearch 提供的框架可以执行一系列测试。在本章中,我们将详细讨论这些测试 −
-
Unit testing
-
Integration testing
-
Randomized testing
Prerequisites
要开始测试,你需要将 Elasticsearch testing 依赖项添加到你的程序中。你可以为此目的使用 maven,并在 pom.xml 中添加以下内容。
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.1.0</version>
</dependency>
EsSetup 已被初始化为启动和停止 Elasticsearch 节点,并创建索引。
EsSetup esSetup = new EsSetup();
带有 createIndex 的 esSetup.execute() 函数将创建索引,你需要指定设置、类型和数据。
Unit Testing
单元测试是使用 JUnit 和 Elasticsearch 测试框架进行的。可以使用 Elasticsearch 类创建节点和索引,并且可以在测试方法中使用它们来执行测试。ESTestCase 和 ESTokenStreamTestCase 类用于此测试。
Integration Testing
集成测试在集群中使用多个节点。ESIntegTestCase 类用于此测试。有很多方法可以简化测试用例的准备工作。
S.No |
Method & Description |
1 |
refresh() 刷新群集中的所有索引 |
2 |
ensureGreen() 确保一个绿色的群集运行状态 |
3 |
ensureYellow() 确保黄色健康群集状态 |
4 |
createIndex(name) 使用传递到该方法的名称创建索引 |
5 |
flush() 群集中的所有索引都已刷新 |
6 |
flushAndRefresh() flush() and refresh() |
7 |
indexExists(name) 验证指定索引的存在性 |
8 |
clusterService() 返回群集服务 Java 类 |
9 |
cluster() 返回测试群集类 |
Test Cluster Methods
S.No |
Method & Description |
1 |
ensureAtLeastNumNodes(n) 确保群集中启动的最小节点数大于或等于指定数字。 |
2 |
ensureAtMostNumNodes(n) 确保群集中启动的最大节点数小于或等于指定数字。 |
3 |
stopRandomNode() 在群集中停止一个随机节点 |
4 |
stopCurrentMasterNode() 停止主节点 |
5 |
stopRandomNonMaster() 停止群集中非主节点的随机节点。 |
6 |
buildNode() Create a new node |
7 |
startNode(settings) Start a new node |
8 |
nodeSettings() 覆盖该方法以更改节点设置。 |
Accessing Clients
使用一个客户端访问群集中的不同节点并执行某些操作。使用 ESIntegTestCase.client() 方法获取随机客户端。Elasticsearch 还提供其他方法访问客户端,而这些方法可以通过 ESIntegTestCase.internalCluster() 方法访问。
S.No |
Method & Description |
1 |
iterator() 它有助于访问所有可用客户端。 |
2 |
masterClient() 它返回与主节点通信的客户端。 |
3 |
nonMasterClient() 它返回不与主节点通信的客户端。 |
4 |
clientNodeClient() 它返回当前在客户端节点上启用的客户端。 |
Randomized Testing
此项测试用于使用所有可能数据测试用户的代码,以便未来使用任何类型的数据时不会出现故障。随机数据是执行此类测试的最佳选项。
Generating Random Data
在此项测试中,Random 类由 RandomizedTest 提供的实例实例化,并提供多种方法来获取不同类型的数据。
Method |
Return value |
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 |
Assertions
ElasticsearchAssertions 和 ElasticsearchGeoAssertions 类包含断言,这些断言用于在测试时执行一些常见检查。例如,观察此处给出的代码 −
SearchResponse seearchResponse = client().prepareSearch();
assertHitCount(searchResponse, 6);
assertFirstHit(searchResponse, hasId("6"));
assertSearchHits(searchResponse, "1", "2", "3", "4",”5”,”6”);