turnip
TRANSCRIPT
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
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
Android実機側へのポートフォワード ◦ 127.0.0.1:8080 -> (Android):8080 ◦ 外部から叩けない (テストサーバ) -> (Androidエミュレータホスト) -> (Androidエミュレータ)が出来ない
実際にIPアドレスを付与してある実機とかなら直接叩けば出来るかも(まだ試してない)