「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 テストの自動化を考えている方は、ぜひ一度試してみてはいかがでしょうか?
――――――――――――――――――――――――――――――――――
お問合せはお気軽に
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/