Apache JMeterは手軽に負荷テストが行える便利なツールですが、適当に使うと、適切に負荷をかけられなかったりします・・・
JMeterのオフィシャルサイトには、JMeterを使う際のベストプラクティスが紹介されているので、
本記事はそれを翻訳して、ざっくりとわかりやすくまとめた記事になります。
長いので前編と後編に記事分けたいと思います。
原文(英語):Best Practices – Apache JMeter – User’s Manual
タイトル通り、なるべく最新版のJMeterを使いましょう。
少なくとも、最新バージョンより3つ以上古いバージョンは使わないようにしましょう。
JMeterで実行できるスレッド数は、JMeterを実行するPCの性能と、テスト計画の作り方、その両方が大きく影響します。
大規模な負荷テストの場合は分散モードを使用するか、または複数のマシンで複数のCLI JMeterインスタンスを実行することを検討してください。
各スレッドグループの配下にHTTP Cookie Managerを配置しましょう。
HTTP ヘッダー マネージャーを使用すると、JMeter が HTTP 要求ヘッダーで送信する情報をカスタマイズできます。このヘッダーには、「User-Agent」、「Pragma」、「Referer」などのプロパティがを含むことができます。
HTTP クッキー マネージャーと同様に、HTTP ヘッダー マネージャーは、スレッド グループ の配下に追加する必要があります。
「HTTP(S) Test Script Recorder」は、JMeterを日本語表示にすると「HTTP プロキシサーバー」という機能名称になっています。
「HTTPプロキシサーバー」を使ったシナリオテストの作成方法は以下の記事で詳しく解説してます。
画面操作でテストシナリオを作成できますが、テストに直接関係のないリクエストも全て記録されていまいます。これらを除外してテストスクリプトは作成しましょう。
一度作成し終えてから、後から除外することもできますが、除外パターンをあらかじめ設定しておくこともできます。
例えば、画像のダウンロードの操作を記録しないようにする場合は、「正規表現 + 拡張性」の設定で、
“.*.gif”
「gif画像のダウンロード部分は除外する」みたいな設定が可能です。
例えば、スレッドごとに異なるユーザーでログインする、みたいなことをやりたい場合、テスト計画の配下にテスト計画の配下にCSV DataSet configurationを追加し、ユーザー名とパスワードをカンマ区切りで記載したCSVファイルをJMeterへ取り込みます。
そして使用するサンプラーで、ログイン名を ${USER} に、パスワードを ${PASS} といった変数に置き換えます。
以下のようなことをして、無駄なリソースは使わないようにしましょう。
・JMeterの実行はGUIモードではなく、CLIモードで実行する。CLIモードでの起動は以下
jmeter -n -t test.jmx -l test.jtl
・リスナーはできるだけ少なくしましょう、上記のコマンドのように起動コマンドのオプションに -l を付けると、それらを削除、または無効にできます。
・負荷テストのリスナーに「結果をツリーで表示」「結果を表で表示」のリスナーは使わないようにしましょう。こちらはスクリプト作成時、スクリプトのデバッグ用に使いましょう
・同じサンプラーを複数用意して使うのではなく、なるべく変数を使い(前述の”その6”参照)1つのサンプラーをループさせて使うような設計にしましょう。
・Functional テストモードを使用しない。
・XMLでなく、CSV出力にする
・本当に必要なデータだけを保存する
。可能な限りアサーションは少なくする
・最もパフォーマンスの高いスクリプト言語を使用する
テストデータに大量のデータ(特にランダムなデータ)が必要な場合、CSV DataSet を使用することで実行時のリソースの浪費を回避できます。
JMeter ベストプラクティス(前編) 以上となります。
後編は後日・・・・。