はじめに
前回の「REST Assured を使ったREST API テスト」 で、REST Assuredを使ったREST APIのテストの書き方についての入門を書きました。前回はさわりだけでしたが、今回はより実践的な内容を書いていきます。
使い方
Responseについて
JSONPathを利用してResponseを検証する
JSONPathでの解析方法を使って記述します。
Requestの投げ方は通常どおりgiven().get()
やgiven().post()
で行い、then()
以降でResponseの解析を行います。
@Test
public void テスト() {
given()
.get("/v1/clients/15930/account-periods")
.then()
.body("accountPeriods", hasSize(3))
.body("accountPeriods.accountPeriodId", hasItems(24216, 24582, 24583))
.body("accountPeriods[0].accountPeriodId", equalTo(24216))
;
}
hasSize()
やhasItem()
,equalTo()
はimport static org.hamcrest.Matchers.*;
としていることで呼出せます。
JSONPathでJSONの解析は、基本的には.
を区切りとしてRootから辿っていきます。
記法は色々あるので試してみてください。
Response BodyのJSONを解析し、特定部分をStringで受け取る
先ほどの例ではResponseを直接アサーションしていますが、一旦変数で受け取る方法を書きます。
@Test
public void テスト() {
String response = get("/v1/clients/15930/account-periods").asString(); // ResponseBody をStringで受け取る
int id = from(response).get("accountPeriods[0].accountPeriodId"); // JSONとしてパースし、JSONPathで対象を取得
out.println(id);
}
get()
で直接Requestを投げ、その結果をasString()
として文字列で一旦受けます。
その後、from(String)
でJSONとしてパースして、その後get()
でJSONPathを使ってJSON内指定した部分を取得します。
Responseの値を次のRequestに含める場合など、このような方法で記述できます。
Requestについて
次にRequestの投げ方のバリエーションを説明します。
パスパラメータを利用する(可変長引数を使う)
URIのパスパラメータを使い方法の一つ目で、可変部分を可変長引数で渡す方法です。
パスパラメータについての公式ドキュメントに従ってかいてみます。
ここではついでにRequestのlogも吐き出しています。
@Test
public void パスパラメータ() {
given()
.log()
.all()
.get("/v1/clients/{id}/account-periods", 15930)
.then()
.body("accountPeriods", hasSize(3))
;
}
get("/v1/clients/{id}/account-periods", 15930)
とある部分で、引数の15930
が{id}
の部分にあてはめられ、/v1/clients/15930/account-periods
に対してGETメソッドがよばれます。
log().all()
としているので、Requstのログが標準出力に出力され確認することができます。
パスパラメータを利用する(Mapを利用する)
パスパラメータをMapで渡す方法を説明します。
get("/v1/clients/{id}/{api}", params)
として引数にMapを渡し、パス中の変数id
,api
をKeyとしたMapのValueを取得しパスが組み立てられてます。
@Test
public void パスパラーメタMap() {
Map<String, String> params = new HashMap<String, String>();
params.put("id", "15930");
params.put("api", "account-periods");
given()
.log()
.all()
.get("/v1/clients/{id}/{api}", params)
.then()
.body("accountPeriods", hasSize(3))
;
}
Request Body にJSONを含める
REST APIでよくある、RequestでJSONを含める方法を説明します。
Request Bodyについての公式ドキュメントどおりに、body()
の引数にJSONを設定すればOKです。
Requestのログ出力も設定しているので、実際にPOSTされたか確認できます。
private static String postJson = "{sessionId: \"abc\"}";
@Test
public void JSON送信テスト() {
given()
.log() // ログをだす
.all() // 全部
.body(postJson) // Request Body の設定
.post("/v1/clients/15930/account-periods")
.then()
.log()
.body()
;
}
終わりに
REST Assuredを使った幾つかのサンプルをご紹介しました。
これ以外にも実際には様々なパターンがテストでは必要と成ってくるでしょうが、APIが直感的にわかる名称なのと、公式ドキュメトが非常に充実しているため迷うことはないと思います。
認証時の定型的な処理を行うSessionFilterや、サンプルでも使ったロギング、JSON Schema Validationなども説明されています。ぜひ公式ドキュメントを読んで試してみてください。