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類創建節點和索引,並且在測試方法中可以用來執行測試。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() | 隨機類的實例 |
| 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”);
