[Java]rest-assuredでREST APIのテストをする

2015.08.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

REST APIのテストをする

近頃はREST APIを作成することが多くなってきましたが、みなさんはどのようにテストをしているでしょうか。
昔はCactusとか使ってたけど、(とっくに開発終了してた・・・)
なんか簡単にテストできるライブラリないかなあと思って探していたら、よさそうなものを見つけたので紹介します。

rest-assuredとは

rest-assuredとは、RESTサービスを簡単にテストするためのJava DSLとのことです。
メソッドを組み合わせてREST APIへのリクエストとレスポンスの検証が可能で、シンプルな記述で使うことができます。

//rest-urlのレスポンスを検証
get("/rest-url")
  .then().body("something.json.param", equalTo("anyvalue"));

rest-assuredを使ってみる

セットアップ

ではrest-assuredをつかったJavaプロジェクトをセットアップしましょう。
プロジェクトはGradleを使ってセットアップします。
下記build.gradleを作成しましょう。

//build.gradle
group 'RestAssuredSample'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.jayway.restassured:rest-assured:2.5.0'
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

つづいて、Javaクラスを作成します。

//src/main/java/Main.java

public class Main {
  public static void main(String[] args) {
    //ここにコードを記述していく
  }
}

今回はこのMainクラスにrest-assuredのサンプルコードを記述していきます。 ※JUnitのテストクラスでもOK

rest-assuredを使う

まずは必要なモジュールをstatic importします。

import static com.jayway.restassured.RestAssured.*;
import static com.jayway.restassured.matcher.RestAssuredMatchers.*;
import static org.hamcrest.Matchers.*;

次はサンプルJSONを返すサーバを用意します。例として、「http://localhost:9888/test?param1=value1」
とアクセスすると、次のようなJSONを返すWEBアプリを用意しました。

{
"result":{
 "code":1,
 "data":{"message":"hello"},
 }
}

MainクラスにREST APIを検証するコードを書いてみましょう。

  RestAssured.port = 9888;
  given().
    param("param1", "value1").
    when().
    get("/test").
    body("result.data.message",equalTo("hello"));

任意のポート番号に変更後、リクエストにパラメータを設定し、/testに対してリクエストを出しています。
レスポンスはbodyメソッド内でequalsToを使って検証しています。

get()メソッドを使えば、GETリクエストを送ることができます。
次のようにURIオブジェクトを渡し、結果をJSON文字列で取得することもできます。

  URI uri = new URI("http://localhost:9888/test?param1=value1");
  String json = get(uri).asString();

また、次のように記述すれば、Basic認証がある場合でもテストすることができます。

  given()
    .auth().basic(username, password)
    .when()
    .get("/secure-url").then().statusCode(200);

各種リクエスト関数や検証関数の使用方法については、こちらをご確認ください。   

JSONの検証

さらに、最近のバージョンではJSON Schemaの妥当性チェックを行うこともできるようになりました。
ここ に使用方法が記述してあるので、確認してみてください。