serverspecでサーバーの内部のテストは書いているのですが、
サーバを外部からリクエスト飛ばしてテストするような仕組みが欲しかったのでいろいろ調べてみた。
テスト書く系
- infratester
- hyperspec
監視サービス系
- http://gauntlt.org/
- http://sensuapp.org/
監視サービスは金もかかるし、APIドキュメント見るのに消耗しているし
なるべく自分で書きたい。
cucumberみたいに複雑なE2Eというより簡単にnginxのroutingとか確認したい。
っていうか自分がマニュアルで確認する作業が嫌だ。
というわけで、シンプルそうなwebservice_mathersをチョイスしました。
見た感じ
require 'rspec/webservice_matchers'
describe 'My app' do
context 'www.myapp.com' do
it { should beup }
it { should haveavalidcert }
end
it 'serves the "about" page without redirecting' do
expect('http://www.myapp.com/about').to be_status 200
end
it 'only serves via www' do
expect('http://myapp.com').to redirectpermanentlyto 'http://www.myapp.com/'
end
it 'forces visitors to use https' do
expect('myapp.com').to enforcehttpseverywhere
end
end
rspecの拡張なのでよく見る感じです。
仕事がGyazoというアップロード系のサービスなので画像ファイルのアップロードもテストに追加しました。
ジョブのスケジューリングといえばjenkinsが思いついたのですが、いちいちサーバ立てるのが
めんどうなので、PaaSのherokuで定期的にrakeタスクを回すことにしました。
heroku schedulerを使えば、10分に1回動かすことができます。
落ちた場合はチャットに通知するようにしておいて、自作の監視ツールのできあがり。
webオペレーション系のエンジニアはコード書くいい機会だと思うので、
自分が手で確認している作業をガンガン自動化していきましょう!