Jmeter-quick-guide
jMeter-概要
JMeterの詳細に入る前に、アプリケーションのテストに関連するいくつかの専門用語を最初に理解しましょう。
- パフォーマンステスト-このテストは、インフラストラクチャの特定の構成の下で可能な限り最高のパフォーマンス期待値を設定します。 また、アプリケーションが実稼働に入る前に変更を加える必要がある場合、テストプロセスの初期段階で強調表示されます。
- 負荷テスト-このテストは、基本的に、動作するように設計された最高負荷の下でシステムをテストするために使用されます。
- ストレステスト-このテストは、リソースを圧倒することによりシステムを破壊する試みです。
JMeterとは何ですか?
JMeterは、さまざまなプロトコルまたはテクノロジーで負荷テスト、パフォーマンス指向ビジネス(機能)テスト、回帰テストなどを実行できるソフトウェアです。
Apache Software Foundationの Stefano Mazzocchi は、JMeterの最初の開発者でした。 彼は、主にApache JServ(現在はApache Tomcatプロジェクトと呼ばれています)のパフォーマンスをテストするために作成しました。 Apacheは後にGUIを強化し、機能テスト機能を追加するためにJMeterを再設計しました。
JMeterは、SwingグラフィカルAPIを使用するグラフィカルインターフェイスを備えたJavaデスクトップアプリケーションです。 したがって、Java仮想マシンを受け入れる任意の環境/ワークステーションで実行できます。たとえば、Windows、Linux、Macなどです。
JMeterがサポートするプロトコルは次のとおりです-
- Web-HTTP、HTTPSサイト 'web 1.0' web 2.0(ajax、flexおよびflex-ws-amf)
- Webサービス-SOAP/XML-RPC
- JDBCドライバー経由のデータベース
- ディレクトリ-LDAP
- JMSを介したメッセージング指向サービス
- サービス-POP3、IMAP、SMTP
- FTPサービス
JMeterの機能
以下は、JMeterの機能の一部です-
- オープンソースソフトウェアであるため、無料で入手できます。
- シンプルで直感的なGUIを備えています。
- JMeterは、Web-HTTP、HTTPS、SOAP、JDBC経由のデータベース、LDAP、JMS、メール-POP3など、さまざまなサーバータイプの負荷およびパフォーマンステストを実行できます。
- プラットフォームに依存しないツールです。 Linux/Unixでは、JMeterシェルスクリプトをクリックしてJMeterを呼び出すことができます。 Windowsでは、jmeter.batファイルを起動して起動できます。
- Swingと軽量コンポーネントを完全にサポートしています(プリコンパイルされたJARはパッケージjavax.swing。*を使用します)。
- JMeterは、テスト計画をXML形式で保存します。 つまり、テキストエディターを使用してテスト計画を生成できます。
- その完全なマルチスレッドフレームワークにより、多数のスレッドによる同時サンプリングと、個別のスレッドグループによる異なる機能の同時サンプリングが可能になります。
- 非常に拡張性があります。
- また、アプリケーションの自動化された機能テストの実行にも使用できます。
JMeterの仕組み
JMeterは、ターゲットサーバーにリクエストを送信するユーザーのグループをシミュレートし、テーブル、グラフなどを介してターゲットサーバー/アプリケーションのパフォーマンス/機能を示す統計を返します。
JMeterの仕組みを示す次の図を見てください-
jMeter-環境
JMeterはJavaのフレームワークであるため、最初の要件はマシンにJDKをインストールすることです。
システム要件
JDK | 1.6 or above. |
Memory | No minimum requirement. |
Disk Space | No minimum requirement. |
Operating System | No minimum requirement. |
ステップ1:Javaインストールの確認
まず、システムにJavaがインストールされているかどうかを確認します。 コンソールを開き、作業しているオペレーティングシステムに基づいて、次のいずれかの java コマンドを実行します。
OS | Task | Command |
---|---|---|
Windows | Open Command Console | c:\> java -version |
Linux | Open Command Terminal | $ java -version |
Mac | Open Terminal | machine: ~ joseph$ java -version |
システムにJavaがインストールされている場合、作業しているOSに基づいて適切な出力が得られます。
OS | Output |
---|---|
Windows |
java version "1.7.0_25" Java(TM)SEランタイム環境(ビルド1.7.0_25-b15) Java HotSpot(TM)64ビットサーバーVM(ビルド23.25-b01、混合モード) |
Linux |
java version "1.7.0_25" Java(TM)SEランタイム環境(ビルド1.7.0_25-b15) Java HotSpot(TM)64ビットサーバーVM(ビルド23.25-b01、混合モード) |
Mac |
java version "1.7.0_25" Java(TM)SEランタイム環境(ビルド1.7.0_25-b15) Java HotSpot(TM)64ビットサーバーVM(ビルド23.25-b01、混合モード) |
Javaがインストールされていない場合は、https://www.oracle.com/technetwork/java/javase/downloads/indexl [www.oracle.com/technetwork/java/javase/からJava Software Development Kit(SDK)をインストールしてください。 downloads/indexl]。 このチュートリアルのインストールバージョンとしてJava 1.7.0_25を想定しています。
ステップ2:Java環境を設定する
*JAVA_HOME* 環境変数を、Javaがマシンにインストールされているベースディレクトリの場所を指すように設定します。 たとえば-
OS | Output |
---|---|
Windows | Set the environment variable JAVA_HOME to C:\Program Files\Java\jdk1.7.0_25 |
Linux | export JAVA_HOME=/usr/local/java-current |
Mac | export JAVA_HOME=/Library/Java/Home |
Javaコンパイラの場所をシステムパスに追加します。
OS | Output |
---|---|
Windows | Append the string; C:\Program Files\Java\jdk1.7.0_25\bin to the end of the system variable, Path. |
Linux | export PATH=$PATH:$JAVA_HOME/bin/ |
Mac | not required |
上記のように java -version コマンドを使用してJavaインストールを確認します。
ステップ3:JMeterをダウンロードする
[[1]] このチュートリアルでは、_apache-jmeter-2.9_をダウンロードし、C:\> JMeterフォルダーにコピーしました。
ディレクトリ構造は次のようになります-
- apache-jmeter-2.9
- apache-jmeter-2.9 \ bin
- apache-jmeter-2.9 \ docs
- apache-jmeter-2.9 \ extras
- apache-jmeter-2.9 \ lib \
- apache-jmeter-2.9 \ lib \ ext
- apache-jmeter-2.9 \ lib \ junit
- apache-jmeter-2.9 \ printable_docs
親ディレクトリの名前を変更できます(つまり、 apache-jmeter-2.9)必要に応じて、サブディレクトリ名を変更しないでください。
ステップ4:JMeterを実行する
JMeterをダウンロードしたら、_bin_ディレクトリに移動します。 この場合、 /home/manisha/apache-jmeter-2.9/bin です。 今、次をクリックしてください-
OS | Output |
---|---|
Windows | jmeter.bat |
Linux | jmeter.sh |
Mac | jmeter.sh |
少し間を置いて、JMeter GUIが表示されます。これは、次のスクリーンショットに示すように、Swingアプリケーションです-
これは、ツールのメインページおよびデフォルトページです。
jMeter-テスト計画の作成
テスト計画とは何ですか?
テスト計画は、テストを実行するためのコンテナとして表示できます。 テストする対象とその方法を定義します。 完全なテスト計画は、スレッドグループ、ロジックコントローラー、サンプル生成コントローラー、リスナー、タイマー、アサーション、構成要素などの1つ以上の要素で構成されます。 テスト計画には、少なくとも1つのスレッドグループが必要です。
テスト計画を書く
テスト計画を作成するには、以下の手順に従ってください-
ステップ1:JMeterウィンドウを開始する
*/home/manisha/apache-jmeter-2.9/bin/jmeter.sh* をクリックして、JMeterウィンドウを開きます。 JMeterウィンドウは以下のように表示されます-
これは、追加の要素が追加されていないプレーンで空白のJMeterウィンドウです。 それは2つのノードが含まれています-
- テスト計画ノード-実際のテスト計画が保持される場所です。
- ワークベンチノード-コピー/貼り付けの目的で、使用されていないときにテスト要素を一時的に保存する場所を提供します。 テスト計画を保存すると、ワークベンチ項目は一緒に保存されません。
ステップ2:要素の追加/削除
要素(次の章のリンクで説明します:/jmeter/jmeter_test_plan_elements [テスト計画要素])は、テスト計画ノードを右クリックし、「追加」リストから新しい要素を選択することにより、テスト計画に追加できます。
または、ファイルから要素をロードし、「マージ」または「開く」オプションを選択して追加することもできます。
たとえば、次のようにテスト計画にスレッドグループ要素を追加しましょう-
要素を削除するには、要素が選択されていることを確認し、要素を右クリックして、「削除」オプションを選択します。
ステップ3:要素をロードして保存する
ファイルから要素をロードするには-
- ロードされた要素を追加する既存のツリー要素を右クリックします。
- マージを選択します。
- 要素を保存したファイルを選択します。
- JMeterは要素をツリーにマージします。
デフォルトでは、JMeterは要素を保存しません。明示的に保存する必要があります。
ツリー要素を保存するには-
- 要素を右クリックします。
- [選択を別名で保存]を選択します… オプション。
JMeterは、選択した要素とその下のすべての子要素を保存します。 デフォルトでは、JMeterは要素を保存しません。前述のように明示的に保存する必要があります。
ステップ4:ツリー要素の構成
テスト計画の要素は、JMeterの右側のフレームにあるコントロールを使用して構成できます。 これらのコントロールを使用すると、特定のテスト要素の動作を構成できます。 たとえば、スレッドグループは、以下に示すように、多数のユーザー、ランプアップ期間などに対して構成できます-
ステップ5:テスト計画を保存する
[保存]または[ファイル]メニューの[テストプランに名前を付けて保存]を使用して、テスト計画全体を保存できます。
ステップ6:テスト計画を実行する
*Run* メニュー項目から *Start* (Control + r)をクリックして、テスト計画を実行できます。 JMeterが実行を開始すると、メニューバーのすぐ下のセクションの右端に小さな緑色のボックスが表示されます。
緑色のボックスの左側の数字は、アクティブなスレッドの数/スレッドの合計数です。 これらはローカルで実行されるテストにのみ適用されます。クライアントサーバーモードを使用する場合、リモートシステムで開始されたスレッドは含まれません。
ステップ7:テスト計画を停止する
次の2つの方法でテストを停止できます-
- 停止(Control + '。')を使用します。 可能であれば、スレッドをすぐに停止します。
- シャットダウン(Control + '、')を使用します。 現在の作業の終了時に停止するようスレッドに要求します。
jMeter-テスト計画要素
JMeterテスト計画は、以下で説明するテスト要素で構成されます。 テスト計画は、少なくとも1つのスレッドグループで構成されます。 各スレッドグループ内には、サンプラー、ロジックコントローラー、構成要素、リスナー、タイマーなど、1つ以上の他の要素の組み合わせを配置できます。 各サンプラーの前に1つ以上のプリプロセッサー要素を配置し、その後にポストプロセッサー要素やアサーション要素を配置できます。 これらの各要素を詳細に見てみましょう-
スレッドグループ
スレッドグループ要素は、テスト計画の開始点です。 名前が示すように、スレッドグループ要素は、JMeterがテスト中に使用するスレッドの数を制御します。 また、スレッドグループを介して以下を制御することができます-
- スレッド数の設定
- 立ち上げ時間の設定
- テストの反復回数の設定
スレッドグループコントロールパネルはこのように見えます-
スレッドグループパネルは、次のコンポーネントを保持しています-
- サンプラーエラーの後に実行するアクション-テストの実行中にエラーが発生した場合、テストを次のいずれかにすることができます-
- テストの次の要素に進む
- *スレッドの停止*現在のスレッドを停止します。
- 実行を継続する前にエラーを検査する場合は、*テスト*を完全に停止します。
- スレッドの数-ユーザーまたはサーバーアプリケーションへの接続の数をシミュレートします。
- ランプアップ期間 JMeterがすべてのスレッドを実行するのにかかる時間を定義します。
- ループカウント-テストを実行する回数を定義します。
- スケジューラーチェックボックス-選択すると、コントロールパネルの下部にスケジューラー構成セクションが表示されます。
- スケジューラの設定-テストの実行の開始時間と終了時間を設定できます。
コントローラー
JMeterには、_Samplers_と_Logic Controllers_の2種類のコントローラーがあります。
サンプラー
サンプラーにより、JMeterは特定のタイプのリクエストをサーバーに送信できます。 ターゲットサーバーからのページに対するユーザーリクエストをシミュレートします。 たとえば、HTTPサービスでPOST、GET、またはDELETEを実行する必要がある場合、HTTP要求サンプラーを追加できます。
いくつかの有用なサンプラーは-
- HTTPリクエスト
- FTPリクエスト
- JDBCリクエスト
- Javaリクエスト
- SOAP/XMLリクエスト
- RPCリクエスト
次のスクリーンショットは、HTTPリクエストサンプラーコントロールパネルを示しています-
ロジックコントローラー
ロジックコントローラーを使用すると、スレッド内のサンプラーの処理順序を制御できます。 ロジックコントローラーは、子要素からの要求の順序を変更できます。 いくつかの例は次のとおりです-ForEachコントローラ、Whileコントローラ、ループコントローラ、IFコントローラ、ランタイムコントローラ、インターリーブコントローラ、スループットコントローラ、およびRun Onceコントローラ。
次のスクリーンショットは、ループコントローラーのコントロールパネルを示しています-
次のリストは、JMeterが提供するすべてのロジックコントローラで構成されています-
- シンプルなコントローラー
- ループコントローラー
- 一度だけのコントローラー
- インターリーブコントローラー
- ランダムコントローラー
- ランダムオーダーコントローラー
- スループットコントローラー
- ランタイムコントローラー
- コントローラの場合
- コントローラー
- スイッチコントローラー
- ForEachコントローラー
- モジュールコントローラー
- コントローラーを含める
- トランザクションコントローラー
- 録音コントローラー
テストフラグメント
テストフラグメントは、スレッドグループ要素と同じレベルに配置される特別なタイプの要素です。 モジュールコントローラーまたはInclude_Controllerによって参照されない限り実行されないという点で、スレッドグループとは区別されます。 この要素は、純粋にテスト計画内でコードを再利用するためのものです。
リスナー
リスナーを使用すると、サンプラーの結果を表、グラフ、ツリー、またはいくつかのログファイルの単純なテキストの形式で表示できます。 JMeterのSamplerコンポーネントが実行されると、JMeterがテストケースについて収集したデータに視覚的にアクセスできます。
リスナーは、テスト計画の直下を含む、テストの任意の場所に追加できます。 彼らは、そのレベル以下の要素からのみデータを収集します。 次のリストは、JMeterが提供するすべてのリスナーで構成されています-
- サンプル結果保存設定
- グラフの完全な結果
- グラフ結果
- スプラインビジュアライザー
- アサーション結果
- 結果ツリーを表示
- 集計レポート
- 結果を表で見る
- シンプルデータライター
- 結果を監視する
- 分布グラフ(アルファ)
- 集計グラフ
- メーラービジュアライザー
- BeanShellリスナー
- 概略報告
タイマー
デフォルトでは、JMeterスレッドは各サンプラー間で一時停止せずにリクエストを送信します。 これはあなたが望むものではないかもしれません。 タイマー要素を追加して、各リクエスト間で待機する期間を定義できます。
次のリストは、JMeterが提供するすべてのタイマーを示しています-
- 常時タイマー
- ガウスランダムタイマー
- 均一ランダムタイマー
- 一定スループットタイマー
- 同期タイマー
- JSR223時間
- BeanShell Time
- BSF時間
- ポアソンランダム時間
次のスクリーンショットは、コンスタントタイマーコントロールパネルを示しています-
アサーション
アサーションを使用すると、サンプラーを使用して行われた要求の応答に検証テストを含めることができます。 アサーションを使用すると、アプリケーションが正しいデータを返していることを証明できます。 JMeterは、アサーションが失敗すると強調表示します。
次のリストは、JMeterが提供するすべてのアサーションで構成されています-
- Beanshellアサーション
- BSFアサーション
- アサーションの比較
- JSR223アサーション
- 応答アサーション
- 期間アサーション
- サイズアサーション
- XMLアサーション
- BeanShellアサーション
- MD5Hexアサーション
- HTMLアサーション
- XPathアサーション
- XMLスキーマアサーション
次のスクリーンショットは、応答アサーションコントロールパネルを示しています-
構成要素
構成要素を使用すると、サンプラーが使用するデフォルトと変数を作成できます。 これらは、サンプラーによって行われた要求を追加または変更するために使用されます。
これらは、同じスコープ内にあるサンプラーの前に、それらが属するスコープの開始時に実行されます。 したがって、構成要素は、配置されているブランチ内からのみアクセスされます。
次のリストは、JMeterが提供するすべての構成要素で構成されています-
- カウンタ
- CSVデータセットの構成
- FTP要求のデフォルト
- HTTP認証マネージャー
- HTTPキャッシュマネージャー
- HTTP Cookie Manager
- HTTPプロキシサーバー
- HTTPリクエストのデフォルト
- HTTPヘッダーマネージャー
- Javaリクエストのデフォルト
- キーストアの構成
- JDBC接続の構成
- ログイン構成要素
- LDAP要求のデフォルト
- LDAP拡張リクエストのデフォルト
- TCPサンプラー構成
- ユーザー定義変数
- 単純な構成要素
- ランダム変数
プリプロセッサ要素
プリプロセッサ要素は、サンプラーが実行される直前に実行されるものです。 多くの場合、サンプル要求の実行直前に設定を変更したり、応答テキストから抽出されていない変数を更新したりするために使用されます。
次のリストは、JMeterが提供するすべてのプリプロセッサ要素で構成されています-
- HTMLリンクパーサー
- HTTP URL書き換え修飾子
- HTTPユーザーパラメータ修飾子
- ユーザーパラメータ
- JDBCプリプロセッサ
- JSR223プリプロセッサ
- RegExユーザーパラメーター
- BeanShellプリプロセッサ
- BSFプリプロセッサ
ポストプロセッサ要素
サンプラーの実行が終了すると、ポストプロセッサーが実行されます。 この要素は、たとえば、後で使用するために特定の値を取得するなど、応答データを処理するために最もよく使用されます。
次のリストは、JMeterが提供するすべてのポストプロセッサ要素で構成されています-
- 正規表現エクストラクター
- XPath Extractor
- 結果ステータスアクションハンドラー
- JSR223ポストプロセッサ
- JDBC PostProcessor
- BSFポストプロセッサ
- CSS/JQuery Extractor
- BeanShellポストプロセッサ
- ポストプロセッサーのデバッグ
テスト要素の実行順序
以下は、テスト計画要素の実行順序です-
- 構成要素
- プリプロセッサ
- タイマー
- サンプラー
- ポストプロセッサ(SampleResultがnullでない場合)
- アサーション(SampleResultがnullでない場合)
- リスナー(SampleResultがnullでない場合)
jMeter-Webテスト計画
Webページをテストする簡単なテスト計画を作成しましょう。 Apache JMeterでテスト計画を作成して、URL-https://www.finddevguides.com [www.finddevguides.com]で示されるWebページのパフォーマンスをテストできるようにします。
JMeterを起動します
*/home/manisha/apache-jmeter-2.9/bin/jmeter.sh* をクリックして、JMeterウィンドウを開きます。 JMeterウィンドウは以下のように表示されます-
テスト計画の名前を変更する
[Name]テキストボックスで、テスト計画ノードの名前を_Sample Test_に変更します。 ワークベンチノードにフォーカスを変更し、テスト計画ノードに戻って、名前が反映されていることを確認する必要があります。
スレッドグループを追加
次に、ウィンドウに最初の要素を追加します。 1つのスレッドグループを追加します。これは、サンプラー、コントローラー、リスナーなどの他のすべての要素のプレースホルダーです。 シミュレートするユーザーの数を設定できるようにするために必要です。
JMeterでは、コンテキストメニューを使用してすべてのノード要素が追加されます。
- 子要素ノードを追加する要素を右クリックします。
- 追加する適切なオプションを選択します。
- サンプルテスト(テスト計画)→[追加]→[スレッド(ユーザー)]→[スレッドグループ]を右クリックします。 したがって、スレッドグループは、テスト計画(サンプルテスト)ノードの下に追加されます。
- スレッドグループに_Users_という名前を付けます。 私たちにとって、この要素は、finddevguidesホームページにアクセスするユーザーを意味します。
サンプラーを追加
スレッドグループ(ユーザー)に1つのサンプラーを追加する必要があります。 スレッドグループの追加について前述したように、今回は右クリックしてスレッドグループ(ユーザー)ノードのコンテキストメニューを開き、[追加]→[サンプラー]→[HTTPリクエスト]オプションを選択してHTTPリクエストサンプラーを追加します。
スレッドグループ(ユーザー)ノードの下に空のHTTP要求サンプラーを1つ追加します。 このノード要素を設定しましょう-
- 名前-達成したいアクションを反映して名前を変更します。 * finddevguidesホームページにアクセス*
- サーバー名またはIP *-ここでは、Webサーバー名を入力する必要があります。 私たちの場合は *www.finddevguides.com です。 (http://の部分は書かれていませんが、これはサーバーまたはそのIPの名前のみです)
- Protocol -これを空白のままにします。つまり、プロトコルとしてHTTPが必要です。
- Path -パスを/(スラッシュ)として入力します。 サーバーのルートページが必要であることを意味します。
リスナーを追加
リスナーを追加します。 スレッドグループ(ユーザー)ノードの下にビュー結果ツリーリスナーを追加しましょう。 サンプラーの結果がこのリスナーノード要素で表示できるようになります。
リスナーを追加するには-
- コンテキストメニューを開く
- スレッドグループ(ユーザー)を右クリックします。
- 追加→リスナー→結果ツリーの表示オプションを選択します
テスト計画を実行する
すべてのセットアップが完了したら、テスト計画を実行しましょう。 スレッドグループ(ユーザー)の構成では、すべての既定値を保持します。 つまり、JMeterはサンプラーを1回だけ実行します。 1人のユーザーに似ていますが、1回だけです。
これは、JMeterサンプラーを使用して、ブラウザーからWebページにアクセスするユーザーに似ています。 テスト計画を実行するには、メニューから「実行」を選択し、「開始」オプションを選択します。
Apache JMeterは、実際にテストを開始する前に、テスト計画をディスクファイルに保存するように求めています。 これは、テスト計画を複数回実行する場合に重要です。 保存せずに実行することもできます。
出力を表示する
スレッドグループの設定をシングルスレッド(1ユーザーのみ)として保持し、1回ループ(1回のみ実行)するため、View Result Tree Listenerで1つのトランザクションの結果を取得します。
上記の結果の詳細は次のとおりです-
- _Visit finddevguides Home Page_という名前に対する緑色は成功を示します。
- JMeterは、Webサーバーから送信されたすべてのヘッダーと応答を保存し、さまざまな方法で結果を表示する準備ができています。
- 最初のタブはサンプラー結果です。 JMeterデータとWebサーバーから返されたデータが表示されます。
- 2番目のタブはリクエストで、リクエストの一部としてWebサーバーに送信されたすべてのデータが表示されます。
最後のタブは応答データです。 このタブでは、リスナーはサーバーから受信したデータをテキスト形式で表示します。
これは、1つの要求のみを実行する単純なテスト計画です。 しかし、JMeterの本当の強みは、多くのユーザーが送信しているように、同じリクエストを送信することです。 複数のユーザーでWebサーバーをテストするには、スレッドグループ(ユーザー)設定を変更する必要があります。
jMeter-データベーステスト計画
この章では、データベースサーバーをテストする簡単なテスト計画を作成する方法について説明します。 テスト目的では、MYSQLデータベースサーバーを使用します。 テストには他のデータベースを使用できます。 MYSQLでのインストールとテーブルの作成については、リンク:/mysql/index [MYSQLチュートリアル]を参照してください。
MYSQLをインストールしたら、以下の手順に従ってデータベースをセットアップします-
- 「tutorial」という名前のデータベースを作成します。
- テーブル_tutorials_tbl_を作成します。
- 以下に示すように、_tutorials_tbl_にレコードを挿入します-
mysql> use TUTORIALS;
Database changed
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("Learn PHP", "John Poul", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("Learn MySQL", "Abdul S", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("JAVA Tutorial", "Sanjay", '2007-05-06');
Query OK, 1 row affected (0.01 sec)
mysql>
- 適切なJDBCドライバーを /home/manisha/apache-jmeter-2.9/lib にコピーします。
JMeterテスト計画を作成する
*/home/manisha/apache-jmeter-2.9/bin/jmeter.sh* からJMeterを起動しましょう。
ユーザーを追加
スレッドグループを作成するには、
- テスト計画を右クリックします。
- 追加→スレッド(ユーザー)→スレッドグループを選択します。
- したがって、スレッドグループはテスト計画ノードの下に追加されます。
- このスレッドグループの名前を_JDBC Users_に変更します。
スレッドグループのデフォルトプロパティは変更しません。
JDBCリクエストの追加
ユーザーを定義したので、今度はユーザーが実行するタスクを定義します。 このセクションでは、実行するJDBC要求を指定します。
- JDBC Users要素を右クリックします。
- *追加→構成要素→JDBC接続構成*を選択します。
- 次のフィールドを設定します(チュートリアルと呼ばれるMySQLデータベースを使用しています)-
- プールにバインドされた変数名。 これは、構成を一意に識別する必要があります。 JDBCサンプラーが使用する構成を識別するために使用します。 _test_という名前を付けました。
- データベースURL-jdbc:mysql://localhost:3306/tutorial。
- JDBCドライバークラス:com.mysql.jdbc.Driver。
- ユーザー名:root。
- パスワード:ルートのパスワード。
画面上の他のフィールドは、以下に示すようにデフォルトのままです-
次に、上記で定義したJDBC構成プールを参照するJDBCリクエストを追加します。 JDBC Users要素を選択します。
- マウスの右ボタンをクリックして、[追加]メニューを表示します。
- 追加→サンプラー→JDBCリクエストを選択します。
- この新しい要素を選択して、コントロールパネルを表示します。
- 以下に示すようにプロパティを編集します-
- プールにバインドされた変数名。 これは、構成を一意に識別する必要があります。 JDBCサンプラーが使用する構成を識別するために使用します。 _test_という名前を付けました。
- 名前-学ぶ。
- プール名-テストを入力します(構成要素と同じ)。
- Query Type-Selectステートメント。
- SQLクエリ文字列フィールドを入力します。
リスナーを作成
次に、リスナー要素を追加します。 この要素は、JDBCリクエストのすべての結果をファイルに保存し、データの視覚モデルを提示します。
- JDBCユーザー要素を選択します
- 結果ツリー表示リスナーを追加します(追加→リスナー→結果ツリー表示)。
テスト計画を保存して実行する
ここで、上記のテスト計画を_db_test.jmx_として保存します。 *実行→開始*オプションを使用してこのテスト計画を実行します。
出力を確認する
最後の画像では、2つのレコードが選択されていることがわかります。
jMeter-FTPテスト計画
この章では、JMeterを使用してFTPサイトをテストする方法を説明します。 FTPサイトをテストするためのテスト計画を作成しましょう。
テスト計画の名前を変更
- /home/manisha/apache-jmeter-2.9/bin/jmeter.shをクリックして、JMeterウィンドウを開きます。 * [テスト計画]ノードをクリックします。 * このテスト計画ノードの名前をTestFTPSiteに変更します。
スレッドグループを追加
1つのスレッドグループを追加します。これは、サンプラー、コントローラー、リスナーなどの他のすべての要素のプレースホルダーです。
- TestFTPSite(テスト計画)を右クリックします
- 追加→スレッド(ユーザー)→スレッドグループを選択します。 スレッドグループは、テスト計画(TestFTPSite)ノードの下に追加されます。
- 次のようにテストに合わせて、スレッドグループのデフォルトプロパティを変更します-
- 名前-FTPusers
- スレッド数(ユーザー) − 4
- ランプアップ期間-デフォルト値の0秒のままにします。
- ループカウント-1
サンプラーの追加-FTPリクエスト
ユーザーを定義したので、今度はユーザーが実行するタスクを定義します。 FTP要求要素を追加します。 2つのFTP要求要素を追加します。1つはファイルを取得し、もう1つはFTPサイトにファイルを配置します。
- FTPユーザー要素を選択します。
- マウスボタンを右クリックして、[追加]メニューを表示します。
- 追加→サンプラー→FTP要求を選択します。
- ツリーでFTP要求要素を選択します。
- 以下に示すように、次のプロパティを編集します-
次の詳細がこの要素に入力されます-
- 名前-FTPリクエスト取得
- *サーバー名またはIP *-184.168.74.29
- リモートファイル-/home/manisha/sample_ftp.txt
- ローカルファイル-sample_ftp.txt
- get(RETR)を選択します
- ユーザー名-manisha
- パスワード-manisha123
上記のように別のFTPリクエストを追加し、次のスクリーンショットに示すようにプロパティを編集します-
次の詳細がこの要素に入力されます-
- 名前-FTPリクエストプット
- *サーバー名またはIP *-184.168.74.29
- リモートファイル-/home/manisha/examplefile.txt
- ローカルファイル-/home/manisha/work/examplefile.txt
- put(STOR)を選択
- ユーザー名-manisha
- パスワード-manisha123
リスナーを追加
テスト計画に追加する必要がある最後の要素はリスナーです。 この要素は、FTPリクエストのすべての結果をファイルに保存し、データの視覚モデルを提示します。
- FTPユーザー要素を選択します。 *[追加]> [リスナー]> [結果ツリーの表示]を選択して、結果ツリーの表示リスナーを追加します。
テスト計画を実行する
ここで、上記のテスト計画を_ftpsite_test.jmx_として保存します。* 実行→開始*オプションを使用してこのテスト計画を実行します。
出力を表示する
次の出力はリスナーで見ることができます。
各FTP要求に対して4つの要求が行われ、テストが成功したことがわかります。 GETリクエスト用に取得したファイルは、/binフォルダーに保存されます。 この例では、 /home/manisha/apache-jmeter-2.9/bin/ です。 PUT要求の場合、ファイルはパス /home/manisha/ にアップロードされます。
jMeter-Webサービステスト計画
この章では、WebServiceをテストするためのテスト計画を作成する方法を学びます。 テストのために、単純なWebサービスプロジェクトを作成し、Tomcatサーバーにローカルに展開しました。
Webサービスプロジェクトを作成する
Webサービスプロジェクトを作成するために、Eclipse IDEを使用しました。 まず、サービスエンドポイントインターフェース HelloWorld を com.finddevguides.ws パッケージに記述します。 HelloWorld.javaの内容は次のとおりです-
package com.finddevguides.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
//Service Endpoint Interface
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld {
@WebMethod String getHelloWorldMessage(String string);
}
このサービスには、Stringパラメーターをとる getHelloWorldMessage メソッドがあります。
次に、実装クラス HelloWorldImpl.java をパッケージ com.finddevguides.ws の下に作成します。
package com.finddevguides.ws;
import javax.jws.WebService;
@WebService(endpointInterface="com.finddevguides.ws.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
@Override
public String getHelloWorldMessage(String myName) {
return("Hello "+myName+" to JAX WS world");
}
}
ここで、エンドポイントパブリッシャーを作成してこのWebサービスをローカルに公開し、サーバーでサービスを公開します。
公開方法は2つのパラメータを取ります-
- エンドポイントURL文字列。
- 実装オブジェクト(この場合はHelloWorld実装クラス)は、上記のパラメーターで言及したURLで識別されるエンドポイントでWebサービスとして公開されます。
HelloWorldPublisher.javaの内容は次のとおりです-
package com.finddevguides.endpoint;
import javax.xml.ws.Endpoint;
import com.finddevguides.ws.HelloWorldImpl;
public class HelloWorldPublisher {
public static void main(String[] args) {
Endpoint.publish("http://localhost:9000/ws/hello", new HelloWorldImpl());
}
}
以下に示すようにweb.xmlの内容を変更します-
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,
Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>120</session-timeout>
</session-config>
</web-app>
このアプリケーションをWebサービスとしてデプロイするには、別の構成ファイル sun-jaxws.xml が必要です。 このファイルの内容は次のとおりです-
<?xml version = "1.0" encoding = "UTF-8"?>
<endpoints
xmlns = "http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version = "2.0">
<endpoint name = "HelloWorld"
implementation = "com.finddevguides.ws.HelloWorldImpl"
url-pattern = "/hello"/>
</endpoints>
すべてのファイルの準備ができたので、ディレクトリ構造は次のスクリーンショットに示すようになります-
- 次に、このアプリケーションのWARファイルを作成します。
- プロジェクトを選択→右クリック→エクスポート→WARファイル。
- これをTomcatサーバーの webapps フォルダーの下に hello.war ファイルとして保存します。
- 次に、Tomcatサーバーを起動します。
- サーバーが起動したら、次のURLでWebサービスにアクセスできるはずです-http://localhost:8080/hello/hello
JMeterテスト計画を作成する
次に、上記のWebサービスをテストするためのテスト計画を作成しましょう。
テスト計画の名前を変更する
- /home/manisha/apache-jmeter2.9/bin/jmeter.shをクリックして、JMeterウィンドウを開きます。 * [テスト計画]ノードをクリックします。 * このテスト計画ノードの名前をWebserviceTestに変更します。
スレッドグループを追加
1つのスレッドグループを追加します。これは、サンプラー、コントローラー、リスナーなどの他のすべての要素のプレースホルダーです。
- WebserviceTest(テスト計画)→追加→スレッド(ユーザー)→スレッドグループを右クリックします。 スレッドグループは、テスト計画(WebserviceTest)ノードの下に追加されます。
- 次に、テストに合わせてスレッドグループのデフォルトプロパティを変更します。 次のプロパティが変更されます-
- 名前-webserviceユーザー
- スレッド数(ユーザー) − 2
- ランプアップ期間-デフォルト値の0秒のままにします。
- ループカウント-2
サンプラーの追加-SOAP/XML-RPCリクエスト
ユーザーを定義したので、今度はユーザーが実行するタスクを定義します。
SOAP/XML-RPC Request要素を追加します-
- マウスボタンを右クリックして、[追加]メニューを表示します。
- 追加→サンプラー→SOAP/XML-RPCリクエストを選択します。
- ツリーでSOAP/XML-RPC Request要素を選択します
- 以下の画像のように、次のプロパティを編集します-
- 次の詳細がこの要素に入力されます-
- 名前-SOAP/XML-RPCリクエスト
- URL -http://localhost:8080/hello/hello?wsdl
- 石鹸/XML-RPCデータ-以下の内容を入力してください
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:web = "http://ws.finddevguides.com/">
<soapenv:Header/>
<soapenv:Body>
<web:getHelloWorldMessage>
<arg0>Manisha</arg0>
</web:getHelloWorldMessage>
</soapenv:Body>
</soapenv:Envelope>
リスナーを追加
テスト計画に追加する必要がある最後の要素はリスナーです。 この要素は、HTTPリクエストのすべての結果をファイルに保存し、データの視覚モデルを提示します。
- webserviceユーザー要素を選択します。
- 「追加」→「リスナー」→「結果ツリーの表示」を選択して、結果ツリーの表示リスナーを追加します。
テスト計画を実行する
ここで、上記のテスト計画を_test_webservice.jmx_として保存します。 [実行]→[開始]オプションを使用して、このテスト計画を実行します。
出力を表示する
次の出力はリスナーで見ることができます。
最後の画像では、応答メッセージ「Hello Manisha to JAX WS world」を見ることができます。
jMeter-JMSテスト計画
この章では、Java Messaging Service(JMS)をテストする簡単なテスト計画を作成する方法を学びます。 JMSは2種類のメッセージングをサポートしています-
- ポイントツーポイントメッセージング-キューメッセージングは一般に、送信者が応答を期待するトランザクションに使用されます。 メッセージングシステムは、通常のHTTP要求とはまったく異なります。 HTTPでは、1人のユーザーがリクエストを送信し、レスポンスを取得します。
- トピックメッセージング-トピックメッセージは一般にpub/subメッセージングとして知られています。 通常、トピックメッセージングは、メッセージがプロデューサーによって公開され、複数のサブスクライバーによって消費される場合に使用されます。
これらのそれぞれのテスト例を見てみましょう。 JMSをテストするための前提条件は次のとおりです-
- 例ではApache ActiveMQを使用します。 IBM WebSphere MQ(以前のMQSeries)、TibcoなどのようなさまざまなJMSサーバーがあります。 Apache ActiveMQ Webサイトのバイナリからダウンロードしてください。
- アーカイブを解凍し、解凍したディレクトリに移動し、コマンドコンソールから次のコマンドを実行してActiveMQサーバーを起動します-
.\bin\activemq start
ActiveMQサーバーが起動したかどうかは、次のアドレス http://localhost:8161/admin/ の管理インターフェイスにアクセスして確認できます。 認証を要求する場合は、ユーザーIDとパスワードを_admin_として入力します。 画面は以下に示すように似ています-
- 次に、activemq-all-x.x.x.jar(バージョンに応じてXXX)をActiveMQ解凍ディレクトリから*/home/manisha/apache-jmeter-2.9/lib。*にコピーします。
上記のセットアップで、次のテスト計画を作成しましょう-
- リンク:/jmeter/jmeter_jms_pointtopoint_test_plan [JMSポイントツーポイントテスト計画]
- リンク:/jmeter/jmeter_jms_topic_test_plan [JMSトピックテスト計画]
jMeter-テスト計画の監視
この章では、JMeterを使用してWebサーバーを監視するテスト計画を作成する方法について説明します。 モニターテストの用途は次のとおりです-
- モニターは、ストレステストとシステム管理に役立ちます。
- ストレステストで使用されるモニターは、サーバーのパフォーマンスに関する追加情報を提供します。
- モニターを使用すると、サーバー側のパフォーマンスとクライアント側の応答時間の関係を簡単に確認できます。
- システム管理ツールとして、モニターは1つのコンソールから複数のサーバーを監視する簡単な方法を提供します。
監視にはTomcat 5以上が必要です。 テストの目的で、Tomcat 7.0.42サーバーを監視します。 Java Management Extension(JMX)をサポートするサーブレットコンテナをテストできます。 Tomcatサーバーを監視するテストケースを作成しましょう。 まず、Tomcatサーバーをセットアップしましょう。
Tomcatサーバーのセットアップ
Tomcatサービスステータスを開くことから始めます。 これを行うには、ユーザーの構成ファイル* <TOMCAT_HOME>/conf/tomcat-users.xml*を編集します。 このファイルには、次のようにtomcat-usersセクション(コメント付き)が含まれています-
<tomcat-users>
<!--
<role rolename = "tomcat"/>
<role rolename = "role1"/>
<user username = "tomcat" password = "tomcat" roles = "tomcat"/>
<user username = "both" password = "tomcat" roles = "tomcat,role1"/>
<user username = "role1" password = "tomcat" roles = "role1"/>
-->
</tomcat-users>
このセクションを変更して、adminロール、manager、manager-guiを追加し、ユーザー「admin」を割り当てる必要があります。 改訂されたファイルは次のとおりです-
<tomcat-users>
<role rolename = "manager-gui"/>
<role rolename = "manager-script"/>
<role rolename = "manager-jmx"/>
<role rolename = "manager-status"/>
<user username = "admin" password = "admin" roles = "manager-gui,manager-script,manager-jmx,manager-status"/>
</tomcat-users>
Linuxではtomcatサーバー<TOMCAT_HOME>/bin/startup.shを、Windowsでは<TOMCAT_HOME>/bin/startup.batを起動します。 開始したら、ブラウザに次のリンクを入力して、Tomcatの監視が機能することを確認します-
http://localhost:8080/manager/status?XML=true
認証ウィンドウがブラウザに表示されます。 関連付けられたTomcatログインとパスワードを入力します(この場合はadminです)。 次に、ブラウザは以下のようにTomcatの実行ステータスを表示します-
上記のスクリーンショットから、いくつかの点に注意することができます-
- URLで、XML = true(大文字と小文字の区別に注意)を使用すると、JMeterの機能に必要な監視Tomcatをきれいに表示できます。
- また、デフォルトの2つのコネクタがあることに注意してください。 mod_jk Apache HTTPDフロントモジュールと一般的に使用されるAJPコネクタ、およびポート8080を介してTomcatに直接アクセスするために一般的に使用されるコネクタであるHTTPコネクタ。
JMeterテスト計画を作成する
テスト計画を書くことでTomcatサーバーを監視しましょう-
テスト計画の名前を変更
- /home/manisha/apache-jmeter2.9/bin/jmeter.shをクリックして、JMeterウィンドウを開きます。 * [テスト計画]ノードをクリックします。 * 次の手順の説明に従って、スレッドグループを追加します。
スレッドグループを追加
- *テスト計画→追加→スレッド(ユーザー)→スレッドグループ*を右クリックします。 テスト計画ノードの下にスレッドグループが追加されます。
- 十分なサンプルが生成されるように、ループカウントを永久(または大きな数)に変更します。
HTTP認証マネージャー
- 追加→構成要素→HTTP承認マネージャーを選択して、HTTP承認マネージャーをスレッドグループ要素に追加します。 この要素は、Tomcatサーバーのステータスを確認するためにブラウザーが要求する認証を管理します。
- HTTP認証マネージャーを選択します。
- 次の詳細を編集します-
- ユーザー名-admin(tomcat-users.xmlファイルの構成に依存)
- パスワード-管理者(tomcatusers.xmlファイルの構成に依存)
- 他のフィールドは空のままです。
サンプラーHTTPリクエストの追加
ユーザーを定義したので、今度はユーザーが実行するタスクを定義します。 HTTPリクエスト要素を追加します。
- マウスボタンを右クリックして、[追加]メニューを表示します。
- 追加→サンプラー→HTTP要求を選択します。
- 次に、ツリーでHTTPリクエスト要素を選択します。
- 以下の画像のように、次のプロパティを編集します-
- 次の詳細がこの要素に入力されます-
- 名前-サーバーの状態
- *サーバー名またはIP *-localhost
- ポート-8080
- パス-/manager/status
- パラメータ-「XML」という名前のリクエストパラメータを大文字で追加します。 小文字で「true」の値を指定します。
- オプションのタスク-サンプラーの下部にある「モニターとして使用」をチェックします。
定数タイマーを追加する
サーバーのステータスを定期的に要求するには、各要求間の時間間隔を許可する定数タイマーを追加します。 追加→タイマー→定数タイマーを選択して、このスレッドグループにタイマーを追加します。
[Thread Delay]ボックスに5000ミリ秒を入力します。 一般に、5秒より短い間隔を使用すると、サーバーに負荷がかかる場合があります。 実稼働環境にモニターをデプロイする前に、許容可能な間隔を調べてください。
リスナーを追加
テスト計画に追加する必要がある最後の要素はリスナーです。 2種類のリスナーを追加します。 1つは結果をファイルに保存し、もう1つは結果のグラフィカルビューを表示します。
- スレッドグループ要素を選択します。
- シンプルデータライターリスナーを追加します。追加→リスナー→シンプルデータライター。
- 出力ファイルのディレクトリとファイル名を指定します(この例では/home/manisha/work/sample.csvです)
- テスト計画要素の追加→リスナー→モニター結果を選択して、別のリスナーを追加しましょう。
テスト計画を実行する
ここで、上記のテスト計画を_monitor_test.jmx_として保存します。 [実行]→[開始]オプションを使用して、このテスト計画を実行します。
出力を表示する
結果は/home/manisha/work/sample.csvファイルに保存されます。 下の画像のように、モニター結果リスナーでグラフィカルな結果を確認することもできます。
グラフの両側にキャプションがあることに注意してください。 左側はパーセントで、右側は死んでいる/健康です。 メモリラインが急激に上下する場合は、メモリのスラッシングを示している可能性があります。 このような状況では、アプリケーションをBorland OptimizeItまたはJProbeでプロファイルすることをお勧めします。 見たいのは、負荷、メモリ、スレッドの規則的なパターンです。 不規則な動作は通常、パフォーマンスの低下または何らかのバグを示します。
jMeter-リスナー
リスナーは、JMeterの実行中にJMeterがテストケースについて収集する情報へのアクセスを提供します。 リスナーが収集した結果または情報は、次の形式で表示できます-
- tree
- テーブル
- グラフ
- ログファイル
すべてのリスナーは、出力ファイルが指定されている場合、同じ生データを出力ファイルに書き込みます。
デフォルト設定
保存されるデフォルトのアイテムは、次の2つの方法のいずれかで定義することができます-
- jmeter.properties (またはuser.properties)ファイル内。 このファイルは、JMeterの /bin フォルダーにあります。デフォルトの形式を変更するには、jmeter.propertiesで次の行を見つけます-
jmeter.save.saveservice.output_format=
- 次のスクリーンショットに示すように構成ポップアップを使用して-
JMeterは、テスト実行の結果をJMeter Text Logs(JTL)として作成します。 これらはデフォルトの拡張子であるため、通常JTLファイルと呼ばれますが、任意の拡張子を使用できます。
同じ出力ファイル名を使用して複数のテストが実行される場合、JMeterはファイルの最後に新しいデータを自動的に追加します。
リスナーは、結果をファイルに記録できますが、UIには記録できません。 GUIのオーバーヘッドを排除することにより、データを記録する効率的な手段を提供することを意図しています。
で実行する場合-
- * GUIモード*-リスナーSimple Data Writerを使用します
- 非GUIモード--lフラグを使用してデータファイルを作成できます。
サンプルが多数ある場合、リスナーは大量のメモリを使用できます。 必要なメモリ量を最小限に抑えるには、CSV形式のシンプルデータ書き込みを使用します。
CSVログ形式
CSVログ形式は、構成で選択されているデータ項目によって異なります。 指定されたデータ項目のみがファイルに記録されます。 列の表示順序は固定されており、次のとおりです-
Field | Description | Value Example |
---|---|---|
timeStamp | in milliseconds since 1/1/1970 | 1354223881017 |
elapsed | in milliseconds | 1858 |
label | sampler label | HTTP Request |
responseCode | e.g. 200, 404 | 200 |
responseMessage | e.g. OK | OK |
threadName | Thread Group 1-1 | |
dataType | e.g. text | text |
success | true or false | true |
failureMessage | if any | |
bytes | number of bytes in the sample | 34908 |
grpThreads | number of active threads in this thread group | 1 |
allThreads | total number of active threads in all groups | 1 |
URL | http://finddevguides.com | |
Filename | if Save Response to File was used | |
latency | time to first response | 132 |
encoding | utf-8 | |
SampleCount | number of samples (1, unless multiple samples are aggregated) | 1 |
ErrorCount | number of errors (0 or 1, unless multiple samples are aggregated) | 0 |
Hostname | where the sample was generated | LaptopManisha |
IdleTime | number of milliseconds of 'Idle' time (normally 0) | |
Variables | if specified |
応答データの保存
必要に応じて、応答データをXMLログファイルに保存できます。 ただし、大きなファイルや画像を保存することはできません。 そのような場合は、ポストプロセッサSave_Responses_to_a_fileを使用します。 これにより、サンプルごとに新しいファイルが生成され、サンプルとともにファイル名が保存されます。 その後、ファイル名をサンプルログ出力に含めることができます。 サンプルログファイルが再ロードされると、必要に応じてファイルからデータが取得されます。
応答データの読み込み(読み込み)
既存の結果ファイルを表示するには、ファイルの[参照…]ボタンを使用してファイルを選択できます。 必要に応じて、適切なリスナーを含むダミーのテストプランを作成します。
リスナーGUIデータの保存
JMeterは、リスナーをPNGファイルとして保存できます。 そうするには、
- [編集]→[画像として保存]を選択して、左側のパネルでリスナーを選択します。 ファイルダイアログが表示されます。
- 目的の名前を入力します。
- リスナーを保存します。
jMeter-関数
JMeterの関数とユーザー変数
JMeter関数は、任意のサンプラーまたはテストツリー内の他の要素のフィールドに入力できる特別な値です。
- 関数呼び出しは次のようになります-
${__functionName(var1,var2,var3)}
- functionName_は、関数の名前と一致します。 たとえば、 $ \ { threadNum} 。
- 関数のパラメータにカンマが含まれている場合、以下に示すように「\」でエスケープするようにしてください-
${__time(EEE\, d MMM yyyy)}
- 変数は次のように参照されます-
${VARIABLE}
機能一覧
次の表は、大まかに型にグループ化された関数のグループを示しています-
Function Type | Name | Comment |
---|---|---|
Information | threadNum | Get thread number. |
Information | samplerName | Get the sampler name (label). |
Information | machineIP | Get the local machine IP address. |
Information | machineName | Get the local machine name. |
Information | time | Return current time in various formats. |
Information | log | Log (or display) a message (and return the value). |
Information | logn | Log (or display) a message (empty return value). |
Input | StringFromFile | Read a line from a file. |
Input | FileToString | Read an entire file. |
Input | CSVRead | Read from CSV delimited file. |
Input | XPath | Use an XPath expression to read from a file. |
Calculation | counter | Generate an incrementing number. |
Calculation | intSum | Add int numbers. |
Calculation | longSum | Add long numbers. |
Calculation | Random | Generate a random number. |
Calculation | RandomString | Generate a random string. |
Calculation | UUID | Generate a random type 4 UUID. |
Scripting | BeanShell | Run a BeanShell script. |
Scripting | javaScript | Process JavaScript (Mozilla Rhino). |
Scripting | jexl, jexl2 | Evaluate a Commons Jexl expression. |
Properties | property | Read a property. |
Properties | P | Read a property (shorthand method). |
Properties | setProperty | Set a JMeter property. |
Variables | split | Split a string into variables. |
Variables | V | Evaluate a variable name. |
Variables | eval | Evaluate a variable expression. |
Variables | evalVar | Evaluate an expression stored in a variable. |
String | regexFunction | Parse previous response using a regular expression. |
String | escapeOroRegexpChars | Quote meta chars used by ORO regular expression. |
String | char | Generate Unicode char values from a list of numbers. |
String | unescape | Process strings containing Java escapes (e.g. \n & \t). |
String | unescapeHtml | Decode HTML-encoded strings. |
String | escapeHtml | Encode strings using HTML encoding. |
String | TestPlanName | Return name of current test plan. |
- 2種類の機能があります-
- ユーザー定義の静的な値(または変数)
- 組み込み関数
- ユーザー定義の静的な値を使用すると、テストツリーをコンパイルして実行するために送信するときに、静的な値に置き換える変数を定義できます。
- 変数はネストできません。つまり、 $ \ {Var $ \ {N}} は機能しません。
- V(変数)関数(2.2以降のバージョン)を使用してこれを行うことができます-$ \ { V(Var $ \ {N})}。
- このタイプの置換は機能なしでも可能ですが、あまり便利ではなく、直感的でもありません。
関数と変数を使用する場所
関数と変数は、任意のテストコンポーネントの任意のフィールドに書き込むことができます。
次の機能は、テスト計画でうまく機能するはずです-
- intSum
- longSum
- machineName
- BeanShell
- javaScript
- jexl
- ランダム
- time
- プロパティ関数
- ログ機能
テスト計画で使用される機能には、いくつかの制限があります。 JMeterスレッド変数は、関数の処理時に完全には設定されていないため、パラメーターとして渡された変数名は設定されず、変数参照は機能しません。 したがって、_split()_および_regex()_および変数評価関数は機能しません。 _threadNum()_関数は機能せず、テスト計画レベルでは意味がありません。
変数と関数の参照
- テスト要素内の変数の参照は、変数名を「$ \ {」および「}」で囲んで行います。
- 関数は同じ方法で参照されますが、慣例により、ユーザー名の名前との競合を避けるために、関数の名前は「__」で始まります。
- 一部の関数は、引数を設定するために引数を取ります。これらは、カンマ区切りの括弧で囲みます。 関数が引数を取らない場合、括弧は省略できます。 たとえば-
${__BeanShell(vars.put("name"\,"value"))}
- または、スクリプトを変数として定義できます。 テスト計画-
SCRIPT vars.put("name","value")
- スクリプトは次のように参照できます-
${__BeanShell(${SCRIPT})}
関数ヘルパーダイアログ
関数ヘルパーダイアログは、JMeterの[オプション]タブから利用できます。
- 関数ヘルパーを使用して、プルダウンから関数を選択し、その引数に値を割り当てることができます。 表の左の列は引数の簡単な説明を提供し、右の列はその引数の値を書き込む場所です。 異なる関数は異なる引数を取ります。
- これが完了したら、「生成」ボタンをクリックすると、適切な文字列が生成されます。必要な場所にテストプランにコピーアンドペーストできます。
事前定義された変数
一部の変数は、JMeterによって内部的に定義されています。 彼らは-
- COOKIE_cookiename-Cookie値が含まれています。
- JMeterThread.last_sample_ok-最後のサンプルがOKであったかどうか-true/false。 注-これは、ポストプロセッサとアサーションが実行された後に更新されます。
- START変数。
定義済みのプロパティ
一部の組み込みプロパティは、JMeterによって定義されます。 これらは以下にリストされています。 便宜上、STARTプロパティも同じ名前の変数にコピーされます。
- START.MS-ミリ秒単位のJMeter開始時間。
- START.YMD-yyyyMMddとしてのJMeterの開始時間。
- START.HMS-HHmmssとしてのJMeterの開始時間。
- TESTSTART.MS-ミリ秒単位のテスト開始時間。
START変数/プロパティは、テストの開始時間ではなく、JMeterの開始時間を表すことに注意してください。 主にファイル名などでの使用を目的としています。
jMeter-正規表現
正規表現は、パターンに基づいてテキストを検索および操作するために使用されます。 JMeterは、パターンマッチングソフトウェアhttps://attic.apache.org/projects/jakarta-orol[Apache Jakarta ORO]を含めることにより、JMeterテスト計画全体で使用されている正規表現またはパターンの形式を解釈します。
正規表現を使用すると、確かに多くの時間を節約し、テスト計画を作成または強化する際の柔軟性を高めることができます。 正規表現は、結果を予測することが不可能または非常に困難な場合に、ページから情報を取得する簡単な方法を提供します。
'_式を使用する標準的な使用例は、サーバーの応答からセッションIDを取得することです。 サーバーが一意のセッションキーを返す場合、ロードスクリプトの式を使用して簡単に取得できます。_
テスト計画で正規表現を使用するには、JMeterのRegular Expression Extractorを使用する必要があります。 テスト計画の任意のコンポーネントに正規表現を配置できます。
応答アサーションテスト要素で使用される contains と matches の違いを強調する価値があります-
- contains は、正規表現がターゲットの少なくとも一部と一致したことを意味するため、「alphabet」は「contains」「ph.b。」正規表現はサブストリング「phabe」と一致するためです。
- matches は、正規表現がターゲット全体に一致したことを意味します。 したがって、「アルファベット」は「al。* t」と「一致」します。
あなたがウェブページの次の部分を一致させたいとします-
name = "file" value = "readme.txt"
そして、readme.txtを抽出します。 適切な正規表現は-
name = "file" value = "(.+?)">
上記の特殊文字は-
- (*および)*-返される一致文字列の部分を囲みます
- 。-任意の文字に一致
- + -1回以上
- ?-最初の一致が成功したときに停止する
JMeterテスト計画を作成する
テスト計画を作成して、正規表現エクストラクター(ポストプロセッサ要素)での正規表現の使用を理解しましょう。 この要素は、正規表現を使用して現在のページからテキストを抽出し、目的の要素が適合するテキストパターンを識別します。
最初に、人とそのメールIDのリストを含むHTMLページを作成します。 これをTomcatサーバーにデプロイします。 html(indexl)の内容は次のとおりです-
<html>
<head>
</head>
<body>
<table style = "border: 1px solid #000000;">
<th style = "border: 1px solid #000000;">ID</th>
<th style = "border: 1px solid #000000;">name</th>
<th style = "border: 1px solid #000000;">Email</th>
<tr>
<td id = "ID" style = "border: 1px solid #000000;">3</td>
<td id = "Name" style = "border: 1px solid #000000;">Manisha</td>
<td id = "Email" style = "border: 1px solid #000000;">[email protected]</td>
</tr>
<tr>
<td id = "ID" style = "border: 1px solid #000000;">4</td>
<td id = "Name" style = "border: 1px solid #000000;">joe</td>
<td id = "Email" style = "border: 1px solid #000000;">[email protected]</td>
</tr>
</table>
</body>
</html>
Tomcatサーバーにデプロイすると、このページは次のスクリーンショットに示すようになります-
テスト計画では、上記の個人リストページに表示される個人テーブルの最初の行で個人を選択します。 この人物のIDを取得するには、最初に2行目の人物を見つけるパターンを決定します。
次のスナップショットからわかるように、2番目の人のIDは<td id = "ID">および</td>で囲まれており、このパターンを持つデータの2行目です。 これを使用して、情報を抽出する正確なパターンに一致させることができます。 このページから2つの情報、人物IDと人物名を抽出したいので、フィールドは次のように定義されています-
JMeterを起動し、スレッドグループを追加します*テスト計画→追加→スレッド(ユーザー)→スレッドグループ*。
次に、サンプラーHTTPリクエストを追加し、テスト計画を選択して、右クリック*追加→サンプラー→HTTPリクエスト*を入力し、以下に示すように詳細を入力します-
- 名前-管理
- *サーバー名またはIP *-localhost
- ポート番号-8080
- Protocol -これを空白のままにします。つまり、プロトコルとしてHTTPが必要です。
- パス-jmeter/indexl
次に、正規表現エクストラクターを追加します。 HTTPリクエストサンプラー(管理)を選択し、[追加]→[ポストプロセッサ]→[正規表現抽出]を右クリックします。
次の表は、上記のスクリーンショットで使用されるフィールドの説明を提供します-
Sr.No | Field & Description |
---|---|
1 |
Reference Name 抽出されたテストが保存される変数の名前(refname)。 |
2 |
Regular Expression 抽出されるテキストが照合されるパターン。 抽出されるテキストグループは、文字「(」および「)」で囲まれています。 「。?」を使用します<td ..> .. </td>タグで囲まれたテキストの単一インスタンスを示します。 この例では、式は− <td id = "ID">(?)</td> \ s <td id = "Name">(+?)</td> \ s |
3 |
Template '('および ')'で囲まれたパターンの各グループの順序に従って、変数Personのメンバーとして配置された抽出テキストの各グループ。 各グループはrefname_g#として保存されます。refnameは参照名として入力した文字列で、#はグループ番号です。 グループ1を指す$ 1 $、グループ2を指す$ 2 $など。 $ 0 $は、式全体が一致するものを指します。 この例では、抽出するIDはPerson_g1に保持され、名前の値はPerson_g2に保存されます。 |
4 |
Match No. 2番目のボランティアに一致するこのパターンの2番目の出現のみを抽出する予定なので、値2を使用します。 値0はランダムなマッチングを行いますが、ForEachコントローラーでは負の値を使用する必要があります。 |
5 |
Default アイテムが見つからない場合、これがデフォルト値になります。 これはオプションのフィールドです。 空白のままにしてもかまいません。 |
このテスト計画の結果をキャプチャするリスナーを追加します。 スレッドグループを右クリックし、追加→リスナー→結果ツリーの表示オプションを選択して、リスナーを追加します。
テスト計画を_reg_express_test.jmx_として保存し、テストを実行します。 次のスクリーンショットに示すように、出力は成功します-
jMeter-ベストプラクティス
JMeterには、特に分散環境で実行する場合にいくつかの制限があります。 これらのガイドラインに従うことは、実際の継続的な負荷を作成するのに役立ちます-
場合によっては、JMeterの複数のインスタンスを使用してください。スレッドの数が多くなります。
スコーピングルールを確認し、それに応じて設計します。
すべての要素に対して常に命名規則を使用します。
スクリプトを実行する前に、デフォルトのブラウザ接続設定を確認してください。
リスナーを適切に追加します。
リソース要件を削減するためのいくつかの提案があります-
- 非GUIモードを使用します:jmeter -n -t test.jmx -l test.jtl。
- できるだけ少ないリスナーを使用してください。上記のように-lフラグを使用すると、すべて削除または無効化できます。
- 「結果ツリーの表示」リスナーを無効にすると、大量のメモリを消費し、コンソールがフリーズしたり、JMeterのメモリが不足したりする可能性があります。 ただし、「エラー」のみがチェックされた状態で「結果ツリーの表示」リスナーを使用しても安全です。
- 類似のサンプラーを多数使用するのではなく、ループ内で同じサンプラーを使用し、変数(CSVデータセット)を使用してサンプルを変更します。 または、アクセスログサンプラーを使用することもできます。
- 機能モードを使用しないでください。
- XMLではなくCSV出力を使用します。
- 必要なデータのみを保存してください。
- できるだけ少ないアサーションを使用してください。
- 多くのメモリを消費するため、すべてのJMeterグラフを無効にします。 Webインターフェイスの[JTL]タブを使用して、すべてのリアルタイムグラフを表示できます。
- 使用する場合は、CSV Data Set Configからローカルパスを消去することを忘れないでください。
- すべてのテスト実行の前に[ファイル]タブをクリーニングします。