Elasticsearch 简明教程

Elasticsearch - Testing

Elasticsearch 提供了一个 jar 文件,可以将其添加到任何 java IDE,并可以用来测试与 Elasticsearch 相关的代码。使用 Elasticsearch 提供的框架可以执行一系列测试。在本章中,我们将详细讨论这些测试 −

  1. Unit testing

  2. Integration testing

  3. 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”);