LoginSignup
10
9

More than 5 years have passed since last update.

TravisCIとSauceLabsを連携してテストクラウドでテストする

Last updated at Posted at 2014-06-16

はじめに

  • TravisCI(クラウドCI)とSaucelabs(テストクラウド)の連携プレーを実現するための手順を書いていきます
  • 以下が備わっていると仮定して話を進めます
    • Railsアプリ
    • Railsアプリに対して行うcucumber+Selenium(+Capybaraなど)のテスト
    • bundle exec cucumberでcucumberのテストを実行できる
  • 以下はTravisCI上でCIを開始、SauceLabsを使ってテストクラウドでテストするまでの手順

TravisCIとSauceLabsを使うための下準備

アカウント登録

TravisCIの利用開始

SauceLabsのアカウントを登録

.travis.yml作成

  • ymlファイルにはいろんなことが書けます
  • なので、起動したRailsアプリに対してcucumberのテストを実行するまでの最低限必要なものを書きます

bundle install〜cucumber実行まで

  • addonsにSaucelabsに接続するための設定を記述する
  • bundle installは特に書かなければ自動で行われる
    • オプションなどを書く場合は以下のようにオーバーライドする
.travis.yml
language: ruby
addons:
  sauce_connect:
    username: "[ユーザ名]"
    access_key: "[アクセスキー]"
install:
  - bundle install [option]
before_script:
  - bundle exec rake db:migrate
  - bundle exec rake db:seed
script:
  - bundle exec rails s -p 3000 -e development -d
  - bundle exec cucumber

ssh経由のgit cloneをさせたい場合は以下をやる(任意)

  • .encファイル作成
$ ssh-keygen -f test-key
$ password=`cat /dev/urandom | head -c 10000 | openssl sha1`
$ openssl aes-256-cbc -k "$password" -in test-key -out test-key.enc -a
$ mkdir .travis
$ mv test-key.enc .travis/
  • .travis.ymlに追記
$ gem install travis
$ touch .travis.yml #Railsアプリ内で(app、configなどと同階層)
$ travis encrypt -r [ユーザ名]/[リポジトリ名] "SERVER_KEY='$password'" -a
$ cat .travis.yml #secureが追加されている
env:
  global:
    secure: abcdefghijklmn......
  • before installにsshの設定を追加
before_install:
  - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
  - openssl aes-256-cbc -k "$SERVER_KEY" -in .travis/test-key.enc -d -a -out test-key
  - cp test-key ~/.ssh/id_rsa
  - chmod 600 ~/.ssh/id_rsa
  - eval `ssh-agent -s`
  - ssh-add ~/.ssh/id_rsa

GemfileにsauceLabsで必要なgemを追加

  • 既にRailsアプリのためにGemfileに書いているものは省いてください
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 "execjs"
  gem "therubyracer"
  gem "database_cleaner"
end

sauce_helper.rbを配置

  • 必要に応じて実行するOS/ブラウザを組み替えてください
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

/etc/hostsを編集

  • ローカル起動したものに対してテストしようとすると名前解決ができず、400(Bad Request)が出たので自分の環境に合うように適宜いじってください

SauceLabsで実行したいテストにタグを付ける

  • SauceLabs上で実行したいテストには「@selenium」というタグを付ける必要があります
  • これ忘れがちですが、重要です!

おまけ

  • .travis.yml内で日本時間に変更する設定書いてみました
.travis.yml
before_script:
  - sudo cp -p /etc/localtime /etc/localtime.bak
  - sudo rm /etc/localtime
  - sudo ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

実行

  • あとはgithubにpushしたら自動でTravisCIがビルドを始め、SauceLabsに対してテストを実行してくれる
  • SauceLabsにTravisCIのビルド番号がリンクしているため、どのビルドのテストか分かるようになっている
    • SauceLabs上のフィルター検索でもビルド番号での絞り込み可能

参考にしたサイト

~ただの宣伝~

  • 全国のSeleniumer必読
  • Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9