turnip

17
株式会社エクストーン 下っ端 豊田陽一

Upload: yoichi-toyota

Post on 15-Jun-2015

1.963 views

Category:

Documents


1 download

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

 ステップ記述に正規表現を使わない  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になって進化してた  要素のマッチングは厳密にしないとエラーが出るようになった

 要素の名前付けを意識する良い機会になるかも