EC2+Sauce Labsを使ってSeleniumのテストを高速に(Cucumber編)

More than 3 years have passed since last update.


はじめに


テスト作成&実行


設定ファイルなどの編集

$ rails new sample_app2 --skip-bundle


  • サンプルRailsアプリ作成


Gemfile

group :test, :development do

gem 'sauce', '~> 3.1.1'
gem 'sauce-connect'
gem 'parallel_tests'
gem "capybara", "~> 2.0.3"
gem "cucumber-rails", :require => false
gem "sauce-cucumber", :require => false
gem "rake", "10.1.0"
gem "execjs"
gem "therubyracer"
gem "database_cleaner"
end

$ bundle install

$ rails generate cucumber:install
$ rake sauce:install:features


features/support/sauce_helper.rb

require "sauce"

require 'sauce/capybara'
require "sauce/cucumber"

Capybara.default_driver = :sauce

Sauce.config do |c|
c[:browsers] = [
["Windows 8", "Internet Explorer", "10"],
["Windows 7", "Firefox", "20"],
["OS X 10.8", "Safari", "6"],
["Linux", "Chrome", nil]
]
end



テスト作成


features/ramen.feature

Feature: Finding ramen

@selenium
Scenario: I should be able to find delicious Ramen on Wikipedia
When I go to Wikipedia.com



  • 今回のテストもwikipediaでラーメンを検索するだけw


features/step_definitions/ramen.rb

When(/^I go to Wikipedia.com$/) do

visit "http://en.wikipedia.org/"
fill_in 'search', :with => "Ramen"
click_button "searchButton"
page.has_content?('Ramen')
end


テスト実行

$ export SAUCE_USERNAME=XXXXXXXXXXXXXX

$ export SAUCE_ACCESS_KEY=XXXXXXXXXXXXXX

$ bundle exec cucumber
Using the default profile...
Feature: Finding ramen

@selenium
Scenario: I should be able to find delicious Ramen on Wikipedia # features/ramen.feature:4
[Connecting to Sauce Labs...]
When I go to Wikipedia.com # features/step_definitions/ramen.rb:2
When I go to Wikipedia.com # features/step_definitions/ramen.rb:2
When I go to Wikipedia.com # features/step_definitions/ramen.rb:2
When I go to Wikipedia.com # features/step_definitions/ramen.rb:2

1 scenario (1 passed)
1 step (1 passed)
3m37.807s


  • 結果はRspecのときのようにコンソール出力とブラウザから動画で閲覧できます

  • 実行コマンドの引数などでブラウザ指定などしなくて済むので楽ですね


おまけ


  • bundle exec cucumberを実行したら以下のようなエラーが発生したが、これはSeleniumでおなじみなタイムアウトのようです

$ bundle exec cucumber

Using the default profile...
Feature: Finding ramen

@selenium
Scenario: I should be able to find delicious Ramen on Wikipedia # features/ramen.feature:4
[Connecting to Sauce Labs...]
Sauce Connect failed to connect after 90 seconds (RuntimeError)
/home/ec2-user/.rvm/gems/ruby-1.9.3-p545/gems/sauce-connect-3.1.0/lib/sauce/connect.rb:82:in `wait_until_ready'
/home/ec2-user/.rvm/gems/ruby-1.9.3-p545/gems/sauce-3.1.3/lib/sauce/utilities/connect.rb:16:in `start'
/home/ec2-user/.rvm/gems/ruby-1.9.3-p545/gems/sauce-cucumber-3.1.1/lib/sauce/cucumber.rb:70:in `around_hook'
/home/ec2-user/.rvm/gems/ruby-1.9.3-p545/gems/sauce-cucumber-3.1.1/lib/sauce/cucumber.rb:155:in `Around'


非Railsアプリでのテスト作成・実行


  • 基本的に本ページの「テスト作成&実行 」節で書いたファイルのとおり

  • 以下の構成になっていればよい


    • Gemfile

    • fearures/xxx.feature

    • fearures/support/sauce_helper.rb

    • features/step_definitions/xxx_steps.rb



  • 手を加えるのはfearures/support/sauce_helper.rb内に「include Capybara::DSL」を加えるだけ

  • テスト実行も同じ方法


~ただの宣伝~


  • 全国のSeleniumer必読

  • Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください