Yamlでレスポンスを定義できるHTTPモックツール、yamoc

HTTPサーバーを模擬的に起動し、HTTP通信するソフトウェアのテストを補助するスタンドアロンのツールを作成した。

(動作イメージ)

f:id:packpak:20200222151117p:plain

ファイルパスとレスポンス定義が書かれたyamlを読み込み、一致した条件に対して固定のレスポンスを返す。

port: 8888

paths:
  # matching GET /hello
  - path: /hello
    methods: get
    response:
      status: 200
      bodytext: hello
      headers:
        Content-Type: text/plain

コンセプト

  • ハリボテ、軽量、シンプル
  • yamlファイル1つで状況が完全再現される。
  • レスポンスは単純に固定値を返す。レスポンスを変えたければ、yamlファイルを変更してプロセスを起動しなおす。
  • 手元で動作確認する程度の用途を想定。NginxやらIISが並ぶ環境に代理として立てるときの挙動は保証しない。特にメモリ消費やバッファリングなどを考慮していない。

使い方・入手方法

[1] ツールをビルドするため、.NET Core SDKをインストールする。また、動作する環境には少なくとも .NET Core Runtimeが必要。

https://dotnet.microsoft.com/download

(※Windows限定だが、Visual Studioに.csコードすべて入れてNugetにパッケージaddすれば、.NET Frameworkをランタイムとするexeもビルドできる。ただし自己責任)

[2] Githubに公開しているソースコードを入手する

Github https://github.com/pakuyuya/yamock-cs

[3] Readme.mdに従いビルド・yamlファイルを作成して実行する

わかっているバグ、問題と今後のfeture

  • バグ

    • 同時アクセスすると、ログがかぶってめちゃくちゃ見にくくなる。ロギングを別スレッドでキューイング/ディスパッチする実装に変えたい
  • feture

    • POST時などに設定されるリクエストボディ中のFormパラメータに対してのフィルタ条件の追加
    • フィルタ条件への not equal 演算子追加。less than, grater than は実装が面倒なのでやらない。
    • Proxyの追加。実装がめちゃくちゃ面倒だが、個人的に勉強したい
  • 実装上の問題

    • 自動テストがほぼ未実装
      • 実装が全く整理されていない。現状、2,3のサブパッケージに分かれているが密結合で単独でテストできない。
      • Httpコンポーネントに直接依存したせいで、自動テストが非常に面倒になってしまった。テストコードをまともに書いていないので、いつか改善したい。