REST API用テストフレームワークまとめ

企業システムである以上、品質の担保は大事な要件です。そしてそれを支えるのは十分なテストになります。REST APIは一見するとHTTPアクセスになりますのでテストは何でもできそうですが、やはり専用のライブラリを使う方がコード量も短くて済みます。

apickli/apickli

Node.js向けに作られており、Node.jsでよく使われているテストフレームワークCucumber.jsと組み合わせて利用できるフレームワークとなっています。Featureは例えば次のように記述されます。

Feature:
    Httpbin.org exposes various resources for HTTP request testing
    As Httpbin client I want to verify that all API resources are working as they should

    Scenario: Setting headers in GET request
        Given I set User-Agent header to apickli
        When I GET /get
        Then response body path $.headers.User-Agent should be apickli

chitamoor/Rester

Python向けのREST APIテストフレームワークです。専用のapirunnerというコマンドにテスト用の設定ファイル(JSONまたはYAMLで記述)を渡して実行します。JSONは次のように記述します。

{
  "testSteps": [
    {
      "name":"Name of TestStep",
      "apiUrl":"http://example/api/v1/helloworld/print",
      "asserts":{
        "headers":{
          "content-type":"application/json; charset=utf-8"
        },
        "payload":{
          "message":"Hello World!"
        }
      }
    }
  ]
}

jeffbski/bench-rest

bench-restはベンチマークを取るのに使うNode.js製のソフトウェアです。例えば次のような結果が得られるようです。

$ bench-rest -n 1000 -c 50 ./examples/simple.js
Benchmarking 1000 iteration(s) using up to 50 concurrent connections

Using flow from: /Users/barczewskij/projects/bench-rest/examples/simple.js
 { main: [ { get: 'http://localhost:8000/' } ] }
Progress [=======================================] 100% 0.0s conc:49 1341/s

errors:  0
stats:  { totalElapsed: 894,
  main:
   { meter:
      { mean: 1240.6947890818858,
        count: 1000,
        currentRate: 1240.6947890818858,
        '1MinuteRate': 0,
        '5MinuteRate': 0,
        '15MinuteRate': 0 },
     histogram:
      { min: 4,
        max: 89,
        sum: 41603,
        variance: 242.0954864864864,
        mean: 41.603,
        stddev: 15.55941793533699,
        count: 1000,
        median: 42,
        p75: 50,
        p95: 70.94999999999993,
        p99: 81.99000000000001,
        p999: 88.99900000000002 } } }

vlucas/frisby

FrisbyはNode.js用テストフレームワークのJasmineと組み合わせて使います。テストの記述はコードになっていて、若干独自のものになります。

frisby.create('GET user johndoe')
  .get(URL + '/users/3.json')
  .expectStatus(200)
  .expectJSONTypes({
    id: Number,
    username: String,
    is_admin: Boolean
  })
  .expectJSON({
    id: 3,
    username: 'johndoe',
    is_admin: false
  })
  :
.toss();

cybertk/abao

abaoはテストのベースになるフォーマットとしてRAMLを採用しています。コマンドでRAMLファイルとAPIのエンドポイントを指定して実行します。

abao api.raml http://api.example.com

CarlJi/RestfulAPITests

Java用のテストフレームワークになります。JUnitなどと組み合わせられるので、JavaシステムのテストとともにAPIのテストができるようになります。

yookoala/restit

RESTitはGo言語で書かれたテストフレームワークで、テストコードは独自のものになります。


この他、Webアプリケーションフレームワーク向けにテストが提供されている場合もあります。その場合はモックに対応しているなど、Webアプリケーションフレームワークを使っているからこそ提供される機能もあります。

今回紹介したようなテストフレームワークは、HTTP/HTTPS経由だけの疎結合でのテストを行うのに向いています。外部システム連携する際や、バージョンアップなどに伴う互換性の確認などに使うこともできるでしょう。

© NTT Communications Corporation All Rights Reserved.