電子商取引サイト(またはその点では任意のサイト)がある場合、ブラックフライデーのような特定の日に高いレベルのトラフィックが期待されることは珍しいことではありません。 このようなときには、負荷テストを次のレベルに引き上げ、より多くの同時ユーザーをシミュレートする必要があります。 Apache JMeter™を使用してロードテストをローカルで実行している場合、コンピュータに十分なCPUとメモリがある場合でも、実行できるユーザー数には一定の制限があ
JMeterを使用して800人以上の同時ユーザーを持つシナリオを作成するにはどうすればよいですか? 答えの1つは、分散モードでJMeterを実行することです。 それについて聞いたことがない人のために、ここで簡単な説明があります。
JMeterの配布について話すとき、JMeterがJava RMIを使用して分散ネットワーク内のオブジェクトと対話するマスタースレーブアーキテクチャを参照します。 あなたは下の画像でこれを見ることができます。
分散テストでは、テストの実行を処理するローカルJMeter(マスター)と、ターゲットサーバーに要求を送信する複数のリモートJMeterインスタンス(スレーブ)を使用できます。しかし、分散した方法でJMeterを実行できるようにするには、いくつかの簡単な手順を実行する必要があります。
まず、複数のコンピュータを持っている必要があります。
次に、jmeterサーバーを各スレーブシステムで実行する必要があります。 そのためには、jmeter-serverを実行する必要があります。jmeter/binにあるbat(Jmeter-Unixユーザー用サーバー)。 それを実行すると、次のようなものが表示されます:
次に、同じパスを使用しますが、マスターシステムでjmeterを見つけます。プロパティfil。 このファイルを編集し、remote_hostsプロパティに関係するすべてのスレーブシステムのIpを追加します。 マスターシステムとスレーブシステムが同じサブネットにあることを確認します。
すべての値をカンマで区切る必要があることを覚えておくことは非常に重要です(この例では、単純にするために1つのスレーブシステムを使用して
これらの手順がすべて完了したら、JMeterを起動して必要なテストを実行できます。 この場合、GUIモードを使用してJMeterを実行するので、それがどのように機能するかをよりよく知ることができます。 ただし、テスト目的では非GUIモードを強くお勧めします。
ユーザー数、ランプアップ、イテレーションは、通常どおりマスターシステムスレッドグループで構成する必要があります。 テストを実行すると、これらの条件は各スレーブシステムにレプリケートされます。
JMeterを起動してテストをロードした後、2つのオプションがあります。 マスターシステムを介して設定された1つは、Run->Remote Startを介して実行し、実行するスレーブシステムを選択します。 また、マスターシステムを介して構成された第二のものは、Run->Remote Start Allであり、使用可能なすべてのスレーブシステムでテストを開始します。
(スレーブシステムを1つだけ設定しているので、この例では2つのオプションの間に違いはありません)。
ここでは、eコマースサイトで記事を検索して表示できる簡単なシナリオがあります:
ご覧のとおり、テストが正しく実行されたかどうかを確認できるように、View Results Tree listenerを追加しました。 リモートでテストを実行すると、既に述べたように、View Results Tree listenerでテスト結果をローカルで見ることができますが、スレーブシステムではテストの開始時刻と終
:
リモートで:
舞台裏では、各スレーブシステムは、マスターシステムで設定した条件で負荷テストを実行しています。 このようにして、より多くの同時ユーザーを達成し、ターゲットサーバーへの負荷が高くなります。
したがって、実際に負荷を分散したい場合は、手動で行う必要があります。 たとえば、10,000人の同時ユーザーに到達し、10人のスレーブシステムを持っている場合、テスト計画には1000人のユーザーが必要なので、合計10,000人になります。
もう一つ興味深いことは、Ifコントローラを追加してテストにロジックを追加することです。 Ifコントローラは、テストを実行しているシステムに応じて、実行したい特定のフローを選択することができます。 Ao、異なるスレーブシステムがテストの異なる部分を実行しています。
たとえば、スレーブシステムでjmeter-serverを実行するときにパラメータを追加すると(。/jmeter-server-Jparam=1)Ifコントローラ内に${__javaScript(.{param}==1)}のような条件を置くことができるので、スレーブシステムに応じて特定の要求を実行できます。
それだ! JMeter分散システム上でテストを正常に実行しました。 これは、スレーブシステムを1つだけ使用することを選択したため、あまり複雑には見えないかもしれません。 しかし、25,000人の同時ユーザーをシミュレートする必要がある場合、これらすべてのシステムを維持するコストは膨大です。 メンテナンスの問題に対する回避策があるかもしれませんが、それはDockerコンテナ上で見たすべてのアーキテクチャをマウントすることです(ここで例を
しかし、私たちの目的が負荷テストを定期的に実行することであれば、これはまだ十分ではありません。 私たちはすべての分散アーキテクチャを一つのコンピュータに搭載しているので、かなりの量のリソースを消費しています。 クラウド-コンピューティング-サービスのように、必要に応じてコンテナの数を増やす可能性がある場合、Docker上でJMeterを配布するという概念は、より理にかなっ
分散モードでJMeterを実行するときのもう一つの難しさは、テストでデータをパラメータ化したときにCSVファイルを処理する方法です。 これは、ファイルを分離する必要があり、それらを更新する必要がある場合は、各スレーブシステムに移動して変更を行う必要があるためです。
これらの制限と不便さをすべて解決するために、BlazeMeterを使用することができます。 JmxファイルをBlazeMeterにアップロードする必要があるのはすべてです。 また、必要なすべてのデータを含む統合CSVファイルをアップロードすることもでき、BlazeMeterは設定したエンジンの量に応じて分割を処理します。
BlazeMeterでは、テストに適用するユーザーの量やエンジン(スレーブシステム)とスレッドの組み合わせを設定できます。 また、multi locationsのような追加の値を設定することもできます。
テスト結果:
これで終わりです! 今、あなたは大規模にロードテストを実行するためのいくつかのソリューションを見てきました、あなたのための私のお勧めは、あなた自身の経験を作
無料のJMeter academyからJMeterの使用方法の詳細をご覧ください。