私はオンライン予約システムに取り組んでいます(詳細は私の問題とはあまり関係がありません)。ほとんどの場合、フレームワーク4.0を使用してC#で開発されています。私は、とりわけ、製品とこれらの製品の入手可能性を含むDBを持っています。DBはWebサービスによってアクセスされ、後者はWebアプリケーションによって照会され、Webアプリケーションは、表示される情報をブラウザーに送信します。アーキテクチャに関してはそれほど凝ったことはありませんが、私はその種のシステムについてはあまり経験がありません。このプロジェクトはかなり古いものです。それは数年前から開発されており、私はちょうど6か月前に飛び乗ったばかりで、これまでWebプログラミングの経験がありませんでした。
現在、同時実行の問題が発生しています。2つのブラウザウィンドウ(任意のブラウザ)を開き、両方のウィンドウに同じクエリを入力し、人間が可能な限り速く両方のページに投稿すると、Webサービスで未処理の例外が発生します。クライアントの1つはデータを取得し、もう1つはエラーを受信します。編集:また、2台の異なるコンピューターを同時に使用してテストしましたが、未処理の例外が発生する可能性があります。
問題は、ほぼ1年前に実装されたキャッシュシステムにまでさかのぼることができました。ロックメカニズムはなく、キャッシュはディクショナリ(スレッドセーフではありません)を使用します。いくつかのStackOverflowの質問は、問題を特定し、それをどのように修正する必要があるかを特定するのに役立ちました(たとえば、これとあれ)。
そうは言っても、2つのブラウザウィンドウを手動でクリックすることなく、同じキャッシュに同時にアクセスするための適切なタイミングを取得することを期待して、問題を再現しようとしています。私がそうしようとしている理由は、実際に機能したことを確実に証明できないときに機能するはずのソリューションを実装するのが好きではないからです。また、キャッシュが(正しく)実装されていない場所がたくさんあり、適切なタイミングを手動で「推測」することで、それらすべての場所をテストできるかどうかはわかりません。
そこで、Apache JMeterをダウンロードし、2つのブラウザーに接続されたFiddler2を使用して、まったく同じリクエストを送信するテストプランを作成するために必要なすべてのHTTPリクエストを見つけることができました。
しかし、残念なことに、スレッドグループを40人の同時ユーザーを作成するように設定しても、JMeterは問題を再現できませんでした。それらのそれぞれがデータを正しく受信し、手動で実行することによって取得している未処理の例外をトリガーするものはありません。複数のブラウザでCookieを無効にしてテストしたので、Cookieの問題でも、ユーザーエージェントの違いでもないことはわかっています。HTTPリクエストはFiddler2から直接作成されたため、非表示フィールドやURL書き換えの問題になることはなく、動的なフィールド名やコンテンツは含まれません。Fiddler2には「再生」機能があることは知っていますが、それでも問題を再現することはできませんでした。これは私を終わりのないものにします。
だから、私の質問は:なぜ私はJMeterで問題を再現できないのですか?それを行うためのJMeter(無料ソフトウェアとしては完全です)よりも優れたツールはありますか?Jmeterが実行しないブラウザは何を実行しますか(ページのレンダリングは別として、ここでは実際には問題になりません)?
どんな考えでも大歓迎です!