読者です 読者をやめる 読者になる 読者になる

Thanks Driven Life

日々是感謝

Turnip + Capybara のテストレポートにスクリーンショットを載せる gnawrnip 更新しました

前回 Gnawrnip - Add-on for TurnipFormatter with Capybara - Thanks Driven Life の続きです。

gongo/gnawrnip · GitHub

これまではエラーが起きた瞬間の画像だけを載せていたのですが やっぱりその過程も見たいよね→動画GIFみたいにすればいいのでは?ってことで機能追加。

この為に Capybara の稼働状況を animation gif として保存する - Thanks Driven Life とか試していました。

gnawrnip の設定項目

今回の機能追加に併せて設定機能も持たせました。詳しくは README を見ていただくとして、軽く紹介

Gnawrnip.configure do |c|
  c.photographer_driver = :js # or :rmagick
  c.frame_interval = 1000     # milliseconds
  c.frame_size = [640, 360]   # width, height
end

Gnawrnip.ready!

photographer_driver

そもそも動画GIFっぽい見せ方をするには、とりあえず動画GIF作ればいいよねってことで RMagick を使う予定でしたが、なんかこう軽く試したいだけでもわざわざ(というほどでもないけど) imagemagick の環境作ったりするのがあれかなーって。そんなわけで、RMagick を必須にはせず、選択肢としました。jsrmagick

photographer_driver = :rmagick の場合は上述した通り、Magick::ImageList で作成した動画GIFを貼り付けています。当然ですが、この場合は事前に rmagick をインストールしておくとか Gemfile に gem "rmagick" して bundle install しておくってことが必要です。

代わりに photographer_driver = :js の場合、複数の画像を jQuery で切り替えていくことで動画GIFライクな動きにしています。これは RMagick を必要としないんですが、単純にレポートファイルへ記載する画像が増えるということなので、レポートファイルサイズもでかくなります。

frame_interval

これはそのままの意味で、各フレームへの切り替え時間をミリ秒で指定します。実現方法としても単純で、:rmagick の時は ImageList#delay:js の時は setInterval() です

frame_size

スクリーンショットの width, height を設定するものです。デフォルトでは nil で、この場合は Capybara.current_driver.browser のその時点でのサイズのままの画像サイズになります。ちなみにこの設定値は photographer_driver = :rmagick の時のみ有効です。:js では無視されます。

もしかしたら、今後 Capybara.current_driver.browser の機能を使ってブラウザのサイズを変更するって方向にするかもしれません。そうすれば :js でも使える。

example

前回の記事同様

$ git clone git://github.com/gongo/gnawrnip.git
$ cd gnawrnip
$ bundle install --path vendor/bundle
$ cd example
$ bundle exec rspec
$ open report.html

ぐらいで試せると思います。poltergeist も使うようにしているので、あらかじめ phantomjs とか用意しておくといいかもしれません。めんどくさい人は example/spec/spec_helper.rbCapybara.default_driver = :selenium とかすれば全部 selenium-webdriver にできます。

誰か使ってみてください!!

現在、職場の開発グループで Jenkins から Turnip + Capybara のテスト実行してて、そのレポートとして turnip_formatter + gnawrnip を使っています。

時々 turnip_formatter のエラーだったり、gnawrnip でスクリーンショットで失敗したりと、いろいろ問題が出るたびに修正したりしてるので、一応動くとは思います。

が、まだまだ見知らぬバグ潜んでそうなので使ってみてください!!