Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

PHP Application E2E with Capybara

2 642 vues

Publié le

社内勉強会で Capybara 勉強会を開催したときの資料です.
詳細はブログに書いています.

社内勉強会で "PHP Application E2E with Capybara" という話をした - kakakakakku blog
http://kakakakakku.hatenablog.com/entry/2016/01/09/142221

Publié dans : Technologie
  • Soyez le premier à commenter

PHP Application E2E with Capybara

  1. 1. PHP Application E2E with Capybara 2016-01-08 社内勉強会 @kakakakakku
  2. 2. What is Capybara?
  3. 3. http://jnicklas.github.io/capybara/ https://github.com/jnicklas/capybara/
  4. 4. Capybara is … • E2E テストフレームワーク • Ruby 製 • Capybara DSL で自然言語のように書ける • Driver を選べる • Rails だとデファクトスタンダード? • Rails 専用ではなく汎用的に使える
  5. 5. Drivers • RackTest • Selenium • ブラウザ(xvfb を使うなら Headless にできる) • Capybara-webkit • Poltergeist • Headless で比較的安定していて人気がある
  6. 6. CI で E2E をテストするなら Headless である必要がある
  7. 7. Capybara 構成イメージ { ドライバ } Cucumber RSpec Test::Unit MiniTest::Spec RackTest Selenium Capybara-webkit Poltergeist { テストフレームワーク } Capybara
  8. 8. Capybara で今回試した構成 { ドライバ } Cucumber RSpec Test::Unit MiniTest::Spec RackTest Selenium Capybara-webkit Poltergeist Capybara { テストフレームワーク }
  9. 9. Capybara DSL
  10. 10. 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')
  11. 11. 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')
  12. 12. 現状ある E2E の課題感
  13. 13. 課題感 • Selenium のメンテナンスが大変 • XML ツライ • 実行時間が長時間化している • 非 Headless だと CI できない • CircleCI や Jenkins で実行したい! • データ投入済の環境だとデータパターンが困難
  14. 14. PHP Application E2E with Capybara
  15. 15. PHP だってできる…はず!
  16. 16. • Capybara (RSpec + Poltergeist) • ActiveRecord と ActiveSupport も使う • テストコードを Ruby っぽくシンプルに書ける • factory_girl でテストごとに Fixture を投入する • Fixture の投入はできる • ただし運用面で困ってる点がある…(後述) 試してみた
  17. 17. ディレクトリ構造 app integrations ├── Gemfile ├── Gemfile.lock ├── database.yml └── spec ├── factories │ └── users.rb ├── login.rb ├── models │ └── user.rb ├── support │ └── macros.rb └── spec_helper.rb アプリケーションの ルートディレクトリ直下に `integrations` を用意した
  18. 18. Gemfile source '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'
  19. 19. DEMO PHP + Capybara + Poltergeist
  20. 20. DEMO • シナリオ • ログイン • 検索 • 購入 • などなど…
  21. 21. DEMO • 関連機能 • スクリーンキャプチャを撮る • page.save_screenshot • Headless だけどブラウザを開く • save_and_open_page • JS コードを動かす
  22. 22. 困ってる
  23. 23. • PHP (FuelPHP) だと難しいかも? • E2E 専用環境があっても運用できなそう • 複数の feature があるとデプロイどうするの? • feature によってスキーマも違う場合がある • factory_girl で Fixture を投入できるけど1環境 • factory_girl 使わないとパターンを再現できない 困ってる
  24. 24. • Rails なら問題なし • bundle exec rake spec • RAILS_ENV=test • WEBrick スゴイ • PHP だと… • Nginx + php-fpm の環境がないとダメ… 困ってる
  25. 25. 【緩募】 アドバイス

×