- この記事は…
- 何をしたかったのか
- なぜやりたかったのか
- やったこと
— Infrataster
— Capybara
— 実装
—– 何を以って正常と判断するか
—– rspec –init
—– spec/site_check_helper.rb
—– spec/site_check_spec.rb
— 実行例 - 以上
この記事は…
qiita.com
初老丸 Advent Calendar 2017 19 日目の記事です.
何をしたかったのか
- 複数の Web サイトの正常性を確認したい
なぜやりたかったのか
- ポチポチとブラウザで確認する作業が辛くなった
やったこと
Infrataster
github.com
- Infrastructure Behavior Testing Framework
- Servrespec や awspec がインフラのあるべき状態をテストするのに対して, Infrataster はインフラの振る舞いをテストするツール
- クライアントからサーバーに接続した際の状態(レスポンス等)をテストすることが出来ることが特徴
- テストは Rspec の DSL で記述することが出来、MySQL や DNS に対するテストも実装することが出来る
Capybara
github.com
Capybara とは, なんぞや!?
Capybara helps you test web applications by simulating how a real user would interact with your app. It is agnostic about the driver running your tests and comes with Rack::Test and Selenium support built in. WebKit is supported through an external gem.
上記は README の冒頭だけど, 以下のように意訳.
- 実際のユーザーと Web アプリケーションのやりとりをシュミレートするテストフレームワーク
- テストを実行する Driver は選択することが出来て, Rack::Test と Selenium は組み込まれている
- WebKit は外部の Gem を利用してサポートされる
ふむふむ.
実装
何を以って正常と判断するか
状況によって色々と異なると思うが、今回は HTML の TITLE タグをチェックして指定した文字列と合致することで「正常」と判断する.
rspec --init
$ bundle exec rspec --init
以下のように出力される.
create .rspec create spec/spec_helper.rb
spec/site_check_helper.rb
require 'infrataster/rspec' Infrataster::Server.define( :example_com, 'www.example.com', ) Infrataster::Server.define( :example_jp, 'www.example.jp', ) Infrataster::Server.define( :example_jp, 'www.example.net', )
spec/site_check_spec.rb
require 'spec_helper' describe server(:example_com) do describe capybara('http://' + server(:example_com).server.address) do it 'ページのタイトルが www.example.com であること' do visit '/' expect(page).to have_title 'www.example.com' end end end describe server(:example_jp) do describe capybara('http://' + server(:example_jp).server.address) do it 'ページのタイトルが www.example.jp であること' do visit '/' expect(page).to have_title 'www.example.jp' end end end describe server(:example_net) do describe capybara('http://' + server(:example_net).server.address) do it 'ページのタイトルが Welcome to www.example.net !! であること' do visit '/' expect(page).to have_title 'Welcome to www.example.net !!' end end end
have_title
のようなマッチャには, have_content
や have_link
等が利用出来る.
実行例
ローカルホストで起動した Web サーバーと kome.inokara.com に対してテストを走らせてみた例.
$ bundle exec rspec server 'kome_inokara_com' capybara 'http://kome.inokara.com' ページのタイトルに川原米穀店が含まれていること server 'example_com' capybara 'http://127.0.0.1:8001' ページのタイトルが www.example.com であること server 'example_jp' capybara 'http://127.0.0.1:8002' ページのタイトルが www.example.jp であること server 'example_net' capybara 'http://127.0.0.1:8003' ページのタイトルが Welcome to www.example.net !! であること Finished in 3.07 seconds (files took 0.95129 seconds to load) 4 examples, 0 failures
以上
Infrataster と Capybara の組み合わせで, ブラウザと目視のサイト確認を機械的に行うことで確認漏れ等ミスを最小限に抑えることが出来ると思う.