こんにちは。CTOの馬場です。

負荷テストツール Tsung の話です。

HTTP負荷テストツールだと JMeter や ab 、httperfあたりが有名ですね。 新しいところだとTsungやGatlingでしょうか。

私は去年くらいからTsungをよく使っているので紹介します。

このエントリは第1回です。

  1. Tsungで負荷テストしよう(1) - 基礎知識
  2. Tsungで負荷テストしよう(2) - 実践Tips
  3. Tsungで負荷テストしよう(3) - リアルな負荷のためのTips

Tsung のお勧めポイント

まずはTsungのお勧めポイントから。

負荷をかける側に必要なマシンスペックが低い

負荷をかけるとき、JMeterよりTsungのほうが同じサーバでより大きな負荷を生成することができます。 もちろん必要な負荷が1台で生成しきれない場合は複数台で連動して負荷を生成することができます。

必要なスペックが低いということはエコだし安いということ。すばらしいことです。

実行ごとにシナリオ・ログを別ディレクトリに保存してくれる

これが地味にすばらしい。

実行するごとにシナリオとログをまるっと保存してくれます。 試行錯誤しているうちにうっかり上書きしてしまう、 というような事故がおきる可能性がないのです!

HTMLのレポートを作れる

tsung_stats.pl という付属ツールでHTMLのレポートを生成できます。

リッチさ、派手さはGatlingに及びませんが、まあまあなレポート(表・グラフ)が生成できます。 必要なところはだいたい抑えていると思います。

負荷量の調整がしやすい

負荷をかける側のスレッド数での調整ではなく、 秒間10セッション増える、というように arrivalrate を使って負荷量を設定できます。

負荷テストはたいてい 「目標値: ◯ユーザ同時アクセスに耐える」 という感じで目標設定するので、 その目標値をそのまま設定できてとてもやりやすいです。

<arrivalphase phase="1" duration="10" unit="minute">
  <users maxnumber="10" arrivalrate="100" unit="second" />
</arrivalphase>
<arrivalphase phase="2" duration="10" unit="minute">
  <users maxnumber="20" arrivalrate="100" unit="second"></users>
</arrivalphase>

結果をJSONで取得可能

社内ISUCONのときはTsungで負荷をかけました。 結果をJSONで取得できるので、スコアシステムとの連携がしやすくて楽でした。

yumでインストールできる

CentOS7の場合、epelリポジトリからインストールできます。 負荷テスト環境の構築に手間がかからないのはとても助かります。

sudo yum -y install epel-release
sudo yum -y install tsung

proxy recorderで操作を記録できる

tsung-recorder というプロキシレコーダーを使うことで、 ブラウザ操作を再現させることができます。

シナリオ作成の過程でいろいろ学べる

負荷量の調整のところで少し登場しましたが、 TsungのシナリオはXMLで記述します。 XMLなのでDTDを見ればSyntaxがわかります。すばらしい。 シナリオ作成を通じてXMLとDTDを学ぶことができます。

attributeにURLを書くときに &&amp; にしないとならない、 とかそういうことも学ぶことができます。

シナリオ作成中に、レスポンスを次のリクエストで利用したいことがよくあります。 Tsung では、レスポンスから欲しいデータを取り出すために 正規表現、XPath、JSONPathをつかうことができます。

正規表現はともかく、XPathやJSONPathはISUCONでベンチマーカーでも作らないとなかなか真面目に扱うことはないかもしれません。 知見を広げるチャンスですね。

Erlang製

「すごいErlangゆかいに学ぼう!」が発売されたりで盛り上がってたし、 取り入れてみたかったのです。

というわけでTsungを使うとすごいErlangをゆかいに学ぶことができます。 なぜならTsungは シナリオ中にErlangのコードが書ける のです!!!!

足りない機能はこのシナリオ(XML)の中にErlangのコードを記述することで補完できます。 XMLの中にErlangを書く。地獄ですね。 独自モジュールを作成してシナリオで読み込むことができるので、そちらをお勧めします。

この すごいErlangゆかいに学ぼう! の頭から20%くらいを読むと、 Tsungでやりたいことはたいていなんとかなります(なりました)。

といったあたりで初回はお腹いっぱいになったと思うので、今回はここまで。 次回は細かいTipsを紹介する予定です。

→書きましたTsungで負荷テストしよう(2) - 実践Tips

→もひとつ書きましたTsungで負荷テストしよう(3) - リアルな負荷のためのTips

株式会社ハートビーツのインフラエンジニアから、ちょっとした情報をお届けします。