この記事は ビジネスエンジニアリング株式会社(B-EN-G)アドベントカレンダー2023 の記事です。
きっかけ
開発作業をしていて、以下のような場面がありました。
- サーバーにタイムアウト時間の設定をしたが、本当にその時間でタイムアウトするかテストしたい。
- タイムアウト時の挙動をテストするために
504 gateway timeout
- 認証関連のプログラムを作成しているときに
401 unauthorized
や403 Forbidden
が返ってきた時のテストをしたい
これらをテストするには、呼び出した WebAPI の 応答時間 及び レスポンスの Http Status Code を気軽に変更したくなります。次のような要件を満たすツールが欲しいなぁと思いました。
- セットアップが簡単(
node
やVisual C++ 再頒布可能パッケージ
やDocker
など実行に必要な他の物がない) - WebAPI の 応答時間 及び レスポンスの Http Status Code を気軽に変更できる
- 「URL パラメータで指定できる」「設定ファイルを書き換えれば再起動なしで変更できる」など
- Windows で動けばよい
見つからなかったから作った!
上記の要件にあうツールを探したのですが、見つけられなかったので自分で作りました。
Java の有名なフレームワークである Spring Boot でベースを作成しています。
Spring Boot には GraalVM ネイティブイメージのサポート という機能があり、この機能を活用して、Windows での実行可能ファイル(exe)を作成しました。
これにより アプリを動かす PC に Java が入っていなくても動作させることができます。
入手方法/使い方
※ Windows 上での操作を想定しています。
入手 と はじめての実行
-
https://github.com/HiroshiKuboBeng/pingPong/releases/tag/v1.0.0 から
pingPong-vX.X.X-win-binary.zip
をダウンロード。(2023-12-04 現在最新版は v1.0.0) - ダウンロードした zip ファイルを展開
- 展開したファイル内の
startPingPongServer.bat
を実行 - ブラウザで
http://localhost:8888/ping
にアクセスして pong と表示されたら成功
レスポンスを変更する方法
GET
メソッドの呼び出しの場合は、クエリパラメータでレスポンスを操作できます。
- クエリパラメータ
delay_seconds=数値
を指定すると、指定された秒数分、待機してからレスポンスを返します - クエリパラメータ
response_status_code=数値
を指定すると、指定された Http Status Code のレスポンスを返します
c:\>@rem 3秒後に http status code 500 のレスポンスを返す例
c:\>curl -i "http://localhost:8888/ping?delay_seconds=3&response_status_code=500"
HTTP/1.1 500
Content-Type: text/plain;charset=UTF-8
Content-Length: 4
Date: Sun, 03 Dec 2023 20:33:03 GMT
Connection: close
pong
POST
PUT
PATCH
DELETE
メソッドの呼び出しの場合は、リクエストボディでレスポンスを操作できます。
c:\>curl -i -X POST -H "Content-Type: application/json" -d "{\"delay_seconds\" : 3 , \"response_status_code\" : 500}" "http://localhost:8888/ping"
HTTP/1.1 500
Content-Type: text/plain;charset=UTF-8
Content-Length: 4
Date: Mon, 04 Dec 2023 00:14:56 GMT
Connection: close
pong
その他、詳細は zip ファイル内の readme.md
をご覧ください。
カスタマイズ(サーバーが使用するポートを変更する)
zip ファイルを展開したフォルダ内にある application.yml
の server.port
の数字を変更して再起動してください。
まとめ
WebAPI の 応答時間 及び レスポンスの Http Status Code を気軽に変更できるツールを作りました。
これを活用することにより、WebAPI連携のレアケースのテストがしやすくなります。
よろしければ、ご活用いただき、フィードバックをお寄せいただけると嬉しいです。
そして、やっぱり、もっと高機能な類似のアプリが世の中にはあるハズだ。。。あるなら教えて欲しい。