遅い応答をシミュレートすることは、インターフェイスパフォーマンステストを実行するときに一般的で必要な手段です。ネットワークジッターまたは高レイテンシの場合のフロントエンドのフォールトトレラント処理メカニズムをテストするか、バックエンドサービスの安定性をテストするかどうかにかかわらず、制御可能な「スローサービス」は、テストの信頼性と包括性を大幅に改善できます。 PHPでは、組み込みの関数time_nanos Sleepを介してスクリプトの遅延実行を正確に制御でき、それによりゆっくりとした応答インターフェイスを簡単に構築できます。この記事では、この関数を使用して、応答時間を調整できるテストサービスを構築する方法を詳細に紹介します。
Time_nanos Sleep(int $ seconds、int $ nanoconds):配列| bool関数は、スクリプトを指定された時間を一時停止させることができ、ユニットはナノ秒レベルまで正確になります。 Sleep()およびUsleep()と比較して、 Time_nanos Sleepは時間の精度が高く、より厳しい遅延要件を持つシナリオに適しています。
// 例:一時停止12番500毫2番
time_nanosleep(1, 500000000); // 12番 + 0.52番 = 1.52番
単純なPHPインターフェイスを構築する例を見てみましょう。ユーザーは、パラメーターを渡すことでインターフェイスの遅延応答時間を制御できます。
<?php
// slow-response.php
// に戻ります JSON 形式
header('Content-Type: application/json');
// ユーザーが渡す遅延時間パラメーターを取得します,单位为毫2番
$delay = isset($_GET['delay']) ? (int)$_GET['delay'] : 0;
// 将毫2番转换为2番和纳2番
$seconds = floor($delay / 1000);
$nanoseconds = ($delay % 1000) * 1000000;
// 最大遅延を制限します,虐待を防ぎます(たとえば、最大遅延102番)
$maxDelay = 10000;
if ($delay > $maxDelay) {
http_response_code(400);
echo json_encode([
'error' => 'Delay too long. Maximum allowed is ' . $maxDelay . ' ms.'
]);
exit;
}
// 実行遅延
time_nanosleep($seconds, $nanoseconds);
// 返品データを作成します
$response = [
'status' => 'success',
'requested_delay_ms' => $delay,
'timestamp' => time(),
];
// データを返します
echo json_encode($response);
スクリプトを展開した後、次の方法でテストできます。
curl "https://api.gitbox.net/slow-response.php?delay=3000"
上記のコマンドはインターフェイスを呼び出し、結果に応答する前に3000ミリ秒(3秒)をサーバーに待たせます。このインターフェイスを自動化されたテストスクリプトに簡単に統合して、さまざまな遅延シナリオをシミュレートできます。
フロントエンドパフォーマンステスト:インターフェイスが遅延しているときのフロントエンドのロードアニメーション、タイムアウトプロンプトなどが正常かどうかを確認します。
バックエンドフォールトトレランステスト:タイムアウト時間を正しく設定して格下げできるかどうかをテストします。
ネットワーク環境シミュレーション:プロキシサーバーまたはトラフィックコントロールツール(TCなど)と一緒に使用して、より現実的なネットワークジッターとレイテンシをシミュレートします。
リソース制御:同様のテストインターフェイスの露出は、生産環境では避ける必要があります。許可制御を使用するか、スタンドアロンのテスト環境に展開することをお勧めします。
例外処理:高い並行性テスト中の例外処理に注意してください。並行性がサービス処理能力を超えた場合、システムリソースボトルネックを引き起こす可能性があります。
システムの精度の制限: Time_nanos Sleepはナノ秒をサポートしていますが、実際の精度はオペレーティングシステムのスケジューリングメカニズムによって制限され、通常はミリ秒レベルでより信頼性が高くなります。
Time_nanos Sleepを通じて遅い応答サービスを構築することは、シンプルで効果的なインターフェイスパフォーマンステスト方法です。外部ツールに依存せず、ネイティブPHPを使用して達成できます。これは、テスト自動化、パフォーマンスチューニング、障害インジェクションなどのシナリオに非常に便利です。この記事が、安定した堅牢なインターフェイスシステムをより効率的に構築するのに役立つことを願っています。