概要
構築したサーバの動作確認をする時に、URLが正しく閲覧できるか確認したいということがあるかと思います。一つずつ確認するのは簡単ですが、それが大量にあったりすると時間もかかりますし、確認漏れなどが出るかもしれません。
そんな作業を自動化できそうな Infrataster というツールを見つけましたので、試しに使ってみたいと思います。(Infrataster=インフラテイスター、インフラの味見・毒味という意味らしい)
初期設定
Rubyで作られたツールなので、Rubyのコンパイラが必要です。また、RSpecの仕組みを使って確認していくようです。
まずは Gemfile を用意します。最低限 Infrataster と、JSONで値の確認をするためにお好みで追加のライブラリも一緒に指定します。
source 'https://rubygems.org'
gem 'infrataster'
gem 'rspec-json_matcher'
依存関係のインストールを行います。
$ bundle install
...
Bundle complete! 1 Gemfile dependency, 28 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
Infratasterはrspecの上で動作するので設定ファイルの生成を行います。
$ bundle exec rspec --init
create .rspec
create spec/spec_helper.rb
ここまでで基本的な準備が完了したので、テストの構築に入っていきます。
まず、テスト対象を定義します。spec/spec_helper.rbの先頭に下記を定義していきます。
require 'rspec/json_matcher'
require 'infrataster/rspec'
RSpec.configuration.include RSpec::JsonMatcher
Infrataster::Server.define(
:production,
'www.holmescloud.com'
)
テストしたい内容を spec/production_spec.rb に記載していきます。テスト対象のページに対してテストケースを複数書くことももちろん可能です。
require 'spec_helper'
describe server(:production) do
describe http('https://www.holmescloud.com/index.html') do
it 'returns 200' do
expect(response.status).to eq(200)
end
end
describe http('https://www.holmescloud.com/login.html') do
it 'returns 200' do
expect(response.status).to eq(200)
end
it 'has header' do
expect(response.headers['X-Application-Context']).to eq('application')
end
end
describe http('https://www.holmescloud.com/news/') do
it 'returns 200' do
expect(response.status).to eq(200)
end
end
end
一通りテストが書けたら実行してみましょう。
$ bundle exec rspec spec/production_spec.rb
....
Finished in 0.76616 seconds (files took 1.31 seconds to load)
4 examples, 0 failures
作成したものは下記の場所にアップロードしてあります。
https://github.com/nabe256/infratest
今回はテストが通る前提の書き方で進めていますが、インフラの構築中であればテスト駆動開発にも有効に使えると思います。
率直に便利だと感じたので今後どんどん使っていきたいですね。
参考ページ
- 偉大なる開発元サイト
https://github.com/ryotarai/infrataster - コードの書き方をかなり参考にさせていただきました
https://techlife.cookpad.com/entry/2014/11/19/151557 - DNSの確認も可能なようです
https://inokara.hateblo.jp/entry/2016/07/02/101157