[Java]rest-assuredでREST APIのテストをする
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の妥当性チェックを行うこともできるようになりました。
ここ に使用方法が記述してあるので、確認してみてください。