はじめに
REST APIの自動テストを行うためのツールを探していたところ、クラスメソッドさんの記事を見つけたのですが、若干バージョンが古かったので 2017/01/23 時点での最新バージョンで改めて試してみました。
REST Assuredとは
今回使用するライブラリはREST Assuredというもので、JavaでDSL風にREST APIのテストを記述することができます。
ライブラリを追加することでJSON/XMLのテストを簡単に書くこともできます。
使い方
ここでは、単純なJSONを返すREST APIのテストを書くための使い方を説明していきます。
依存関係の追加
お約束の依存関係追加です。
pom.xml
に以下の依存関係を追加します。
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
最初のものがREST Assured本体、二番目がJSONの中身をパス式で評価するための追加ライブラリ、三番目がJUnitです。
JUnitのテストコードとして記述するこもできますが、REST Assuredが提供するDSL内で自然な形でAssertionを表現するために、hamcrestのMactherを利用します。
static import追記
テストコードを記述するにあたり、DSLとして記述するために以下の static import を宣言します。
import static io.restassured.matcher.ResponseAwareMatcher.*;
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
テストコード作成
実際にテストコードを書いていきます。
REST Assuredは実際に対象サーバに向けてHTTP Requestを投げるのですが、ここではJSONPlaceholder を利用します。
以下のようなコードを書いてみます。
RestAssured.baseURI = "http://jsonplaceholder.typicode.com/";
given()
.get("/posts/2")
.then()
.body("userId", equalTo(1))
.body("id", equalTo(2))
.body("title", equalTo("qui est esse"))
;
コードをみて、なんとなく何をしているのかわかっていただけたのではないでしょうか。
givent()
で開始し、get(url)
でGET Methodでアクセス、then()
の後にその結果についての操作がかかれ、ここではbody()
メソッドでResponseのJSONをパス式で解析してAssertionを実行しています。
上記のテストコード通りにURLを叩いた際に戻ってくるJSONは以下のようなものです
{
"userId": 1,
"id": 2,
"title": "qui est esse",
"body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
}
プログラムでJSONのレスポンスを標準出力に流す場合は以下のように、Responseに対してprettyPrint()
を呼びます。
given().get("/posts/2").prettyPrint();
これだけでJSONがきちんと整形され標準出力に出力されるので、そのままデバッグでも利用できます。
Github
実際に記述したコードは以下のGithunにPush済みです。
https://github.com/shimashima35/RestAssuredSample
終わりに
REST APIテストのためのツール REST Assuredを簡単に説明しました。
REST Assuredはメソッドチェインでテストコードを組み立てるため、IDEとの親和性が高いことが特長です。ここでは細かい操作は説明していませんが、IDEから提供されるメソッドを試して見るだけで色々できるのではないでしょうか。