おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

Frisbyで「リクエストを投げたサービスが突然死した」ことを検知できるか(小ネタ)

ちょっと仕事で調べたのでメモっとく。私HTTPとかあんま詳しくない*1 ので間違いあるかも。

ちょっとしたWeb APIのテストを書いてます。というか、書くために調べ始めました。APIといってもGETでリクエスト投げると適当な応答が帰ってくるだけのシンプルなもの。

必要なパラメータが欠落してたり、異常なパラメータ(例えばintであるべきものに英字が入ってたりとか)のときに、ちゃんと異常時として想定した振る舞いをする

ことを主にテストするという感じですね。

要素技術としてはFrisbyがよさ気かなと思って現在絶賛調査中です。Javascript力が低い自分としても自然にかけてけっこういい感じで、目的は達成できそう。

いろいろ前提すっ飛ばすけど、「異常時に相手側のアプリが突然死したらテスト側はどういう振る舞いになるんだろう」と疑問に思ったので調べてみました。

とりあえず、「あるリクエストを投げると死ぬ」Webアプリを作って、それを叩いてみれば分かるんじゃないかな?と。

そういうアプリをさくっと作りたければSinatraかなーと。こんな感じ。

んでこんなテストを書く。

実行してみると:

$ jasmine-node suicide_spec.js
hello!
.F
Failures:
  1) Frisby Test: suicide test 
        [ GET http://localhost:4567/suicide ]
   Message:
     Expected 500 to equal 200.
   Stacktrace:
     Error: Expected 500 to equal 200.
    at null.<anonymous> (.../node_modules/frisby/lib/frisby.js:493:42)
    at null.<anonymous> (.,./node_modules/frisby/lib/frisby.js:1074:43)
    at Timer.listOnTimeout (timers.js:92:15)
Finished in 0.163 seconds
2 tests, 2 assertions, 1 failure, 0 skipped

お、ちゃんと500として検知できた。

まあ本当は間に色々挟まってたりしてカンタンではないのかなとは思うのですが、それはおいおい詰めていけばよいかなと。

*1:何なら詳しいんだよ、といわれると、また、困るんだけど……。