Stelligent社CTO、Paul Duvall氏(source)が、「Automation for the people」(source) シリーズで、継続的インテグレーションサーバにJMeterとAntをどのように統合するか(source) to解説する。統合することで、開発したシステムのある特定の負荷状況における振る舞いを開発者が素早く判断したり、変更に対応したりすることができる。Duvall氏は、まずJMeterのテストで計測できるいくつかのメトリクスを挙げる。:
- ソフトウェアシステムに何人のユーザが同時にアクセスできますか?
- 性能が悪化することなくどのくらいのデータをロードすることができますか?
- システム処理能力の要件は何ですか?
- これらの要件はどのくらいの間隔でテストされますか?
- もし、少なくとも一日に一度、これらの負荷と性能の要件が満たされていることを明らかにし、確認することができたとしたらどうでしょうか?
Duvall氏はさらに説明する。CIサーバでスケジュールした自動テストは、一日のうちマシンの使用量が少ないときに実行することができる。同様に、「たった一人で設定してテストを実行するように頼んだ場合に発生しうるボトルネックやエラーを減らす」ことができる。そうした環境をセットアップするために必要な主な手順について説明する。:
1. JMeterを実行し、テスト計画を作成する JMeter(サイト・英語)はApacheプロジェクトで機能的振る舞いの負荷テストを行い、パフォーマンスを計測するJavaツールである。GUIかコマンドラインから呼び出して、テスト計画によって定義された様々な負荷テストを実行することができる。サンプルのテスト計画には、ウェブテスト計画、FTPテスト計画、ウェブサービステスト計画などが含まれる。このようなテスト計画は、GUIを通して設定し、XML形式で保存することができる。こうしてテストを実行する方法をカスタマイズするために、構成値のパラメタ化が可能となる。
2. AntでJMeterテストを駆動する
実装例(source)を参考にして、JMeter Antタスクを定義する。例えば、次のように定義できる。"
<jmeter
jmeterhome="${jmeter.home}"
resultlog="${basedir}/target/JMeterResults.xml">
<testplans includes="BreweryTestPlan.jmx" dir="${basedir}/tests/load">
</testplans>
</jmeter>
3. XSLTとHTMLでテスト結果のレポートを表示する 次に、JMeterのextrasディレクトリで提供されたXSLTスクリプトを使って、テストの実行結果、「JMeterResults.xml」をHTML形式のレポートにどのように変換するかを示す。生成されたレポートに載っているのは、実行した負荷テストひとつひとつについて、実行時のテスト状況と時間、また全テストの状況と時間の集計結果である。
4. JMeterテストをカスタマイズする テストを実行する方法はパラメタとプロパティを使ってカスタマイズできる。テスト時や実行時など特定の環境にテストを適合するために、.jmx ファイルにトークンを設定する。後で特定の環境においてテストを実行する場合に、トークンをフィルタリングしたり変更したりできる。Duvall氏は、どのようにJVMメモリを増やし、スレッドとループの数を指定するか例を示した。
5. CI環境でJMeterテストを統合する . Duvall氏は、継続的インテグレーションサーバ、CruiseControlと統合する例を示した。例では、午後11時に毎日実行するビルドをスケジュールする。...
<modificationset>
<svn repositorylocation="${svnrepo.location}">
<timebuild time="2300"/>
...
</svn>
</modificationset>
CruiseControlのconfig.xml ファイルに2、3行追加すれば、JMeterテスト結果のレポートをCruiseControlのプロジェクトダッシュボードから利用することができる。
継続的パフォーマンスについては、Kirk Pepperdine氏の Iterative, Automated and Continuous Performance(source) 、および、Steve Haines氏の continuous performance management presentation(source)(PPTのダウンロード) で取り上げられている。