SlideShare a Scribd company logo
株式会社エクストーン
下っ端
豊田陽一
  Turnip
◦  概要説明
  外部テストツール
  実践的なお話
◦  Turnip + Capybara + ?
  Capybara-webkit
  PhantomJS + Poltergeist
  Selenium WebDriver
  Ruby第三世代テストツール
◦  第一世代:Test::Unit
◦  第二世代:Rspec
◦  第三世代:Gherkin (Cucumber / Turnip)
  作者
◦  Jonas Nicklas さん
◦  Capybara開発者
  Cucumberが微妙に使われてない
◦  Rspecと完全に別系統のテストとして存
在している
◦  ステップファイル書くのが大変
  正規表現の箇所とか特に
◦  関連する技術大杉
  CapybaraとかSeleniumとか、なんとかJSと
か、どれがなにやってるのかさっぱり分からん
  この部分は別にTurnipでも解決しないですw
  ステップ記述に正規表現を使わない
  RSpec内で実行可能
Cucumber Turnip
When(/^"([^"]*)"ページを表示する$/ do |page|
visit path_to page
end
When /^"([^"]*)"に"([^"]*)"と入力する$/ do |field, value|
fills_in(field, :with => value)
end
When /^"([^"]*)"ボタンをクリックする$/ do |button|
click_button(button)
end
Then /^"([^"]*)"と表示されていること$/ do |text|
response.body.should =~
/#{Regexp.escape(text)}/m
end
step “:page を表示する” do |page|
visit path_to page
end
step “:field に :value と入力する” do |field, value|
fills_in(field, :with => value)
end
step “:button ボタンをクリックする” do |button|
click_button(button)
end
step :text と表示されていること” do |text|
response.body.should =~
/#{Regexp.escape(text)}/m
end
  ブラウザテスト
◦  Turnip
  テストを記述するためのライブラリ
◦  Capybara
  Webブラウザを操作するためのライブラリ
  クリックする、特定の要素を取得する、etc.
  ドライバによって、操作対象のブラウザを選ぶ
  Capybaraのドライバ
◦  Capybara-webkit
  Rubyから操作可能なヘッドレスなWebkit
  Capybaraのドライバ
◦  Poltergeist
  PhantomJSを叩くためのドライバ
◦  Selenium WebDriver
  Seleniumサーバを叩くためのドライバ
  Selenium経由で実際のブラウザを叩くことが
出来る
  以下の構成で実現可能
◦  Turnip + Capybara + Selenium
◦  Android上で動作するSeleniumサーバ
  http://code.google.com/p/selenium/wiki/
AndroidDrive
◦  adb
  Android上のSeleniumサーバにテストサー
バーへのリクエストをフォワードする
  テストしたい実機にインストールする
◦  エミュレータでも問題なし
◦  手順
  http://code.google.com/p/selenium/wiki/
AndroidDriver
  上記サイトの Install th WebDriver APK に書
いてある
◦  http://localhost:8080/を叩いて何かし
ら表示されたら準備完了
  Capybara Driverの定義
◦  spec_helper.rbあたりに書くと良さげ
Capybara.register_driver :remote_android do |app|
caps = Selenium::WebDriver::Remote::Capabilities.chrome
url = "http://localhost:8080/wd/hub"
opts = { desired_capabilities: caps, browser: :remote, url: url }
Capybara::Selenium::Driver.new(app, opts)
end
NFC.pptx
機能: 登録関連(スマートフォン版)
背景:
前提 Android(実機)で接続
シナリオ: ログイン前にトップページを表示
もし "/" を表示する
ならば "smartphone/トップページ(未ログイン)" にス
ナップショットを保存
シナリオ: ログイン
前提 "/" を表示する
もし "マイページ" をクリックする
ならば "/login" へ遷移する
ならば "smartphone/ログイン" にスナップショットを保存
step "Android(実機)で接続" do
Capybara.default_driver = :remote_android
end
step ":path を表示する" do |path|
visit path
end
step ":name にスナップショットを保存" do |name|
page.save_screenshot(
File.expand_path("../../../snapshot/#{name}.png",
__FILE__)
)
end
step ":next_page へ遷移する" do |next_page|
page.html.should match /#{next_page}/
end
$ bundle exec rspec
  Android実機側へのポートフォワード
◦  127.0.0.1:8080 -> (Android):8080
◦  外部から叩けない
  (テストサーバ) -> (Androidエミュレータホス
ト) -> (Androidエミュレータ)が出来ない
  実際にIPアドレスを付与してある実機とかなら
直接叩けば出来るかも(まだ試してない)
  Capybaraのドライバによって出来る
ことが違う
Poltergeistでテスト動作確認
↓
Seleniumで実機テストする
↓
(́・ω・`) ショボーン
◦  慣れましょう
  実機の自動テストが出来た
◦  Turnipあんまり関係ないw
  それはそれとしてTurnip書きやすい
◦  自動テストの環境を整えるきっかけには
なった
◦  Capybaraが2.0になって進化してた
  要素のマッチングは厳密にしないとエラーが出
るようになった
  要素の名前付けを意識する良い機会になるかも

More Related Content

Turnip