はじめに
RettyでtoB(飲食店)向けのWebエンジニアをしている渡辺です。 業務でTaurusという負荷テストフレームワークを使用したところかなり良かったので、熱く紹介します。
Taurusを使うと負荷試験結果がこんなにみやすく確認できます。やばくないですか?(語彙力)
コンソール上のレポート
Web上のレポート
※ この記事はRetty AdventCalendarPart2の9日目の記事です。
Taurusとは
Taurusのチュートリアルサイトでは以下のように紹介されています。
Taurus is an open source automation framework for running various open source load testing tools and functional testing tools. Taurus supports Apache JMeter, the most popular open source load testing tool, Selenium, Gatling, The Grinder, and others
出典:Introduction to Taurus
Taurusは、BlazeMeterが公開しているオープンソースのテスト自動化フレームワークです。 JSON または YAML でテストシナリオを定義でき、Apache JMeter、Selenium、Gatling、The Grinderなどの他のテストツールをラッパーとして実行することができます。
Taurusはこんなところが良い
TaurusではYAMLでテストシナリオを定義できます。 まず、Taurusの公式ページにあるサンプルの設定ファイルを参考にして、YAMLファイルを作成します。
execution: concurrency: 100 ramp-up: 1m hold-for: 5m scenario: quick-test scenarios: quick-test: requests: - http://blazedemo.com reporting: - module: console - module: blazemeter
CLIで bzt example.yaml
を実行するとApache JMeterが起動して先ほどのレポートが出力されます。
使ってみた感想としては、レポートがWebで見れるのでURLをチームに共有して簡単に確認できるのが便利でした。
いろいろなテストツールをサポートしているのも嬉しく、普段使っているテストツールの設定ファイルをTaurusで実行することでWeb上でレポートを出力して確認できると導入しやすいかなと感じました。
ただ、個人的には公式ドキュメントが少し読みづらかったです...
実際にインストールしてから負荷試験をするまでは以下で詳細に説明しようと思います。 これから負荷試験を行う方やTaurusが気になっていた方に参考になればと思います。
Taurusを使って負荷試験をするまで
インストール
インストール方法はTaurusのインストールページで各OS環境のインストール方法やDockerでの実行方法が確認できます。
私はMac OSで開発しているのでbrewコマンドでインストールしました。
brew install bzt
設定ファイルの準備
サンプルファイルをもとにYAMLでの設定ファイル作成を説明していきます。
execution: concurrency: 20 ramp-up: 3m hold-for: 15m throughput: 15 scenario: sample-request scenarios: sample-request: requests: - http://blazedemo.com reporting: - module: console - module: final-stats - module: blazemeter
最上位のキーは、execution、scenarios、reporting、settings、provisioningになります。
主要な実行設定のexecutionとscenarios、reportingについて説明していきます。
executionは、実行中に実行されるツール、使用するシナリオなどを宣言します。
利用可能な設定は以下です。
- concurrency: 同時接続する仮想ユーザーの数
- hold-for:設定した concurrency を保持する時間
- ramp-up :設定した concurrency に達するまでの時間
- iterations:シナリオの反復回数を制限する
- throughput:最大秒間リクエストを制限する
- scenario:実行するscenariosに設定されているシナリオ名
scenariosでは、APIリクエストの設定ができます。
API 呼び出し設定をrequestsキーで設定できます。
デフォルトでGETメソッドでの呼び出しになりますが、HTTPメソッドやリクエストヘッダー、リクエストボディの設定をする場合は以下のよう記述する必要があります。
scenarios: sample-post-request: requests: - url: https://api.example.com/stocks/GetReservableDateTime method: POST headers: Content-Type: application/json Authorization: <type> <credentials> body: restaurant_id: 1
reportingは、レポートの出力設定です。
console: 実行中の性能統計データをリアルタイムでコンソールに表示する
final-stats: サマリを表示する
blazemeter: オンラインレポートを作成する
リクエストボディやURL、クエリ文字列をランダムに変更して負荷をかけたい場合があると思います。
その場合、以下のように properties
を指定してJMeterのランダム関数 ${__Random()}
を使用しました。
scenarios: sample-post-request: requests: - url: https://api.example.com/stocks/GetReservableDateTime method: POST headers: Content-Type: application/json body: restaurant_id: ${__P(restaurant_id_${__Random(1,5)})} properties: restaurant_id: restaurant_id_1: 1111 restaurant_id_2: 1112 restaurant_id_3: 1113 restaurant_id_4: 1114 restaurant_id_5: 1115
確認できていないですが、デフォルトで実行するテストツールがApache JMeterだったのでJMXファイルの記法が使えたのかもです。 実行するテストツールはsettingsのdefault-executorキーで指定できます
settings: default-executor: gatling
実行
YAMLファイルを指定した実行
bzt example.yaml
Apache JMeterのJMXファイルを指定した実行
bzt example.jmx
コマンドラインによる上書き実行
bzt -o scenario.sample.data-sources.0=data.csv config.yaml
参考:Command-Line Tool
実行結果レポート
Taurusの公式ページのサンプル設定ファイルquick_test.ymlに以下のレポート出力設定をして説明します。
execution: concurrency: 100 ramp-up: 1m hold-for: 5m scenario: quick-test scenarios: quick-test: requests: - http://blazedemo.com reporting: - module: console # 実行中の性能統計データをリアルタイムでコンソールに表示する - module: blazemeter # オンラインレポートを作成
Console Reporter
実行中の性能統計データがリアルタイムでコンソールに表示されるため、エラーが多発する場合やうまく負荷がかかっていない場合にすぐにテストを止めて原因調査することができます。 reportingキーに module: consoleを指定すると設定できます。
reporting: - module: console
Blaze Meter Reporter
Web上でより見やすい状態で実行結果のレポートが出力されます。そして、URLを共有することで簡単に実行結果を共有できます。
無料で使うことができて、Taurusのアカウントを作成していればそのアカウントに紐付けて管理できます。
アカウントがなくとも使用することができますが、その場合はURLの有効期限は7日間になります。
reportingキーに module: blazemeterを指定すると設定できます。
reporting: - module: blazemeter
参考:BlazeMeter Reporting Service