1

デプロイしたサーバーの応答時間が長くなることがありますが、localhost で作業および開発を行っている間は、すべての呼び出しが非常に高速です。

これにより、リソースの読み込みに時間がかかりすぎるという問題が原因で、アプリケーションが数回デプロイされると、予期しない動作が発生しました。

ローカル テストで実サーバーとの接続不良をシミュレートしたいので、すべての要求と応答にランダムな遅延を追加したいと思います。最初に考えたのは、サーブレットで Thread.sleep を使用することでした。

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    //add delay before processing request
    if (DELAY > 0){
        int delay;
        if (RANDOMIZE){
            delay = Random.nextInt(DELAY);
        } else {
            delay = DELAY;
        }
        try {
            Thread.sleep(delay);
        } catch (InterruptedException e1) {
            logger.error(e1);
        }
    }
...

ただし、サーブレット内で Thread.sleep() を使用すべきではないことを読みましたが、そのような落胆のコンテキストとその解決策は私の場合とは大幅に異なります。このコンテキストで thread.sleep() を使用できますか?

編集:これはもちろん、ローカルのみであり、クライアントがローカルテストで少し緊張するためです...実際に遭遇した悪いネットワークをシミュレートしたいだけです!

4

2 に答える 2

4

このアプローチ全体に欠陥があると思います。ランダムな遅延を導入するつもりはありません (テスト ケースをどのように繰り返すつもりですか?)。あなたは を紹介できThread.sleep()ますが、私はしません。これは製品コードに含まれますか? 設定可能ですか?本番環境で誤ってオンにするとどうなりますか?

本番環境の正確な特性を備えたテストサーバーをセットアップしたいと思います. そうすれば、効果的にデバッグするだけでなく、本番環境でアプリケーションがどのように動作するかを把握して、効果的に開発できる回帰テスト スイートを構築できます。

おそらく、上記の 1 つの譲歩は、ユーザーが地理的に分散している場合、クライアントとサーバーの間で (必要に応じて) ネットワーク遅延を導入することです。多くの場合、これはネットワーク上のハードウェア デバイスを使用して行われ、コードや構成には影響しません。

于 2013-01-11T11:33:53.677 に答える