Pocket

JMeter で 直接DBから取得した値をWebフォームへ設定して試験する方法

  • add this entry to hatena bookmark

JMeter でWebサイト負荷試験を行う際に、DBから取得した値を使って、Webフォームに値を設定し、HTTPリクエストを行い、レスポンスを取得したいという事があるかと思います。

今回はそれを実現する方法を記載しています。この方法を使うと、Webアプリ負荷試験を行う際や、Webシナリオ試験を行う際に、DBから取得した値を元にした、より詳細な試験を行う事が可能になります。

流れとしては、まず MySQL に JDBC 接続し、SQLリクエストを発行して値を取得します。
その値を、HTTPリクエストに設定して、Webページの検索フォームに引き渡します。そして、Webサーバからの応答を確認します。

1.環境情報

今回の手順で利用するJMeterや、データベースとテーブルの情報は以下です。実施する際は、ご自身の環境に合わせて読み替えてください。

  • JMeter: Version 2.9
  • MySQL: Server version: 5.6.10 MySQL Community Server (GPL)
  • データベース名:「cakephp」
  • データベースユーザー名:「cakephp」
  • テーブル:「Catalogs」、「Sales」

ちなみに、select 文の結果は以下です。Catalogsテーブルは合計2レコード、Salesテーブルは合計4レコードです。

mysql> select * from Catalogs;
+----+---------+-------+-------+---------+
| id | name    | price | stock | comment |
+----+---------+-------+-------+---------+
|  1 | CakePHP |  1000 |     1 |         |
|  2 | JMeter  |  2000 |     1 |         |
+----+---------+-------+-------+---------+
2 rows in set (0.00 sec)

mysql>
mysql> select * from Sales;
+----+------------+-------------+---------------------+
| id | catalog_id | customer_id | date                |
+----+------------+-------------+---------------------+
|  1 |          1 |           1 | 2013-11-21 01:15:00 |
|  2 |          1 |           2 | 2013-11-21 01:15:00 |
|  3 |          2 |           1 | 2013-11-21 01:15:00 |
|  4 |          2 |           2 | 2013-11-21 01:15:00 |
+----+------------+-------------+---------------------+
4 rows in set (0.01 sec)

mysql>

Catalogsテーブルと、Salesテーブルはリレーションされています。

WebアプリからDBデータを参照した時のブラウザ画面は以下になります。4レコード分が表示されています。

search-form

では、次から、JMeter の操作となります。

2.JMeter 設定の概要

今回のJMeter設定は以下のようになります。シンプルな内容にしています。

JMeter-GUI-config

先に概要説明をさせていただきます。

  • 「スレッドグループ」は、スレッド数:1、Ramp-Up期間(秒):1、ループ回数:1にしています。
  • 「JDBC Connection Configuration」設定エレメントは、MySQLへJDBC接続する際の接続情報を設定しています。
  • 「HTTP リクエスト初期設定値」設定エレメントは、Webサーバのアドレス設定をしています。今回はHTTPリクエストが一つだけなので、そっちに集約する形でも良いと思います。
  • 「HTTPリクエスト」サンプラーは、次の「JDBC PreProcessor」で得た値を仕掛けます。
  • 「JDBC PreProcessor」前処理は、「HTTPリクエスト」の前に実行するJDBCリクエストです。
  • 「結果をツリーで表示」リスナーは、HTTPリクエストの結果を後ほど確認する為に利用します。

3.JDBC Connection Configuration

JDBC Connection Configuration の設定画面は以下になります。

JMeter-JDBC-Connection-Configuration

IPアドレスやDB名、Username は環境固有情報となります。ご自身の環境に合わせて修正してください。

4.JDBC PreProcessor

JDBC PreProcessor は前処理となります。今回の設定では、HTTPリクエストの前処理として実行します。

JMeter-JDBC-PreProcessor

SQL Query のQuery Typeを「Prepared Select Statement」にしています。

Parameter values では、Catalogsテーブルのレコード値である「JMeter」文字列を設定しています。この値がSQL文「select id from Catalogs where name = ?」に代入されます。

Parameter types では、name 列が文字列ですので、Java型「VARCHAR」を指定しています。

Variable names では、次のHTTPリクエストに引き渡すための変数名「CatalogsID」を設定しています。

Catalogsテーブルから、名前(name)が「JMeter」であるレコードのIDを取得して、CatalogsID変数に設定している形になります。

5.HTTPリクエスト

HTTPリクエストでは、先の「JDBC PreProcessor」で取得した値を設定した変数「CatalogsID」を使います。

JMeter-HTTP-Request

「パス」は、HTTPリクエストを投げるURLを指定しています。

Parametersタブでは、リクエストで送るパラメータを設定しています。

値として「${CatalogsID_1}」と設定しているところが、先の「JDBC PreProcessor」で設定した変数名を利用している箇所です。「_1」は「JDBC PreProcessor」で取得した値の1行目という意味です。

以上が大枠でのJMeter 設定となります。では、次は このシナリオを実行します。

6.シナリオの実行結果

JMeterシナリオ を実行します。実行結果は「結果をツリーで表示」リスナーで確認します。

「4.JDBC PreProcessor」で、Catalogsテーブルのレコード値である「JMeter」文字列を設定して、そのIDを取得しており、Web検索画面に、「JMeter」レコードのIDを渡しているので、Webでの検索結果は、Salesテーブルにおける「catalog_id」が「2」のレコードが表示されるはずです。

「結果をツリーで表示」リスナーで、「応答データ」タブでの応答結果を「HTML」で表示します。

JMeter-Listener-JMeter

赤枠で囲ったレコード部分ですが、「JMeter」文字列のレコードが2行表示されており、想定通りの結果になっています!

7.条件を変えた場合も確認

「JDBC PreProcessor」で違う条件を指定した場合も確認してみます。

次は、「CakePHP」文字列を指定してみます。

JMeter-JDBC-PreProcessor-2

Parameter values で「CakePHP」文字列を指定しました。

再度、シナリオを実行して、「結果をツリーで表示」リスナーを確認してみます。

JMeter-Listener-JMeter-2

ちゃんと「CakePHP」で検索された結果が表示されています!

以上が、JMeter でDBから取得した値を、Web検索フォームに渡して、値を得るという試験を行う際の手順です。

参考になればうれしいです。よろしくお願いします。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。