APIメインのシステムでE2E(エンドツーエンド)テストをするにあたり、なにかいいツールはないかなと探していたら見つけました。その名も、「Karate」。押忍!
Karateとは
Karateは、APIテストの自動化、モック、パフォーマンステスト、さらにはUI自動化を単一の統合フレームワークに組み合わせる唯一のオープンソースツールです。 Cucumberによって一般化されたBDD構文は言語に依存せず、プログラマー以外でも簡単に使用できます。 強力なJSONおよびXMLアサーションが組み込まれており、テストを並行して実行して速度を上げることができます。
SeleniumやCypress、NightwatchなどのUIテストツールに対して、KarateはAPIテストに特化しています。APIだけでなく、UIテストにも対応しているようですね。
Karateをさわってみる
KarateのREADME.mdにしたがって動かしてみます。環境は以下のとおりです。
まずは、Karate入りのMavenプロジェクトを作成します。Gradleプロジェクトの場合、こちらのbuild.gradleが参考になります。
作成されたプロジェクトは以下のようなディレクトリ構成になっています。
ポイントは、src/test/java
配下にリソースファイルを配備することです。一般的にMavenやGradleプロジェクトでは、テストに利用するリソースファイル(上でいうと、.js
や.xml
)はsrc/test/resources
配下に置くのですが、Karateではsrc/test/java
配下に配備することを推奨しています。これにより、Karate以外のテストで利用するファイルとごちゃまぜにならないように管理できます。
pom.xml
にsrc/test/java
配下にリソースファイルを配備する設定が書かれています。
シナリオの書き方を見てみます。Karateでは、.feature
にシナリオを書きます。サンプルとしてすでにusers.feature
にシナリオが書かれています。
Karateを使ったことがなくても、ぱっと見てなんとなくわかる記述なのがいいですね。具体的には以下のテストシナリオが書かれています。
https://jsonplaceholder.typicode.com/users
にGET
でアクセスしたときに、ステータスコードが200
であること- レスポンスボディをもとに(
id=1
)、https://jsonplaceholder.typicode.com/users/1
にGET
でアクセスしたときに、ステータスが200
であること
APIを呼び出す際、前回のAPI呼び出しの結果を利用できるのがいいですね。記述も簡潔でわかりやすいです。
最後に、テストを動かしてみます。ログも全部載せておきます。
レポートも出力してくれます。見やすいですね。
まとめ
APIのテスト自動化ツール「Karate」を使ってみました。環境構築が簡単で、学習コストも低そうです。この機会にKarateに入門します。押忍!