JMeterを使ってみた

Apache JMeterというプロダクトがあります。これは作成したシナリオに従ってHTTP GET/POSTリクエストなどを飛ばすことができるもので、アクセス頻度なども指定できるのでWebサービス負荷試験などに使えるものです。

使い方についての日本語のページは探せばそれなりにあるので、そちらを見るとして…
今から3分で jmeter の使い方を身に付ける (負荷テスト入門) - 主に言語とシステム開発に関して
JMeter | TECHSCORE(テックスコア)
ちょっと複雑そうなことをしたときに、一見しただけではよく分からなかったものについて書き記しておきます。

  • Ramp-Up期間

スレッドグループを作成した時にいくつかパラメータを指定出来ますが、スレッド数(→実質的には試験中にアクセスするユーザ数)、ループ回数(→シナリオを何回実行するか)は分かりやすいものの、Ramp-Up期間の意味が分かりにくいです。この値は、すべてのスレッドは一定間隔で起動していくとして、「すべてを起動するのにどれくらいの時間をかけるか」を表すもので、例えばスレッド数=5、Ramp-Up期間=10secとすると、約2秒間隔でスレッドが1つずつ起動していきます(始点・終点を考えなければ)。

  • タイマの位置

HTTPリクエストなどの間に間隔を開けたい場合、定数タイマなどをスレッドグループの中に入れます。この際、そのタイマの効果が現れるのは、タイマと同じ階層にあるHTTPリクエスト等すべてに対してです。タイマの位置にきた時だけスリープするということではない。なので、シナリオ全体について、リクエストごとに一定期間のスリープを入れる場合はスレッドグループ直下にタイマを1つだけ入れれば良いです。そうではなく特定のリクエストにスリープを入れたい場合は、そのリクエストの子としてタイマをセットします。なお、タイマでスリープがかかるのは、当該リクエストの実行前です(実行後ではない)。

  • クッキーを保持したい

ログイン処理を行うWebサービスをテストする場合は、何も考えずにHTTPリクエストを投げると、それぞれが別の人から投げられたように(サーバ側からは)見えるので、どのようなURLを投げても延々とログイン画面に飛ばされる…といったことになります。そのためにはクッキーをJMeter側で保持する必要があるのですが…。幸いにも「設定エレメント」→「HTTPクッキーマネージャ」を追加するだけでクッキーを自動で保存してくれるようになります。また、必要であれば予めクッキーのデータをセットすることも可能。

  • UserAgentを偽装したい

スマフォ用サイトなどのテストのために、JMeterをスマフォとして偽装したい場合があります。「設定エレメント」→「HTTPヘッダマネージャ」を追加して、名前:User-Agent、値:(適当なスマフォのUA)を指定すれば目的を達成出来ます。

  • 遷移先画面に現在の画面に含まれている情報を渡したい

次の画面に遷移するHTTPリクエストを投げる際のURL or POSTデータとして、今の画面に含まれているデータ(とあるhiddenのvalueなど)を渡したい時が意外と多いと思います。この場合、その値を正規表現で抽出して、その後に用いることができます。このページの解説が分かりやすい。
JMeter2.7正規表現抽出

この、正規表現での情報抽出が何気に便利で、Seleniumなどを持ち出さずともJMeterだけである種のWebサービスの操作の自動化などに手軽に使えそうです。