Slide 1

Slide 1 text

ϨΨγʔγεςϜͷ E2EࣗಈςετͷϓϩτλΠϓΛ CapybaraͰ࡞ͬͨ࿩ 2018.05.10 දࢀಓ.rb#34 Sansanגࣜձࣾ Eightࣄۀ෦ ΤϯδχΞ ໦ా ༔Ұ࿠

Slide 2

Slide 2 text

ϓϩϑΟʔϧ • ໊લɿ໦ా ༔Ұ࿠ • ग़਎ɿਆಸ઒ݝԣ඿ࢢ • झຯɿςχεɺϓϩάϥϛϯά • Twitter : @mokuo_ • GitHub : mokuo • Qiita : @mokuo

Slide 3

Slide 3 text

ܦྺ • େֶจܥ • Πϯλʔϯʢखಈςετ, WordPressʣ • ࣾձਓ̍೥໨ • SIer (SE) • ࣾձਓ̎೥໨ • ॴଐɿࣗࣾύοέʔδ։ൃɾൢച ← ຊ೔͸ίίͰͷ࿩ • ग़޲ɿRailsडୗ։ൃ • ݱࡏɿSansan

Slide 4

Slide 4 text

໨࣍ • ϓϩτλΠϓΛ࡞ͬͨഎܠ • ϓϩτλΠϓͷߏ੒ͱઆ໌ • ·ͱΊ

Slide 5

Slide 5 text

໨࣍ • ϓϩτλΠϓΛ࡞ͬͨഎܠ • ϓϩτλΠϓͷߏ੒ͱઆ໌ • ·ͱΊ

Slide 6

Slide 6 text

ಥવͰ͕͢

Slide 7

Slide 7 text

ColdFusion ͬͯ͝ଘ஌Ͱ͔͢ʁ

Slide 8

Slide 8 text

–Wikipedia “ColdFusion ͸ɺιϑτ΢ΣΞશൠʢಛ ʹಈత΢ΣϒαΠτʣͷ։ൃʹ࢖ΘΕΔ ΞϓϦέʔγϣϯϑϨʔϜϫʔΫͰ͋Γɺ ΞϓϦέʔγϣϯαʔόͰ͋Δɻ”

Slide 9

Slide 9 text

CFML (ColdFusion Markup Language) #DateFormat(Now())# #TimeFormat(Now())# #TimeFormat(Now())#, #DateFormat(Now())# ࢀߟ"EPCF$PME'VTJPOϑϩʔ੍ޚ

Slide 10

Slide 10 text

ColdFusion ͰͰ͖ͨγεςϜ • ࣗಈςετҰ੾ͳ͠ • ຖճखಈςετ ·͋ɺԶ ؔ܎ͳ͍͠ɾɾɾ

Slide 11

Slide 11 text

͋Δ೔

Slide 12

Slide 12 text

ʮ͍΍ʔɺਓ଍Γͳ͘ͳͬͪΌͬͯ͞www mokuo͘Μɺςετ΍ͬͯΑসসʯ

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

ࣗಈςετͷϓϩτλΠϓ࡞Δͧ • ϓϩτλΠϓΛݟͤΕ͹ɺԿ͔มΘΔ͔΋͠ Εͳ͍ • Ϧʔμʔ΋՝୊ײ͸͋ͬͨ

Slide 15

Slide 15 text

໨࣍ • ϓϩτλΠϓΛ࡞ͬͨഎܠ • ϓϩτλΠϓͷߏ੒ͱઆ໌ • ·ͱΊ

Slide 16

Slide 16 text

• ݴޠ : Ruby • ϑϨʔϜϫʔΫ : Capybara

Slide 17

Slide 17 text

σΟϨΫτϦߏ੒ . !"" .env.sample !"" .gitignore !"" .ruby-version !"" Gemfile !"" Gemfile.lock !"" README.md #"" spec !"" features !"" pages !"" spec_helper.rb #"" support

Slide 18

Slide 18 text

֤ϑΝΠϧͷઆ໌

Slide 19

Slide 19 text

Gemfile source "https://rubygems.org" gem 'capybara' gem 'selenium-webdriver' gem 'chromedriver-helper' gem 'dotenv' gem 'rspec' gem 'tapp' gem ‘byebug'

Slide 20

Slide 20 text

.env.sample SYSTEM_URL= https://example.com/ ADMIN_LOGIN= admin_user ADMIN_PASS= password HEADLESS= true

Slide 21

Slide 21 text

.env ͷઆ໌ ؀ڥม਺ આ໌ ྫ 4:45&.@63- γεςϜͷ63- IUUQTFYBNQMFDPN "%.*/@-0(*/ ؅ཧऀͷϩάΠϯ*% MPHJO "%.*/@1"44 ؅ཧऀͷύεϫʔυ QBTTXPSE )&"%-&44 ϔουϨεϞʔυͰ ࣮ߦ͢Δ͔ USVF

Slide 22

Slide 22 text

spec_helper.rbʢલ൒ʣ require 'selenium-webdriver' require 'capybara/rspec' require 'tapp' require 'dotenv' require 'byebug' Dotenv.load Capybara.configure do |capybara_config| capybara_config.default_driver = :selenium_chrome capybara_config.default_max_wait_time = 10 # seconds end Capybara.register_driver :selenium_chrome do |app| options = Selenium::WebDriver::Chrome::Options.new options.add_argument('headless') if ENV['HEADLESS'] == 'true' Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) end Capybara.javascript_driver = :selenium_chrome

Slide 23

Slide 23 text

spec_helper.rbʢޙ൒ʣ require 'support/constants' require 'pages/base_page' # ܧঝ͢ΔͷͰɺઌʹಡΈࠐΜͰ͓͘ require 'pages/admin/base_page' # ܧঝ͢ΔͷͰɺઌʹಡΈࠐΜͰ͓͘ require 'pages/user/base_page' # ܧঝ͢ΔͷͰɺઌʹಡΈࠐΜͰ͓͘ Dir[Constants::APP_ROOT.join('spec/pages/**/*.rb')].each { |f| require f } Dir[Constants::APP_ROOT.join('spec/support/**/*.rb')].each { |f| require f } include SupportMacros include LoginMacros include CourseMacros include GroupMacros include UserMacros include CourseGroupMacros include AdminMacros include InquiryMacros include QuestionnaireMacros include SeminarMacros include PortalMenuMacros include LmsSettingMacros

Slide 24

Slide 24 text

spec_helper.rb ΛඞͣಡΈࠐΉ require 'spec_helper' RSpec.feature 'γεςϜ؅ཧ', :type => :feature do background :all do system_admin_login

Slide 25

Slide 25 text

ڞ௨ॲཧ͸Ϟδϡʔϧʹ੾Γग़͢ module LoginMacros def admin_login visit “#{ENV[‘SYSTEM_URL']}/admin_login" admin_login_page = Admin::LoginPage.new(page) admin_login_page.set_id(ENV['ADMIN_LOGIN']) admin_login_page.set_pass(ENV['ADMIN_PASS']) admin_login_page.login end def user_login(id, pass) visit “#{ENV[‘SYSTEM_URL']}/user_login" user_login_page = User::LoginPage.new(page) user_login_page.set_id(id) user_login_page.set_pass(pass) user_login_page.login end end

Slide 26

Slide 26 text

ϖʔδΦϒδΣΫτύλʔϯ • Selenium Ͱ͸༗໊ͳσβΠϯύλʔϯΒ͍͠ • ϖʔδΛΫϥεʹݟཱͯΔ • ϘλϯΫϦοΫͳͲΛϝιουͱͯ࣋ͨͤ͠Δ • ϝϦοτ • ԿΛ͍ͯ͠Δ͔෼͔Γ΍͍͢ • มߋ͠΍͍͢ • ࠶ར༻͠΍͍͢

Slide 27

Slide 27 text

ϢʔβʔϩάΠϯϖʔδ module User class LoginPage < BasePage def set_id(id) page.fill_in 'login', with: id end def set_pass(pass) page.fill_in 'password', with: pass end def login page.click_on 'ϩάΠϯ' User::TopPage.new(page) end end end

Slide 28

Slide 28 text

ϢʔβʔϩάΠϯ visit "#{ENV['SYSTEM_URL']}/user/" user_login_page = User::LoginPage.new(page) user_login_page.set_id(id) user_login_page.set_pass(id) user_top_page = user_login_page.login

Slide 29

Slide 29 text

ϩʔΧϧͰͷ࣮ߦखॱ $ git clone [email protected]:xxxxx/xxxxx.git $ bundle install --path vendor/bundle $ cp .env.sample .env $ bundle exec rspec

Slide 30

Slide 30 text

໨࣍ • ϓϩτλΠϓΛ࡞ͬͨഎܠ • ϓϩτλΠϓͷߏ੒ͱઆ໌ • ·ͱΊ

Slide 31

Slide 31 text

ϙΠϯτ • ॻ੶ͳͲͰΠϯϓοτ͢Δ • Ruby on Rails Λࢀߟʹ͢Δ • Capybara ʹ͍ͭͯ͸ɺҏ౻३Ұ͞Μͷهࣄ • ࢖͑ΔRSpecೖ໳ɾͦͷ4ʮͲΜͳϒϥ΢β ૢ࡞΋ࣗ༝ࣗࡏʂٯҾ͖Capybaraେࣙయʯ

Slide 32

Slide 32 text

ࠓճ͸ϨΨγʔγεςϜ Ͱ͕ͨ͠ɾɾɾ ϚΠΫϩαʔϏεͱ͔ʹ΋࢖͑Δ͔΋ʁ

Slide 33

Slide 33 text

͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠ɻ