1.概要

この記事では、https://hoverfly.readthedocs.io/en/latest/#[Hoverfly]Javaライブラリーを見ていきます。これは、実際のAPIスタブ/シミュレーションを作成する簡単な方法を提供します。


2 Mavenの依存関係

Hoverflyを使用するには、単一のMaven依存関係を追加する必要があります。

<dependency>
    <groupId>io.specto</groupId>
    <artifactId>hoverfly-java</artifactId>
    <version>0.8.1</version>
</dependency>

最新版はhttps://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22io.specto%22%20AND%20a%3A%22hoverfly-java%22[here]にあります。

3. APIのシミュレーション

まず、Hoverflyをシミュレーションモードで実行するように設定します。シミュレーションを定義する最も簡単な方法はDSLを使用することです。


HoverflyRule

インスタンスをインスタンス化することによる簡単な例から始めましょう:

public static final HoverflyRule rule
  = HoverflyRule.inSimulationMode(dsl(
    service("http://www.baeldung.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<String> courseResponse
  = restTemplate.getForEntity("http://www.baeldung.com/api/courses/1", String.class);

assertEquals(HttpStatus.OK, courseResponse.getStatusCode());
assertEquals("{\"id\":\"1\",\"name\":\"HCI\"}", courseResponse.getBody());

HTTPリクエストを送信するためにSpring Webモジュールの

RestTemplate

クラスインスタンスを使用しました。

5.遅延を追加する

特定のHTTPメソッド、または特定のAPI呼び出しに対して、遅延をグローバルに追加できます。

以下はPOSTメソッドを使ったリクエストのコード設定遅延の例です。

SimulationSource.dsl(
  service("http://www.baeldung.com")
    .post("/api/courses")
    .willReturn(success())
    .andDelay(3, TimeUnit.SECONDS)
    .forMethod("POST")
)

6.リクエストマッチャー


HoverflyMatchers

ファクトリクラスは、URLの

exactMatch



globMatch

など、いくつかのマッチャーを提供します。 HTTPボディ用に提供されています。

HTTPボディに対しては、

JSON/XML

完全一致および

JSONPath/XPath

一致が提供されます。

デフォルトでは、

exactMatch

matcherは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("<student><id>2</id><name>John</name></student>"))
    .willReturn(success())

    .put("/api/student/2")
    .body(matchesXPath("/student/name"))
    .willReturn(success()));
)

この例では、

matches

メソッドはワイルドカード検索を許可する

globMatch

を使用してURLをチェックします。

それから

startsWith

はリクエストパスが ”


_/


api

/student

“で始まっているかどうかをチェックします。私たちは

any_

matcherを使って、ページクエリパラメータ内のすべての可能な値を許可しました。


equalsToJson

マッチャーはボディペイロードがここで与えられた正確なJSONと一致することを確認します。特定のJSONパスにある要素をチェックするための

matchesJsonPath

メソッドが存在するかどうか。

同様に、

equalsToXml

はリクエストボディで与えられたXMLをここで与えられたものと一致させます。

matchesXPath

は、本体とXPath式を照合します。

7.まとめ

このクイックチュートリアルでは、Hoverfly Javaライブラリの使用法について説明しました。

HTTPサービスのシミュレーション、エンドポイントの設定、遅延の追加、リクエストマッチャーの使用のためのDSLについて調べました。また、JUnitを使用してこれらのサービスをテストすることも検討しました。

いつものように、コードスニペットはいつものようにhttps://github.com/eugenp/tutorials/tree/master/libraries[over on GitHub]にあります。