WireMock を調査してみた 概要編 その１

# WireMock とは？
Web サービスをスタブ、モック化するライブラリです。
モックサービスが色々有る中での導入メリットは以下
**①期待値の記述から、応答条件まで一つの Json ファイルで完結できる。
②初期搭載されている Swagger で画面上からどんなモックがあるかの確認等が可能**

※ Swagger とは？
とりあえず[こちら](https://qiita.com/gcyata/items/342073fa7607fd4082bd)だけ読んでおけばなんとなくどういうものかわかるかと
簡単に言えば画面上で用意された API が見れる的なやつです。

# 導入方法
**環境**
・Mac OS 10.14.5

Homebrew が対応しているので下記コマンドでOK

```
$ brew install wiremock-standalone
```
ちなみに Docker を使う場合は中々面白そうな Image があるのでそれを使ってみるのもイイね！
・[holomekc/wiremock-gui](https://hub.docker.com/r/holomekc/wiremock-gui)
wiremock を GUI で操作、作成することができるみたい

インストールが終わったら起動してみましょう。ここも homebrew にお任せ

```
$ wiremock start
```
<img width="578" alt="スクリーンショット 2019-07-16 23.40.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269525/4bb5be25-24cf-fe46-4fdb-445e7869ceb3.png">

# 実践

さて、導入メリットの②の画面を早速開いてみましょう。以下をブラウザに。
http://localhost:8080/__admin/docs

<img width="1440" alt="スクリーンショット 2019-07-16 23.43.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269525/f74f82ee-0f53-4b8a-6838-13dd3d5a5b37.png">

下の Swagger UI をクリック

<img width="1440" alt="スクリーンショット 2019-07-16 23.44.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269525/086d8d49-e679-dc5a-9a93-456e0af7b67a.png">

こんなふうに、最初からある程度の API が用意されています。
種類はそこそこあり、設定値を一覧できたり削除できたりと使い勝手は悪くなさそう。
具体的な紹介はまたの機会に。


兎にも角にもとりあえず Mock を作ってみましょう。
上の図中段の、 `POST /__admin/mappings` をクリック
するとサンプルが
<img width="1406" alt="スクリーンショット 2019-07-16 23.49.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269525/6dc5280c-6cd2-c960-7661-65cb13e45d29.png">

とりあえずこれを使わせてもらいましょう。
画面右上の `Try it out` をクリック

<img width="1440" alt="スクリーンショット 2019-07-16 23.50.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269525/b13c5657-d992-b741-1538-98cb312c352f.png">

先程のサンプルが中段の枠に記載されていますね。
これはそのままで下段の `Execute` をクリック
<img width="1440" alt="スクリーンショット 2019-07-16 23.51.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269525/27eb3ca4-bb93-e40b-8f8b-63221a9c8a3f.png">

実際に投げた curl とその応答値があります。
成功したようなので確認してみましょう。
上に画面をスクロールして今度は `GET /__admin/mappings` をクリック
これは登録されている Mock を取得する API です。

<img width="1440" alt="スクリーンショット 2019-07-16 23.53.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269525/051c5e90-677c-f63c-7169-38c21110c044.png">

同様に `Try it out` からの `Execute` 
<img width="1440" alt="スクリーンショット 2019-07-16 23.54.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269525/45b0db7e-91a4-1dd4-96d1-105743ef7d3f.png">

先程 POST した内容が登録されていますね。
試しに呼び出してみましょう。
http://localhost:8080/some/thing

<img width="1440" alt="スクリーンショット 2019-07-16 23.56.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269525/dd80e23d-82d1-c866-6d9a-9f87230f362c.png">

先程 body に設定した文字列が返ってきているのを確認できました。

# 〆
今回はざっくり概要を触りました。
ちなみにですが勿論今回後半でやった Mock の登録や参照は curl などでターミナル等から実行可能です。
実際には期待値も応答条件も詳しく記載することができますが、それはまた今度
サッとテストするには中々手軽ですので良い感じではないでしょうか。
ではまた次回

## 参考文献
・公式ドキュメント
[Wiremock](http://wiremock.org/docs/)
・導入手順
[WireMockサーバーの導入手順](https://qiita.com/Junichi_M_/items/7fe4c25ef4b82ecb0d16)
・使い方 簡単でかつわかりやすい
[WireMockをスタンドアローンで使うときの基本的なメモ](https://qiita.com/rubytomato@github/items/c0f4f8f882c2069d91f0)