LoginSignup
5
0

More than 1 year has passed since last update.

初めに

負荷試験の構築を検討しており、その際にmockサーバーが必要なので、その方法を検討してました。
そんな中、WireMock を紹介してもらったので、ちょっとだけ触ってみた。

WireMock とは

名前でも分かる通り、mockサーバーでHTTPベースのAPIのシミュレータになります。

準備

Dockerでの使い方を紹介します。

ディレクトリ構成

ポイントとしては stubs ディレクトリを作ってその中に __files, mappings を作ることです。

./
├── docker-compose.yml
└── stubs
    ├── __files
    │       └── hello.json
    └── mappings
        └── hello.json

docker の設定

次に docker-compose の設定になります。

DockerHubWireMock で検索すると色々出てくるのですが、こいつが公式みたいです。
(さくっと動かしたかったのでalpineを選びました)

あとは、stubs をコンテナにマウントすれば OK です。

docker-compose.yaml
version: '3'

services:
  mockserver:
    # https://hub.docker.com/r/wiremock/wiremock/tags
    image: wiremock/wiremock:2.32.0-alpine
    ports:
      - 8080:8080
    volumes:
      - ./stubs:/home/wiremock

stab の設定

  • __files: ここではレスポンスで返すファイルを設定します。
stubs/__files/hello.json
{
    "message": "Hello World !"
}
  • mappings: ここではリクエストと、レスポンスのファイルを設定するものになります。
stubs/mappings/hello.json
{
    "request": {
        "method": "GET",
        "url": "/hello"
    },
    "response": {
        "status": 200,
        "bodyFileName": "hello.json"
    }
}

あと、試してないのですが、api で設定を登録することもできるみたいです

使ってみる

local で試す場合はこんな感じです。

❯ docker compose up -d
[+] Running 2/2
 ⠿ Network wiremock-playground_default         Created                                                                                                     0.3s
 ⠿ Container wiremock-playground_mockserver_1  Started                                                                                                     1.1s
❯ curl http://localhost:8080/hello
{
    "message": "Hello World !"
}

わざと間違えてみるとこんな結果が返ってきます(親切)

❯ curl http://localhost:8080/hellooooooo

                                               Request was not matched
                                               =======================

-----------------------------------------------------------------------------------------------------------------------
| Closest stub                                             | Request                                                  |
-----------------------------------------------------------------------------------------------------------------------
                                                           |
GET                                                        | GET
/hello                                                     | /hellooooooo                                        <<<<< URL does not match
                                                           |
                                                           |
--------------------------------------------------------------------------------------------------

その他

実際に使う場合、ラクマは外部連携が結構多いので、ある程度ディレクトリを分けたかったりします。なので、各ディレクトリに v1 を追加してみました。設定はこんな感じです。

.
├── docker-compose.yml
└── stubs
    ├── __files
    │   ├── hello.json
    │   └── v1
    │       └── hello.json
    └── mappings
        ├── hello.json
        └── v1
            └── hello.json
stubs/__files/v1/hello.json
{
    "message": "Hello V1 !"
}
stubs/mappings/v1/hello.json
{
    "request": {
        "method": "GET",
        "url": "/v1/hello"
    },
    "response": {
        "status": 200,
        "bodyFileName": "v1/hello.json"
    }
}

動作確認をすると

❯ curl http://localhost:8080/v1/hello
{
    "message": "Hello V1 !"
}

動きました!

所感

json の設定のみで完結するので比較的使いやすいのではないかと思います。負荷試験で使用する際は、きちんとコンテナ化で利用もできそうです。また、local や dev 環境でも使えるんじゃないかと勝手に思っています。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0