Web API のEnd-to-Endのテストを自動化したいなぁと思ってました。
ついでにそれがドキュメントとして読めたらいいなぁと思ってました。
あと、RubyとRSpecの勉強もしたいなぁと思ってました。
Cucumberとかはシナリオとステップが別ファイルになってしまうし、求めていることに対して大掛かりだと感じたので、RSpecで書いてみることに。
いろいろ必要なユーティティを作ってみました。以下で公開中です。
https://github.com/bati11/itesttool
_givenブロックで前提条件の確認や下準備、_whenブロックで実行、_thenブロックで検証を行います。
下の例だと、_givenでリクエストヘッダを設定し、_whenでGETリクエストを送信し、_thenでレスポンスとして取得したJSONを検証しています。
JSON schemaを用いてJSON全体を検証したり、JSONPathを用いてJSONの要素を検証したりできます。
describe 'send GET request' do _given { headers 'referer' => 'http://local.example.com', 'user_agent' => 'itesttool' } _when { get 'http://localhost:4567/index.json' } _then { # json schema res.body.should eq_schema_of 'json_schema/hello.json' # using jsonpath res['$.team'].should eq ['ABC'] res['$.members..name'].should eq ['Ichiro', 'Jiro', 'Saburo'] res['$.members..age'].should include 32 res['$.members[::]'].should have(3).items res['$.members[::]'].should have_at_most(3).items res['$.members..name'].should all_be_type_of :string res['$.members..age'].should all_be_gt 11 res['$.members..age'].should be_sorted :desc } end
あとは、XMLをXPathで検証したり、HTMLをCSSセレクタで検証したりできます。
もちろんPOSTリクエストも送れます。
Rubyは、拡張しやすくていいですねー。
もっと使えるものにしていきたいなぁ。

The RSpec Book (Professional Ruby Series)
- 作者: David Chelimsky,Dave Astels,Zach Dennis,角谷 信太郎,豊田 祐司,株式会社クイープ
- 出版社/メーカー: 翔泳社
- 発売日: 2012/02/22
- メディア: 大型本
- 購入: 7人 クリック: 141回
- この商品を含むブログ (17件) を見る