見出し画像

「Frisby を用いたAPI自動テストの実施」

こんにちは。SHIFT のテスト自動化エンジニアの中川です。

SHIFT はさまざまなテスト自動化の取り組みを行っていますが、私はそのなかでも 「Frisby」 というツールを使った API の自動テストを担当しています。

今回はこの Frisby について、ゼロから実際にテストを動かすまでの流れを、各手順の解説を交えながらお伝えします。

Frisby とは

Frisby はREST API自動テストに特化した、オープンソースのソフトウェアです。

javascript でテストを記述するため、自動テスト作成の際には javascript の知識が必要ですが、Node.js の環境があれば実行できるというメリットがあります。

前提

当エントリはNode.js がインストールされた Windows 環境を前提として記載しております。

お使いのWindows に Node.js をインストールされてない場合、Node.js公式サイトよりLTS版Node.js(x64版)をダウンロードし、インストールしてください。

コマンドプロンプトで以下の通りコマンドを入力し、バージョンが表示されたらインストール成功です。

>node --version 
v12.18.4 

環境構築

Frisby テスト用のフォルダを作成し、以後そのフォルダ内で作業します。

Frisby を用いたテストを作成、実行するための環境を作るため、まずnpm を用いて必要なパッケージのインストールを行います。

インストールするのは、Frisby とテストフレームワークのJest、およびその関連ライブラリです。

コマンドプロンプト上で作業フォルダに移動し、以下のコマンドを実行することでインストールが完了します。

>npm install frisby 

テストの作成

Frisby を用いたテストコードを作成します。

テストファイルを配置するためのフォルダとして __test__ という名前の新しいフォルダを作成し、テストを記載するファイルを test.js という名前で保存します。

こうして作成したファイルにテストコードを記述していきます。

今回はサンプルとして「http://httpbin.org/status/418にGETメソッドでアクセスした場合、ステータスコード418が返却されること」のテストを作成しましょう。

まずFrisbyを利用するために、requireでインポートし、テストを定義するためにtest関数を呼び出します。

test 関数の第一引数にはテスト名、第二引数にテスト内容を記述するための空の関数を与えます。

ここまでで、ファイルは以下のようになります。

const frisby = require('frisby'); 
test('sample test', () => { 
   return; 
}); 

次に、testの第二引数の関数内にFrisbyを利用したテスト内容を記述します。

まず「http://httpbin.org/status/418にGETメソッドでアクセス」するために、Frisbyのget()メソッドを用いて以下のように記述します。

frisby.get('http://httpbin.org/status/418') 

続けて、期待値が「ステータスコード418が返却されること」であることを示すために、expect()メソッドでテストの期待値を記述します。

frisby.get('http://httpbin.org/status/418') 
       .expect('status', 418); 

これでテスト内容の記述は完了です。

先ほどのファイルに上記のテスト内容を追加することで、以下のようなテストコードが完成します。

const frisby = require('frisby'); 
test('sample test', () => { 
   return frisby.get('http://httpbin.org/status/418') 
       .expect('status', 418); 
}); 

以上で「http://httpbin.org/status/418にGETメソッドでアクセスした場合、ステータスコード418が返却されること」のテストが完成です。

今回の例では ‘status’ が 418 であることを期待しているので、 レスポンスステータスが 418 であればテストOK、そうでなければテストNG となります。

テストの実施

テストの実行のために設定ファイルが必要なので、package.json を作成します。

例えば以下のように記述して作業フォルダに配置することで、テストフレームワークとしてJest を用いる設定ファイルとして機能します。

{ 
 "scripts": { 
   "test": "jest" 
 } 
} 

その後、コマンドプロンプト上で、以下のコマンドを入力するとテストが実施されます。 

>npm test 

テストが完了すると、以下のような出力が得られます。

> jest 
PASS  __tests__/SimpleExample.js 
 √ sample code (1703 ms) 
Test Suites: 1 passed, 1 total 
Tests:       1 passed, 1 total 
Snapshots:   0 total 
Time:        7.298 s 
Ran all test suites. 

PASS という出力はテスト結果がOK だったことを意味します。

逆にテスト結果がNGだった場合、以下の通り FAIL が出力されるとともに、期待値と実際の値が出力されます。

> jest 
FAIL  __tests__/SimpleExample.js 
 × sample code (783 ms) 
 ● sample code 
   assert.strictEqual(received, expected) 
   Expected value to strictly be equal to: 
     417 
   Received: 
     418 
   Message: 
     HTTP status 417 !== 418 

以上でテストの実施は完了です。

以後は npm test を実行するだけで何度でも同じテストを実施できます。

まとめ

今回はfrisby のテスト環境を構築し、テストの書き方とテストを実施する手順を紹介しました。 何もない状態からでも、簡単にテストの準備ができることをお伝え出来たかと思います。

また、今回はシンプルなテストを例にあげてご紹介しましたが、 Frisby はテストコードを javascript で記述するため、javascript さえ書ければ複雑なテストも実装することが出来ます

API テストの自動化を考えている方は、ぜひ一度試してみてはいかがでしょうか?

――――――――――――――――――――――――――――――――――

執筆者プロフィール:中川 航太郎                  大学院で計算機の基礎理論を研究し、 提唱したアルゴリズムが正しく動くことを数学的に証明していた。 現在は SHIFT でテスト自動化エンジニアとして自動テストを作成する傍ら、 より高度な自動化システムの開発を目論んでいる。 

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら    
https://recruit.shiftinc.jp/career/