現在の位置: ホーム> 最新記事一覧> curl_upkeep()コールをmockする方法は、テストに失敗します

curl_upkeep()コールをmockする方法は、テストに失敗します

M66 2025-06-02

PHPでは、 curl_upkeep関数を使用して、HTTP要求のメンテナンスと管理を処理します。一般的な使用法のシナリオには、データの定期的な更新、サービスステータスのチェック、またはロードバランシングが含まれます。ただし、開発者がCURL_UPKEEP関数呼び出しの障害をシミュレートすることは非常に重要です。特に、システムがさまざまなタイプのエラーをどのように扱うかを確認する必要があるテストフェーズ中です。

この記事では、 curl_upkeepコールが失敗するシナリオをシミュレートするためのいくつかの一般的な方法を紹介します。

1.シミュレートされたDNS解像度は失敗しました

一般的な障害は、DNS解像度の障害です。要求するドメイン名を有効なIPアドレスに解決できないと仮定すると、URLのドメイン名を変更することにより、そのようなエラーをトリガーできます。

 <?php
// シミュレーション DNS 分析に失敗しました
$url = "http://invalid-domain.m66.net"; // このドメイン名は解析できません
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

if(curl_errno($ch)) {
    echo 'Error:' . curl_error($ch); // 出力エラーメッセージ
}

curl_close($ch);
?>

この例では、無効なdomain.m66.netは無効なドメイン名であり、 curl_exec関数がURLを正しく解析できないため、DNSエラーが返されます。

2。シミュレートされた接続タイムアウト

別の一般的な障害の状況は、接続タイムアウトです。サーバーが指定された時間内に応答しない場合、Curlは接続タイムアウトエラーを報告します。これをシミュレーションして、より小さなタイムアウトを設定できます。

 <?php
// シミュレーション连接超时
$url = "http://m66.net"; // 有効なドメイン名
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 1); // タイムアウト時間を設定します12番

$response = curl_exec($ch);

if(curl_errno($ch)) {
    echo 'Error:' . curl_error($ch); // 出力エラーメッセージ
}

curl_close($ch);
?>

この例では、タイムアウトは非常に短く設定されているため、サーバーが1秒以内に応答しない場合、 curl_execはタイムアウトエラーを返します。

3.サーバーエラーをシミュレート(5xx)

別の障害状況は、サーバーでエラーが発生したことです(500、502など)。この状況は通常、コードエラー、リソースの疲労、内部障害など、サーバー側の問題によって引き起こされます。これは、意図的に誤って構成されているURLを要求してシミュレートできます。

 <?php
// シミュレーション服务器間違い (5xx)
$url = "http://m66.net/server-error"; // パスが戻ってくると仮定します 500 間違い
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

if(curl_errno($ch)) {
    echo 'Error:' . curl_error($ch); // 出力エラーメッセージ
} else {
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($http_code >= 500 && $http_code < 600) {
        echo "服务器間違い,HTTP ステータスコード: $http_code"; // シミュレーション 5xx 間違い
    }
}

curl_close($ch);
?>

この例では、サーバーエラーは500エラーを返すと想定して、サーバーエラーをエミュレートします。

4.ネットワーク切断をシミュレートします

ネットワークの中断など、ネットワークの問題をシミュレートする必要がある場合は、ネットワーク接続を無効にするか、ローカルサーバーを使用してシミュレートできます。一部の開発環境では、ネットワークを切断するか、ネットワーク割り込みをシミュレートして同様のエラーをトリガーできます。

5。シミュレーションは反応しません

サーバーが完全に反応しない状況をシミュレートすることもできます。たとえば、反応しないURLを使用するか、コンテンツを返すことができないサーバーをローカルでエミュレートします。

 <?php
// シミュレーション服务器无响应
$url = "http://m66.net/no-response"; // パスが反応しないと仮定します
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5); // タイムアウト時間を設定します52番

$response = curl_exec($ch);

if(curl_errno($ch)) {
    echo 'Error:' . curl_error($ch); // 出力エラーメッセージ
}

curl_close($ch);
?>

ここでは、無反応は、反応のない状況をシミュレートする仮想的な経路です。

6.シミュレーションリクエスト拒否(4xx)

403(禁止)、404(発見されていない)などの一般的な4XXエラーは、存在しない、またはアクセス権がないリソースを要求することでシミュレートできます。