メニューを閉じる

テクノモバイルグループ

メニューを開く

2014.08.13

開発環境・ツール

REST APIのテストを自動化する(Frisby)

こんにちは、KTです。

今回は、REST APIのテストの自動化について紹介します。

JUnitベースのRestfuseというツールもあるそうなんですが、今回は、Node.jsのツールであるFrisbyを使ってテストを自動化してみます。

 

1. 準備

Node.jsのツールなので、まずはNode.jsの準備をしましょう。

前回でも使った、Vagrantを使って環境を構築していきます。

(別にLinuxの環境を立ち上げなくても、ローカルにNode.js入れれば動くはずですが、あまりローカルを汚したくないので今回はLinuxを立ち上げてます)

 

Vagrantを使ってLinuxマシンを立ち上げたら、Node.jsをインストールします。

 

 

2. Frisbyのインストール

Node.jsの準備が終わったら、テスト用のディレクトリに移動してFrisbyをインストールしましょう。

同時に、JavascriptのテスティングツールであるJasmineをインストールします。

 

これで、インストールは完了です。

Jasmineを使うときの慣習として、specディレクトリ以下にテストスクリプトを置く必要があるので、specディレクトリを作成して移動しておきましょう。

 

 

3. テストスクリプトの作成

インストールが完了したらテストスクリプトを作成しましょう。

Jasmineを使うときの慣習として、〜_spec.jsという名前で作る必要があります。

今回はtest_spec.jsという名前で作成します。

test_spec.js

 

Frisbyのテストケースは、上記のようにcreateからtossまでのメソッドチェインで作ります。

createにはテストの説明(jasmineでいうdescribeやitの第一引数ですね)を渡します。

次にタイムアウトやHTTPヘッダなどの設定を行い、get / post / put / deleteなどのメソッドでHTTPメソッドとテスト対象のURLを設定します。

その後、expectJSONやexpectHeaderなどで期待値を設定し、

最後にtoss()をコールすることで、テスト結果をJasmineの結果として生成します。

詳細は下記URLを参考にしてください。

http://frisbyjs.com/

http://blog.asial.co.jp/1259

 

4. テストの実行

作成したテストの実行は、jasmine-nodeコマンドを使用します。

テストスクリプトがあるディレクトリで下記コマンドを実行すればOKです。

 

5. Jasmine-Nodeとの連携

Frisbyは、内部でJasmine用のテストメソッドを使ってテストを実施し、最終的にテスト結果をJasmineの結果として出力しています。

下記のように、frisby.jsのtossメソッドでJasmineのdescribe、itを呼んでJasmineのテストとして処理しています。

 

このため、以下のようにFrisbyのテストをJasmineのdescribeやitを使ってグルーピングすることができます。

 

ただ単にfrisbyを並べるだけでも分かりやすいですが、このようにグルーピングすることでより分かりやすくなりますね。

また、jasmine-node実施時に–verboseオプションをつけると、よりグルーピングの効果が分かると思います。是非試してみてください!

 

6. 注意点

FrisbyというよりはJasmineの注意点ですが、基本的にコールバックベースで処理が進むため、全てのテストケースが並列で実行されます。

前のテストケースに依存して次のテストケースの挙動を変えるような処理は苦手(頑張れば出来なくは無いですが)なので注意してください。

 

7. 拡張

FrisbyはMITライセンスのため、改変は自由に行えます。ということで、不便な所はどんどん拡張しちゃいましょう!

例として、私が拡張した内容について一部紹介します。

Frisbyには各テストの開始前に実施されるbeforeEachはあるのですが、テスト毎に指定する方法が無かったので作っちゃいました。

 

node_modules/frisby/lib/frisby.js

まずは、適当なところで

 

と宣言しておいて、

toss()メソッド内で

 

というように追加すれば、beforeメソッドの追加完了です(・∀・)

 

使い方は

 

というふうに、beforeメソッドにテスト前に実施させたい処理を渡せばOKです。

 

例えば、テスト実施前に別のAPIをコールしたいときでも

beforeメソッドでAPIをコール→

API戻り時にフラグをセット→

waitsForでフラグがセットされるまで待ってからテストを実施!

のようにすれば簡単にかけますね(・∀・)

 

 

 

以上、最近、正妻がRubyからJavascriptに変わりつつある…


【テクノモバイルではエンジニア/デザイナーを積極採用中です!】

下記項目に1つでも当てはまる方は是非、詳細ページへ!
  • 自分でアプリを作ってみたい
  • ITで世の中にワクワクを生み出したい
  • 使いやすさ、デザインにこだわったWebサイトを開発したい

採用情報の詳細はこちら


Qangaroo(カンガルー)

  • 徹底した見やすさと優れた操作性で、テストの「見える化」を実現。
  • テストの進捗が見える。開発がスマートに進む。
  • クラウド型テスト管理ツール『Qangaroo(カンガルー)』
https://qangaroo.jp/

最近の記事

SNS共有

X CLOSE
X CLOSE
X CLOSE