ちょっと話題の記事

JSON/YAMLで定義可能なHTTPモックサーバーMmockを触ってみる(セットアップ、シンプルなモックの定義、ブラウザでのアクセスログおよびモック定義一覧の確認まで)

Go言語で書かれたHTTPモックサーバー、Mmockをご紹介します。 Mmockではシナリオの定義やランダムなサーバーエラーのシミュレート、ブラウザ経由でのモック定義の確認、編集やアクセスログの参照が可能です。
2018.07.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

外部サービスとの連携などのテストを行う際、テスト環境に制約があったり処理に時間がかかるなどの理由でHTTPモックサーバーが欲しくなることがあります。

本記事ではGo言語で書かれたHTTPモックサーバー、Mmockをご紹介します。

Mmock

Mmock | GitHub

MmockはGo言語で書かれたHTTPモックサーバーです。

README.mdでは、主な特徴として以下があげられています。

  • JSONもしくはYAMLでのモック定義
  • レスポンスにフェイク用のデータ or リクエストのデータを利用できる
  • パラメータを含んだパスを定義可能
  • ワイルドカードによるマッチング
  • メソッド、URL、クエリパラメータ、ヘッダ、クッキー、リクエストボディでリクエストをマッチング
  • リスタートせずにモックを編集可能
  • ブラウザでのリクエストおよびログの参照
  • シナリオに沿ったステートフルな振る舞い
  • 部分的なプロキシモードの適用
  • リアルタイムに全てのログを取得するエンドポイントの実装
  • 優先度によるマッチング
  • サーバーエラーをシミュレートするためのcrazy mode
  • Open API Specificationに沿ったスキーマをホスト
  • 軽い、移行しやすい
  • インストール不要

太字は個人的にグッときた特徴をピックアップしたものです。)

やってみる

本記事では、起動するための準備とシンプルなモックを一つ定義し、アクセスログと定義されたマッピングをブラウザから確認するところまでやってみます。

検証環境

  • go version go1.9.4 linux/amd64

セットアップ

$ go get github.com/jmartin82/mmock
$ mkdir -p mmock/config
$ mmock -config-path mmock/config

起動時に設定ファイルを配置するディレクトリを指定します。

デフォルトでは、以下のポートでMmockが起動します。

  • HTTP:ポート8083
  • HTTPS:ポート8084
  • コンソール:8082
2018/07/26 08:46:28 Getting external IP
2018/07/26 08:46:28 HTTP Server running at 172.31.19.16:8083
2018/07/26 08:46:28 HTTPS Server running at 172.31.19.16:8084
2018/07/26 08:46:28 Console running at 172.31.19.16:8082
2018/07/26 08:46:28 File monitor started
2018/07/26 08:46:28 TLS certificates not found, impossible to start the TLS server.

ブラウザから起動後サーバの8082ポートにアクセスするとコンソールが立ち上がっていることが確認できます。

モックの定義

$ vi mmock/config/sample.json
{"description": "Test for mmock!",
    "request": {
        "method": "GET",
        "path": "/test"
    },
    "response": {
        "body": "mmock response",
        "statusCode": 200
    }
}

GETで/testにアクセスするとステータスコード200が返却されるように定義してみます。

設定ファイルは起動中のMmockに自動的にロードされます。

2018/07/26 08:58:08 Loading config file: /home/ec2-user/mmock/config/sample.json

curlで定義したエンドポイントにアクセスします。

$ curl -v 172.31.19.16:8083/test
*   Trying 172.31.19.16...
* TCP_NODELAY set
* Connected to 172.31.19.16 (172.31.19.16) port 8083 (#0)
> GET /test HTTP/1.1
> Host: 172.31.19.16:8083
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 26 Jul 2018 09:00:51 GMT
< Content-Length: 14
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host 172.31.19.16 left intact
mmock response

定義したステータスコードおよびレスポンスが返却されました。

コンソールからアクセスログとモックの定義をみてみる

コンソールからアクセスログとマッピングの定義を確認できます。 また、マッピングの定義はここから直接編集することもできます。

アクセスログの確認

Requestsからリクエスト、レスポンスの詳細が確認できます。

マッピングの確認

Mappingsから定義されているモックの確認ができます。

Viewから定義の詳細を確認可能です。

Editから定義を直接編集することも可能です。編集後の設定はリアルタイムで起動中のMmockに反映されます。

まとめ

JSON/YAMLで定義可能なHTTPモックサーバーMmockを触ってみました。 起動から簡単なモックの定義まで非常に簡単に行うことができました。 また、ドキュメントを見る限りシナリオやサーバーエラーのシミュレートなど高度で便利そうな機能も色々揃っているようです。

ブラウザ経由でモックの定義を直接確認したり、リアルタイムでマッピング定義の編集をできるところも非常に有用な機能に思います。

モックサーバーについての記事一覧はこちらをご覧ください。

私からは以上です。