Upload
yoshiaki-yoshida
View
1.398
Download
1
Embed Size (px)
Citation preview
PHP Application E2E with Capybara2016-01-08 社内勉強会 @kakakakakku
What is Capybara?
http://jnicklas.github.io/capybara/ https://github.com/jnicklas/capybara/
Capybara is …
• E2E テストフレームワーク
• Ruby 製
• Capybara DSL で自然言語のように書ける
• Driver を選べる
• Rails だとデファクトスタンダード?
• Rails 専用ではなく汎用的に使える
Drivers
• RackTest
• Selenium
• ブラウザ(xvfb を使うなら Headless にできる)
• Capybara-webkit
• Poltergeist
• Headless で比較的安定していて人気がある
CI で E2E をテストするなら Headless
である必要がある
Capybara 構成イメージ
{ ドライバ }
Cucumber
RSpec
Test::Unit
MiniTest::Spec
RackTest
Selenium
Capybara-webkit
Poltergeist
{ テストフレームワーク }
Capybara
Capybara で今回試した構成
{ ドライバ }
Cucumber
RSpec
Test::Unit
MiniTest::Spec
RackTest
Selenium
Capybara-webkit
Poltergeist
Capybara
{ テストフレームワーク }
Capybara DSL
Capybara DSL Sample 1
# Navigating visit('/projects')
# Clicking links and buttons click_link('Link Text') click_button('Save')
# Interacting with forms fill_in('First Name', :with => 'John') choose('A Radio Button') check('A Checkbox')
Capybara DSL Sample 2
# Querying expect(page).to have_selector('table tr') expect(page).to have_selector(:xpath, '//table/tr')
# Scripting page.execute_script("$('body').empty()")
# Debugging save_and_open_page page.save_screenshot('screenshot.png')
現状ある E2E の課題感
課題感• Selenium のメンテナンスが大変
• XML ツライ
• 実行時間が長時間化している
• 非 Headless だと CI できない
• CircleCI や Jenkins で実行したい!
• データ投入済の環境だとデータパターンが困難
PHP Application E2E with Capybara
PHP だってできる…はず!
• Capybara (RSpec + Poltergeist)
• ActiveRecord と ActiveSupport も使う
• テストコードを Ruby っぽくシンプルに書ける
• factory_girl でテストごとに Fixture を投入する
• Fixture の投入はできる
• ただし運用面で困ってる点がある…(後述)
試してみた
ディレクトリ構造app integrations ├── Gemfile ├── Gemfile.lock ├── database.yml └── spec ├── factories │ └── users.rb ├── login.rb ├── models │ └── user.rb ├── support │ └── macros.rb └── spec_helper.rb
アプリケーションの ルートディレクトリ直下に `integrations` を用意した
Gemfilesource 'https://rubygems.org'
gem 'rspec' gem 'capybara' gem 'poltergeist' gem 'mysql2' gem 'activerecord' gem 'activesupport' gem 'factory_girl' gem 'pry' gem 'awesome_print' gem 'launchy'
DEMO PHP + Capybara + Poltergeist
DEMO
• シナリオ
• ログイン
• 検索
• 購入
• などなど…
DEMO
• 関連機能
• スクリーンキャプチャを撮る
• page.save_screenshot
• Headless だけどブラウザを開く
• save_and_open_page
• JS コードを動かす
困ってる
• PHP (FuelPHP) だと難しいかも?
• E2E 専用環境があっても運用できなそう
• 複数の feature があるとデプロイどうするの?
• feature によってスキーマも違う場合がある
• factory_girl で Fixture を投入できるけど1環境
• factory_girl 使わないとパターンを再現できない
困ってる
• Rails なら問題なし
• bundle exec rake spec
• RAILS_ENV=test
• WEBrick スゴイ
• PHP だと…
• Nginx + php-fpm の環境がないとダメ…
困ってる
【緩募】 アドバイス