JavaでのHoverflyの概要
1. 概要
この記事では、Hoverfly Javaライブラリを見ていきます。これは、実際のAPIスタブ/シミュレーションを作成する簡単な方法を提供します。
2. Mavenの依存関係
3. APIのシミュレーション
まず、シミュレーションモードで実行するようにHoverflyを構成します。 The simplest way to define a simulation is by using a DSL.
HoverflyRuleインスタンスをインスタンス化することにより、簡単な例から始めましょう。
public static final HoverflyRule rule
= HoverflyRule.inSimulationMode(dsl(
service("http://www.example.com")
.get("/api/courses/1")
.willReturn(success().body(
jsonWithSingleQuotes("{'id':'1','name':'HCI'}"))));
SimulationSourceクラスは、API定義を開始するためのdslメソッドを提供します。 また、HoverflyDSLのserviceメソッドを使用すると、エンドポイントと関連するリクエストパスを定義できます。
次に、willReturnを呼び出して、どの応答を返したいかを示します。 また、ResponseBuilderのsuccessメソッドを使用して、応答ステータスと本文を設定しました。
4. テストにJUnitを使用する
スタブAPIは、JUnitを使用して簡単にテストできます。
HTTPリクエストを送信する簡単なテストを作成し、それがエンドポイントに到達するかどうかを確認しましょう。
responseEntity courseResponse
= restTemplate.getForEntity("http://www.example.com/api/courses/1", String.class);
assertEquals(HttpStatus.OK, courseResponse.getStatusCode());
assertEquals("{\"id\":\"1\",\"name\":\"HCI\"}", courseResponse.getBody());
Spring WebモジュールのRestTemplateクラスインスタンスを使用してHTTPリクエストを送信しました。
5. 遅延を追加する
遅延は、特定のHTTPメソッド、または特定のAPI呼び出しに対してグローバルに追加できます。
POSTメソッドを使用したリクエストのコード設定遅延の例を次に示します。
SimulationSource.dsl(
service("http://www.example.com")
.post("/api/courses")
.willReturn(success())
.andDelay(3, TimeUnit.SECONDS)
.forMethod("POST")
)
6. マッチャーのリクエスト
HoverflyMatchersファクトリクラスは、URLのexactMatchとglobMatchを含むいくつかのマッチャーを提供します。 HTTPボディについては提供します。
HTTPボディの場合、JSON/XMLの完全一致とJSONPath/XPathの一致を提供します。
デフォルトでは、exactMatchマッチャーはURLと本文の両方のマッチングに使用されます。
さまざまなマッチャーの使用例を次に示します。
SimulationSource.dsl(
service(matches("www.*dung.com"))
.get(startsWith("/api/student"))
.queryParam("page", any())
.willReturn(success())
.post(equalsTo("/api/student"))
.body(equalsToJson(jsonWithSingleQuotes("{'id':'1','name':'Joe'}")))
.willReturn(success())
.put("/api/student/1")
.body(matchesJsonPath("$.name"))
.willReturn(success())
.post("/api/student")
.body(equalsToXml("2 John "))
.willReturn(success())
.put("/api/student/2")
.body(matchesXPath("/student/name"))
.willReturn(success()));
)
この例では、matchesメソッドはワイルドカード検索を可能にするglobMatchでURLをチェックします。
次に、startsWithは、要求パスが「/api_ / student_」で始まるかどうかを確認します。 anyマッチャーを使用して、ページクエリパラメーターで可能なすべての値を許可しました。
equalsToJsonマッチャーは、本体のペイロードがここで指定された正確なJSONと一致することを確認します。 特定のJSONパスの要素をチェックするためのmatchesJsonPathメソッドが存在するかどうか。
同様に、equalsToXmlは、リクエスト本文で指定されたXMLをここで指定されたXMLと一致させます。 matchesXPathは、本体をXPath式と一致させます。
7. 結論
このクイックチュートリアルでは、Hoverfly Javaライブラリの使用方法について説明しました。 HTTPサービスのシミュレーション、エンドポイントを構成するためのDSL、遅延の追加、リクエストマッチャーの使用について検討しました。 また、JUnitを使用してこれらのサービスをテストすることも検討しました。
いつものように、コードスニペットはいつものようにover on GitHubで見つけることができます。