くりにっき

フルスタックキュアエンジニアです

Jenkinsにスローテストのグラフを表示する

RSpecでは --profile オプションをつけることで

$ rspec --profile

Top 10 slowest examples (17.92 seconds, 65.4% of total time):
AndroidMarket use stub content behaves like android_market_base_examples #get_overall_top_selling_new_paid_apps
1.96 seconds ./spec/android_market_spec.rb:121
AndroidMarket use stub content behaves like android_market_base_examples #get_top_selling_paid_apps_in_category
1.94 seconds ./spec/android_market_spec.rb:92
 (略)

のようなスローテストのトップ10(ワースト10)を出すことができるのですが、これをJenkinsでグラフ化できたら便利かなぁと思ってスクリプトを書いてみました。

gist

使い方

1. JenkinsにPlot Plugin を入れる

2. Jenkinsでrspecを動かす時に標準出力をログファイルに出力し、それを前述の plot-rspec-slowest-examples.rb に読ませる。

通常だったら

rspec

ってやるところを

rspec --profile 5 > rspec-console.log
ruby plot-rspec-slowest-examples.rb rspec-console.log > plot-rspec-slowest-examples.csv

のようにします。profileの後の数字は出力する上位件数です。(デフォルトだと上位10件)

出力されたcsv
total,top 1,top 2,top 3,top 4,top 5,
8,1.67,1.59,1.59,1.58,1.58,

3. 上記で出力したcsvをplot pluginで読み込ませる

f:id:sue445:20130317015049p:plain

グラフ化した結果

f:id:sue445:20130315141739p:plain

テスト全体に対して1つだけ突出しているのがあればそこを見直すだけでスローテストを改善できると思います。*1

*1:既出かどうかは知らん