はじめに
システム開発第3Gの小河です。
BlazeMeter社が提供するTaurusは、オープンソースの負荷試験フレームワークです。 実務上で何度かTaurusを利用してきました。 それをもとにTaurusの利点、欠点などを紹介し、最終的にどういう場合にTaurusを使うべきかを記載します。
Taurusとは
Taurusは、JMeter、Locust、Gatling といった既存の負荷試験ツールをバックエンドとして利用できるフレームワークです。 既存の負荷試験ツールの一枚前にファサードとしてTaurusが置かれているというイメージです。
Taurusの利点
YAML形式でシナリオを記述できる
- 複雑なGUIと格闘したり、知らないプログラミング言語でシナリオを書く必要がない
- YAML形式なのでバージョン管理が容易
このようなYAMLファイルを書くことになります(実務で利用したものをベースに一部改変したものです)。 特に知らなくても比較的わかりやすいのではないかと思います。
execution:
- concurrency: 20 # 同時接続数
throughput: 100 # スループット
ramp-up: 10m # 設定した同時接続数、スループットに達するまでの時間
hold-for: 1h # 負荷の維持時間
scenario: test-200 # シナリオ名
scenarios: # シナリオの定義
test-200: # シナリオ名
requests: # どういったリクエストをして負荷をかけるか
- label: 'test-200'
method: GET
url: https://example.com?param1=${param1}¶m2=${value2} # ${xxx}でパラメータを設定できる
data-sources: # urlディレクティブに設定したパラメータをどういったデータで置き換えるか
- path: ./testdata/params.csv
delimiter: ','
encoding: "utf-8"
loop: true
random-order: true
reporting:
- module: console # 実行中の情報を表示
- module: final-stats # サマリを表示
settings:
default-executor: jmeter # デフォルトの負荷試験ツールを指定
環境構築の容易さ
Taurusを直接ホストOSにインストールして利用できますが、Dockerコンテナ上で実行させることもできます。 Dockerコンテナ上で実行するため(例えば)Javaや各テストツールをインストールすることなく、以下のコマンドだけで負荷試験を実行できます。
$ docker run --rm \
-v {YAMLファイルを配置しているディレクトリパス}:/bzt-configs \
-v {結果を格納したいディレクトリパス}:/tmp/artifacts \
blazemeter/taurus:latest \
{YAMLファイルパス}
自由に負荷試験ツールを選択できる
- バックエンドとして利用するツールの(JMeter/Locust/Gatling など)に切り替えが容易
- 各ツールの強みを活かしつつ、共通のYAMLファイルでシナリオの記述が可能
Taurusの欠点
(無償プランの範囲内では)レポート機能がいまいち実用的ではない
Taurusは負荷試験サービスBlazeMeterとの連携が容易で、Taurusの実行結果をBlazeMeterへ逐一送信することが可能です。 これにより美麗なレポートをWeb上で閲覧することが可能です。 PDF形式でのダウンロードも可能で、証跡としても利用できます。
ただし、Free Starterプラン(無償プラン。特にBlazeMeterへの登録さえも行っていない場合も含む)の場合、閲覧できるレポートに大きな制限があります。 たとえば、20分以上のテスト結果が表示できないなど、長時間負荷試験の分析には不向きです(2025年8月時点)。 https://www.blazemeter.com/pricing
Free Starterプランの制約に引っかかってしまう場合、以下のように別の手段でレポートを生成する必要があります。
レポート生成方法の一例
Taurusは実行時にローカルの
artifactsディレクトリへ試験結果を出力します。これをもとにレポートを生成することができます。
JMeterをバックエンドとして利用している場合は、以下のようにHTMLレポートを生成するのが良いでしょう。
$ cat kpi.jtl > combined.jtl
$ for f in kpi-*.jtl; do tail -n +2 "$f" >> combined.jtl; done # 2つ目以降のjtlファイルはヘッダを除く
$ jmeter -g combined.jtl -o report
情報に乏しい
ナレッジがWeb上にあまり溜まっておらず、情報に乏しいです。
リアルタイムレポーティング機能の意義
Taurusの機能として、ターミナル上でのリアルタイムでのレポーティングがプッシュされています。 こちらの動画の通り、Taurusを実行するとターミナル上にグラフィカルなUIが表示され、試験の結果をリアルタイムで確認できます。
これによって大体の負荷試験の結果を把握することができ、負荷試験を中断するか、といった判断材料に使うことができます。
ただし、業務上でTaurusを実行する場合、この機能をあまり使うことはないと思われます。
- 負荷試験ツールを実行する際は中断を防ぐためにバックグラウンドで実行する。このため、このUIを見ることができない
- バックグラウンドで実行した際、以下のように随時結果を出力することができる。このため、負荷試験がうまくいっていそうかはここから判断することができる
12:45:41 INFO: Current: 2 vu 1 succ 0 fail 1.679 avg rt / Cumulative: 1.679 avg rt, 0% failures
12:45:42 INFO: Current: 2 vu 1 succ 0 fail 1.368 avg rt / Cumulative: 1.524 avg rt, 0% failures
12:45:44 INFO: Current: 2 vu 2 succ 0 fail 1.303 avg rt / Cumulative: 1.329 avg rt, 0% failures
12:45:45 INFO: Current: 2 vu 1 succ 0 fail 1.205 avg rt / Cumulative: 1.311 avg rt, 0% failures
12:45:47 INFO: Current: 2 vu 2 succ 0 fail 1.411 avg rt / Cumulative: 1.326 avg rt, 0% failures
12:45:49 INFO: Current: 2 vu 2 succ 0 fail 1.379 avg rt / Cumulative: 1.334 avg rt, 0% failures
12:45:51 INFO: Current: 2 vu 2 succ 0 fail 1.164 avg rt / Cumulative: 1.312 avg rt, 0% failures
12:45:52 INFO: Current: 2 vu 2 succ 0 fail 1.256 avg rt / Cumulative: 1.306 avg rt, 0% failures
12:45:54 INFO: Current: 2 vu 2 succ 0 fail 1.374 avg rt / Cumulative: 1.312 avg rt, 0% failures
12:45:55 INFO: Current: 2 vu 2 succ 0 fail 1.157 avg rt / Cumulative: 1.299 avg rt, 0% failures
12:45:56 INFO: Current: 2 vu 1 succ 0 fail 1.365 avg rt / Cumulative: 1.293 avg rt, 0% failures
12:45:58 INFO: Current: 2 vu 1 succ 0 fail 1.149 avg rt / Cumulative: 1.287 avg rt, 0% failures
どういった場合にTaurusを使うべきか
- シナリオのバージョン管理がしたい
- LocustであればPython、Grafana k6であればTypeScriptで記述できるため、これらのプログラミング言語に習熟している場合は特にメリットとならない
- JMeterやLocust、Gatlingなど複数の負荷試験ツールを切り替えつつ利用したい
- 環境の汚染を避けたい。負荷試験を実行する環境にソフトウェアを直接インストールせず、コンテナで完結させたい
小河大輝