0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Fiddler ClassicのAutoResponderでレスポンスを遅延させたり500エラーを返す方法

0
Posted at

はじめに

Webアプリのテストをしていると、「APIのレスポンスが遅いときにローディングがちゃんと出るか」「サーバーが500を返したときにエラー画面が出るか」を確認したくなることがあります。

サーバー側を実際に止めたり遅くしたりするのは大変ですが、Fiddler Classic の AutoResponder 機能を使えば、クライアントとサーバーの間に入って、特定のリクエストに対してだけレスポンスを遅延させたりエラーを返したりできます。

この記事では、

  • 特定のAPIのレスポンスを任意の秒数だけ遅延させる
  • 特定のAPIに対してHTTP 500などのエラーを返させる

の2つを、実際にハマったポイントも含めてまとめます。

環境

  • Fiddler Classic(Windows)
  • 対象は https:// のWebアプリ

事前準備:HTTPSの復号設定

対象が https:// の場合、Fiddler が通信の中身を見られるようにHTTPS復号を有効にしておく必要があります。これをやらないと、HTTPSリクエストにルールがマッチしません。

  1. Tools → Options → HTTPS タブを開く
  2. Capture HTTPS CONNECTsDecrypt HTTPS traffic の両方にチェック
  3. 証明書のインストールを求められたら許可する(検証用のローカル証明書)
  4. OKで閉じる

① レスポンスを遅延させる

AutoResponderの設定

  1. 右ペインの AutoResponder タブを開く
  2. 上部の以下にチェックを入れる
    • Enable rules(ルールを有効化)
    • Unmatched requests passthrough(ルールに合わない通信はそのまま通す。これを忘れると関係ない通信まで止まる)
    • Enable Latency(遅延を有効化。*delay: を使うならこれが必須)
  3. Add Rule を押す
  4. Rule Editor の上段(マッチ条件)に対象URLにマッチする正規表現を入力する
regex:(?i).*example\.com/api/1\.0/system/functions/.*
  1. 下段(アクション)に遅延時間をミリ秒で指定する
*delay:10000

(上記は10秒の例。3秒なら *delay:3000

  1. Save を押す

マッチ条件の正規表現について

URLの末尾についている ?_=1782442145194 のようなクエリパラメータは、キャッシュ回避用のタイムスタンプで毎回変わります。そのため、マッチ条件には末尾の .* を入れてクエリ部分を吸収させ、パス部分だけを指定するのがポイントです。

(?i) は大文字小文字を無視する指定です。

② 500エラーなどを返させる

レスポンス遅延と同じ要領で、アクション欄を書き換えるだけです。

マッチ条件(上段)はそのまま使い、アクション欄(下段)を次のように変えます。

500 Internal Server Error を返す場合:

*status:500

503 Service Unavailable の場合:

*status:503

404 Not Found の場合:

*status:404

書き換えたら Save を押せば反映されます。アプリのエラーハンドリングやエラー画面の表示確認に便利です。

おまけ:接続そのものを失敗させる

ステータスすら返さず、ネットワーク断やタイムアウトを再現したい場合は次のアクションが使えます。

接続を即座にリセット(切断)する:

*drop

応答せず放置してタイムアウトさせたい場合は、極端に長い遅延を入れる:

*delay:99999999

ハマったポイント(重要)

1. 日本語キーボードでバックスラッシュが全角になる

正規表現のドットのエスケープ(\.)を入力するとき、日本語キーボードだとバックスラッシュキーが**全角の円記号「¥」**を出してしまうことがあります。

# NG(全角¥が混入している)
regex:(?i).*stg¥.lmr-map¥.jp/...

# OK(半角バックスラッシュ)
regex:(?i).*stg\.lmr-map\.jp/...

全角が混じると正規表現として正しく解釈されず、マッチしません。見分けづらいので、不安なときはドットのエスケープを使わない書き方にすると安全です。.(任意の1文字)はこの用途では実害がほぼないので、エスケープなしでも問題なく動きます。

regex:(?i).*stg.lmr-map.jp/admin/api/1.0/system/functions/.*

2. Enable Latency のチェックを忘れると遅延が効かない

*delay: は AutoResponder の Enable Latency がオンになっていて初めて機能します。ルール自体がマッチしていても、ここがオフだと遅延が無視されて素通りします。

3. *delay:*status: ではターゲットマークが付かないことがある

AutoResponder でレスポンスを完全に差し替えるルールを作ると、セッション一覧の行頭にターゲットマーク(◎印)が付きます。しかし *delay: は「通信をそのままサーバーへ通しつつ遅延だけ加える」処理(passthrough に近い扱い)のため、◎マークが付かないことがあります

そのため「マークが付かない=マッチしていない」と判断するのは誤りです。効いているかどうかは Fiddler のアイコンではなく、ブラウザの開発者ツール(Networkタブ)の「時間」やステータスで確認するのが確実です。

動作確認の方法

  1. ブラウザの開発者ツールを開き、Networkタブを表示
  2. 対象のAPIを叩く
  3. 該当リクエストの「時間」が指定した遅延秒数になっているか、ステータスが指定したコードになっているかを確認

実際に *delay:100000(100秒)を指定して、開発者ツールの時間が約1.7分になれば、遅延が正しく効いている証拠です。

おわりに

Fiddler Classic の AutoResponder を使えば、サーバーに手を入れずにレスポンスの遅延やエラーをクライアント側でシミュレートできます。フロントエンドのローディング表示やエラーハンドリングのテストに重宝します。

ポイントは、

  • HTTPS復号と Enable rules / Unmatched requests passthrough / Enable Latency のチェックを忘れない
  • 正規表現の全角バックスラッシュに注意
  • 効いているかは Fiddler のマークではなく開発者ツールで確認する

の3点です。同じようにハマっている方の参考になれば幸いです。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?