Elasticsearch-testing
Elasticsearch-テスト
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();
createIndexを指定したesSetup.execute()関数はインデックスを作成します。設定、タイプ、データを指定する必要があります。
単体テスト
ユニットテストは、JUnitとElasticsearchテストフレームワークを使用して実行されます。 ノードとインデックスはElasticsearchクラスを使用して作成でき、テストメソッドではテストの実行に使用できます。 このテストには、ESTestCaseクラスとESTokenStreamTestCaseクラスが使用されます。
統合テスト
統合テストでは、クラスター内の複数のノードを使用します。 ESIntegTestCaseクラスは、このテストに使用されます。 テストケースの準備作業を簡単にするさまざまな方法があります。
| S.No | Method & Description |
|---|---|
| 1 |
クラスター内のすべてのインデックスが更新されます |
| 2 |
ensureGreen() 緑のヘルスクラスター状態を保証します |
| 3 |
ensureYellow() 黄色のヘルスクラスター状態を保証します |
| 4 |
createIndex(name) このメソッドに渡された名前でインデックスを作成します |
| 5 |
flush() クラスター内のすべてのインデックスがフラッシュされます |
| 6 |
flushAndRefresh() flush()およびrefresh() |
| 7 |
indexExists(name) 指定されたインデックスの存在を確認します |
| 8 |
clusterService() クラスタサービスのJavaクラスを返します |
| 9 |
cluster() テストクラスタクラスを返します |
クラスターメソッドのテスト
| S.No | Method & Description |
|---|---|
| 1 |
ensureAtLeastNumNodes(n) クラスター内のノードの最小数が指定された数以上であることを確認します。 |
| 2 |
ensureAtMostNumNodes(n) クラスター内の最大ノード数が指定された数以下になるようにします。 |
| 3 |
stopRandomNode() クラスター内のランダムノードを停止するには |
| 4 |
stopCurrentMasterNode() マスターノードを停止するには |
| 5 |
stopRandomNonMaster() マスターノードではないクラスター内のランダムノードを停止します。 |
| 6 |
buildNode() 新しいノードを作成する |
| 7 |
startNode(settings) 新しいノードを開始します |
| 8 |
nodeSettings() ノード設定を変更するには、このメソッドをオーバーライドします。 |
クライアントへのアクセス
クライアントは、クラスター内の異なるノードにアクセスし、何らかのアクションを実行するために使用されます。 ESIntegTestCase.client()メソッドは、ランダムクライアントを取得するために使用されます。 Elasticsearchは、クライアントにアクセスする他のメソッドも提供し、これらのメソッドにはESIntegTestCase.internalCluster()メソッドを使用してアクセスできます。
| S.No | Method & Description |
|---|---|
| 1 |
iterator() これにより、利用可能なすべてのクライアントにアクセスできます。 |
| 2 |
masterClient() これにより、マスターノードと通信しているクライアントが返されます。 |
| 3 |
nonMasterClient() これにより、マスターノードと通信していないクライアントが返されます。 |
| 4 |
clientNodeClient() これは、クライアントノードで現在稼働しているクライアントを返します。 |
無作為化試験
このテストは、すべての可能なデータでユーザーのコードをテストするために使用されるため、将来どのタイプのデータでもエラーが発生することはありません。 このテストを実行するには、ランダムデータが最適なオプションです。
ランダムデータの生成
このテストでは、Randomizedクラスは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 |
アサーション
ElasticsearchAssertionsおよびElasticsearchGeoAssertionsクラスには、テスト時に一般的なチェックを実行するために使用されるアサーションが含まれています。 たとえば、ここで与えられたコードを観察します-
SearchResponse seearchResponse = client().prepareSearch();
assertHitCount(searchResponse, 6);
assertFirstHit(searchResponse, hasId("6"));
assertSearchHits(searchResponse, "1", "2", "3", "4",”5”,”6”);