Heroku Tips(6) BlazeMeter による負荷テスト

January 22, 2019 Naoki Kitaarashi

皆さん、こんにちは。アピリオ北嵐です。Heroku Tipsの6回目は、Heroku アドオンのBlazeMeterをご紹介したいと思います。クラウドの世界においても構築したWebアプリケーションに対する負荷テストは従来と同じくとても重要なものです。HerokuはPaaS環境であるため、手軽にサーバー実行環境を準備することができますが、SalesforceなどのSaaSと異なり、アプリケーションの性能までは保証してくれません。アプリケーション自体にボトルネックがあったり、DynoやPostgresなどのミドルウェアのプラン設定が適切でなければ、本番環境で期待したパフォーマンスは実現できません。そのため、できるだけ本番に近い負荷をかけて負荷テストを実施することが理想的ですが、多くのプロジェクトではリソースの関係から大量の負荷をかけることが難しいのが実情だと思います。今回ご紹介するBlazeMeterはJMeter互換の負荷テストツールであり、Herokuにアドオンとして追加することで、簡単な設定でHerokuアプリに対する大規模な負荷テストを行うことができます。

BlazeMeterの特長

BlazeMeterはCA Technologies傘下のBlazeMeter社が提供する SaaS型の負荷テストサービスです。特徴としては、SaaSであるため負荷テストを実行するためのインフラを自前で準備する必要がないこと、100% JMeter 互換であるためJMeterで作成したスクリプトを使ってテストを実行できることの2つが挙げられます。BlazeMeterはHerokuに特化したサービスではないですが、Herokuアドオンとして使用することで、Herokuの課金クレジット内で使用することができるため、別途契約を結ぶ必要がありません。

BlazeMeterは、OSSの負荷テストツールとしては最もポピュラーなJMeterで作成したスクリプトをそのまま実行できるため、とても手軽にテストを実行することができます。後述しますが、テスト実行環境の設定や結果の参照も使い易いGUI経由で直感的に行えるため、マニュアルを読み込む必要はありません。

BlazeMeter ホームページ(英語)

BlazeMeterの導入と設定

まずは Herokuアドオン として BlazeMeterを導入して下さい。

無償プランが準備されていますので、評価用にはこちらを選択して下さい。無償プランの制約は下記のようなものです。

  • ユーザー数は50まで
  • 負荷テストの実行時間は20分まで
  • テスト実行は10回まで

BlazeMeterを立ち上げると、下記のようなBlazeMeterの設定画面が別タブで開きますので、上部の「Create Test」ボタンを押します。

テストタイプを選ぶ画面が表示されます。いくつか種類がありますが、ここでは一番上の「JMeter Test(new)」を選択して下さい。

新規のプロジェクトが作成されますので、「Upload Script」からローカルで作成したJMeter用のスクリプトをアップロードして登録します。

スクリプトを登録したら、負荷テストの設定を画面上の「LOAD CONFIGURATION」セクションから行います。

Total Users 負荷テストを実行するユーザーの最大数
Duration(min) テストの実行時間(分)
Ramp up Time(min) 最大ユーザー数を立ち上げるまでの時間(最初から設定した最大のユーザー数で負荷をかけるわけではなく、最大数に達するまでにはRamp up Timeに設定した時間(分)を要する

[設定項目の説明]

下の例では、20ユーザーで20分間のテストを実行するように設定しています。Ramp up時間は1分なので、実行開始から1分後に最大の20ユーザーでの負荷がかかります。

[BlazeMeterのメイン画面]

BlazeMaterはAWS上で稼働するサービスであり、AWSのどのリージョンにテスト環境をセットアップし実行するかをここで設定します。TokyoのAPリージョンを選択することもできます。

初めて実行する場合は「Debug Test」を使ってスクリプトが正しく実行されるかを確認すると良いです。デバッグの場合は、10スレッド(10ユーザー)で 5分 または 100 iteration(スクリプトを100回実行) でテストが実行されます。

テストを実行すると、下記の画面が表示されAWSのクラウド環境に実行環境が準備されます。テストの規模が大きい場合は、この作業には数分かかります。

テストの実行と結果の参照

テストが開始されると下記のような実行時の状況が表示され、負荷(実行ユーザー数)と応答時間をグラフィカルに参照することができます。下記のグラフはユーザー数とリクエスト数/レスポンス時間の関係を表しています。テストを開始すると指定された実行回数の完了(Iteration)または実行時間が経過するまで、負荷をかけ続けます。この画面で大量のエラー(ステータスコードが500)が報告された場合は、何らかの原因でスクリプトの実行が失敗しているため、原因を判別する必要があります。失敗する原因としてはセッション周りやデータに起因することが多いです。

[負荷テストの実行結果]

[大量にエラーが発生したケース]

テスト全体の実行状況の他に、BlazeMeterはテスト実行時の様々なデータを可視化してくれますので、詳細な分析を行うこともできます。

下記の画面では、スクリプトのステップごとに平均実行時間、秒単位のヒット数、n%のユーザの最大実行時間、エラーの数などを表形式で参照できます。

下記はスクリプトのステップごとにユーザー数とレスポンス時間の関係を示すグラフです。どのリクエストがボトルネックになっているかを調べる時に便利です。

HTTPステータスごとのエラー数を参照することもできますし、さらに詳しいデータを参照したい場合は、Lowレベルの実行ログをダウンロードする機能も提供されています。

[ステータスごとのエラー状況の表示]

まとめ

有償サービスにはなりますが、BlazeMeterを使うことでHerokuアプリの負荷テストを手軽に実行することが可能になります。JMeterのスクリプトをそのまま使えることもこのツールの強みですが、大量ユーザーで負荷をかけるための大規模なリソース環境を画面上の簡単な設定だけで実現できることも大きな利点でしょう。まさにクラウド環境のメリットを感じることができるツールだと感じました。

無償プランも準備されていますので、手軽に試してみることができます。なお、テスト用のJMeter のスクリプトはローカル環境で作成して下さい。BlazeMeterにはスクリプトの作成機能はありませんので、従来と変わらずエンジニアがテストシナリオを考えて、ツールを使って作成する必要があります。

 

 

 

著者について

某大手SIベンダーを退職し2015年からアピリオの一員としてクラウドの世界に身を投じているシニアエンジニアです。プロジェクトでの立場に応じて、アーキテクト、リーダー、デベロッパーと様々なロールの仕事に携わっています。1人のエンジニアとして技術の最先端に居続けることが技術者としてのこだわりです (^o^) やはりクラウドの世界は面白い!

Naoki Kitaarashi のコンテンツをもっと見る
戻る
CRMを成功に導くために(全3回) | 最終回 CRMを成功に導く戦略立案
CRMを成功に導くために(全3回) | 最終回 CRMを成功に導く戦略立案

プロジェクト成功の鍵となる「ビジョン」と「プラン」の立案アプローチについてご紹介します。

次へ
Heroku Tips (5) Heroku Connect
Heroku Tips (5) Heroku Connect

5回目となる今回は Heroku Connect を取り上げてみたいと思います。Heroku Connect はその名前にあるように Salesforce と Heroku 間のデータを”コネクト”つまり同期するア...

アピリオまでお気軽にお問合せください

ご質問はこちら