技術系TIPS
PR

【負荷試験】WireMockとPHPでミリ秒の遅延設定をする

saratogax
記事内に商品プロモーションを含む場合があります

負荷試験を行う際に、外部のサイトへ接続する部分をモック化することが一般的ですよね。

モックといっても、オリジナルの簡易モックサイトを構築したり、モックライブラリなど様々。

今回は負荷試験の対象に Wiremock に接続するケースがありました。

純粋に Wiremock のエンドポイントを叩くだけでは瞬時にレスポンスが返ってしまうので、外部サイトに接続する際に想定されるレイテンシを仕込んでおきたいものです。

そこで、Wiremock のレスポンスを遅延させる方法を調べてみたので共有します。

WireMockの遅延設定

WireMock で遅延を設定するには、各 URL パスのマッピングファイルに「fixedDelayMilliseconds」を定義するだけ。

以下のように、「mappings/test.json」という WireMock の設定ファイルに「/wiremock/test」のパスが設定されているとします。

ここに 1 秒の遅延レスポンスを追加するには、response の中に fixedDelayMilliseconds の項目を追加すれば OK。

簡単ですよね。

// mappings/test.json
{
    "request": {
        "urlPath": "/wiremock/test",
        "method": "POST",
        "bodyPatterns" : [
            {
                "matches" : "(.*)"
            }
        ]
    },
    "response": {
        "body": "OK",
        "status": 200,
        "headers": {
            "Content-Type": "text/plain"
        },
        "fixedDelayMilliseconds": 1000
    }
}

ミリ秒での指定が可能なので、より現実に近い数字が設定できますね。

PHPの遅延設定

PHP の関数では sleep が有名ですが、残念ながら秒単位のスリープしか仕込めません。

ミリ秒の遅延を実現するには usleep 関数を使います。

引数にマイクロ秒をとるので若干の注意が必要です。

・1 秒
・1000 ミリ秒
・1000000 マイクロ秒

例えば 200ms の遅延を入れたいなら、以下のように定義します。

usleep(200 * 1000);

まとめ

モックツールの遅延設定について紹介してきました。

以前 Locust についても書きましたが、どのツールも細かい設定が可能となっています。

あわせて読みたい
負荷テストツールLocustのインストールと実行
負荷テストツールLocustのインストールと実行

WireMock は単純なエンドポイントの提供には導入が簡単ですが、自由度を高めようとするとエクステンションなどの実装が別途必要。

遅延設定は標準で用意されていて助かりました。

簡易的なモックは、個人的には PHP で作ることが多かったのですが、usleep の関数は今まで知りませんでした。

Apache や Nginx など PHP とセットになった Docker イメージもありますし、AWS で言う EKS や ECS などコンテナ上にモックサーバをサクっと置けるのは便利ですね。

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました