JMeter フォームの負荷テスト(GET,POSTでパラメータを渡す)
更新:2017-02-10
ニュースやブログのような読み物系のサイトにおいては、単純なページアクセスの負荷テストで十分かと思います。
ところが、会員サイトにおけるログインや、ECサイトのカート決済、またキャンペーンサイトなどで展開されるプレゼントエントリーなどは、「入力フォームになんらかの値を挿入し、次の画面へ遷移する」といった動作が必要になります。
JMeterは動的に値を入力する処理もシナリオとして登録することが可能なため、フォームを利用したページの負荷テストも実施することが出来ます。
そこで本日は、申し込みなどのフォームを対象とした負荷テストについて、説明したいと思います。
説明にあたって
JMeterの基本的な内容については、以下のリンクを参照してください。
また、フォームの送信形式にはGET、POSTのMethodが存在します。
それぞれで設定箇所が異なりますので両方とも説明していきたいと思います。
実践(GETの場合)
まず手始めにGETから説明していきます。
penguinweb.netにテストページ(GET)を用意していますので、そちらの画面説明をします。
テストページ(GET)にアクセスすると、以下のキャプチャの画面が表示されますので、入力フォームに文字列をいれて入力ボタンをクリックします。
すると、入力した文字列を表示されます。
動作はたったこれだけです。
キャプチャでは分かりませんが、アドレスバーには「http://penguinweb.net/52.html?get_text=MISLEAD%E5%85%A5%E5%8A%9B%E3%83%86%E3%82%B9%E3%83%88」と表示されます。
次にJMeterを起動します。
ここでは、テスト計画を「フォームで負荷テスト(GET)」としています。
スレッドグループは、あまり負荷をかけるとレンタルサーバに怒られてしまうため、スレッド数:5、Ramp-Up:10、ループ:5としてます。
続いて、サンプラーからHTTPリクエストを選択します。
ここでは、まずテストページにアクセスするだけの処理を設定したいのでWebサーバ・ポート・プロトコル・メソッド・パスをそれぞれ以下のキャプチャのとおり設定します。
なお、httpsのプロトコルでテストする必要がある場合は、JMeter httpsリクエストを記憶するを参照してください。
テストページへのアクセスを設定したら、次はテストページに値を入力させます。
アクセスのときに設定したWebサーバ・ポート・プロトコル・メソッド・パスをそのまま設定し、「リクエストで送るパラメータ」を設定します。
「リクエストで送るパラメータ」は、以下のキャプチャの矢印にある「追加」ボタンをクリックすることで入力フィールドが追加されますのでそこに名前(name)と値(value)を指定します。
ここではnameに「get_text」、valueに「JMeterでGETのテスト」を指定しています。
あとは、結果も必要なので「リスナー」から「結果を表で表示」を追加します。
実行すると、以下のとおり結果が表示されます。
たいした処理ではないので、アクセスする処理と値を送る処理タイミングに開きが出てくるかと思います。
ですが、アクセスする処理が完了せずに飛ばされることはないので、全部終わるまで待ちましょう。
ここでStatusが正常であれば終了となります。
が、
ここで終わると「本当に大丈夫かな?」と不安を覚える方もいるのではないでしょうか。
ちなみに僕は不安になりました。
その理由は、
これって本当に正しく動作しているのか?
と感じだからです。
設定上は正しいですが、ちゃんと確認しないと納得できないのでしょうな。
僕という人間は。。。
そんなツールの動作を信じれない人のために、確認する方法まとめております。
JMeter 意図した通りに動いているかを確認するにて紹介していますので、そちらを参考にしてください。
実践(POSTの場合)
続いてメソッドがPOSTの場合です。
こちらもpenguinweb.netにテストページ(POST)を用意していますので、そちらを利用します。
GETのときに設定した、テストページにアクセスするサンプラーのメソッドを「POST」に、またパスを「57.html」に変更します。
続いて、リクエストを送るサンプラーもメソッドを「POST」、パスを「57.html」に変更した上で、「リクエストで送るパラメータ」の名前(name)、値(value)を指定します。
実行し、リスナー「結果を表で表示」でstatusに問題がないことを確認。
最後に、GUIで意図通りの動作をしているかを確認します。
GETが理解できれば、POSTの問題なく理解できるかと思います。
リクエストがうまく送れていない場合
もし、値を受け取る処理で意図した結果が表示されない場合は、リクエストの値が文字コードの関係で文字化けを起こしている可能性があります。
その場合は、「リクエストで送るパラメータ」の「Encode?」にもチェックをしてみてください。
記号など値を送信する場合などは、必要なことが多いです。
おかしいなと思ったらエンコードを疑ってみましょう。
SSLを利用したフォームの場合
本日紹介したフォームのテストは「httpのプロトコル」であることが前提です。
問い合わせてや資料請求などは、住所・氏名といった個人情報を入力してもらうケースなどは、SSL通信(httpsのプロトコル)を利用することになりますが、その場合は今日紹介した方法では実施できません。 (2015/6/6 できるようになったことを確認しています)
httpsのプロトコルのフォームをJMeterで実施するには、別ツールを使うなど手間がかかります。そちらは、JMeter httpsリクエストを記憶するを参考にしてください。
最後に
最近は、JavaScriptでできることが多くなったこともあり、ページの表示速度なんかも意識されています。
サイトの表示が遅いとSEOの効果としてもマイナスになるといわれています。
SEOの効果はさておき、ページの表示に5秒も10秒もかかっているようであれば、ユーザは「もういいや」となってしまいます。
特にフォームは、完了画面をすぐに表示してやらないと、ユーザとしては正しく処理が完了しているかどうか不安になります。
そうなると、商品が正しく購入できたのか、プレゼントのエントリーができているのかといった問い合わせの温床となります。
フォームの負荷テストは避けて通れないかと思いますので、この機会に是非マスターしておきましょう。
コメント一覧
コメントはありません