前回 Gnawrnip - Add-on for TurnipFormatter with Capybara - Thanks Driven Life の続きです。
これまではエラーが起きた瞬間の画像だけを載せていたのですが やっぱりその過程も見たいよね→動画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 を必須にはせず、選択肢としました。js
か rmagick
。
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.rb
で Capybara.default_driver = :selenium
とかすれば全部 selenium-webdriver にできます。
誰か使ってみてください!!
現在、職場の開発グループで Jenkins から Turnip + Capybara のテスト実行してて、そのレポートとして turnip_formatter + gnawrnip を使っています。
時々 turnip_formatter のエラーだったり、gnawrnip でスクリーンショットで失敗したりと、いろいろ問題が出るたびに修正したりしてるので、一応動くとは思います。
が、まだまだ見知らぬバグ潜んでそうなので使ってみてください!!