企業システムである以上、品質の担保は大事な要件です。そしてそれを支えるのは十分なテストになります。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経由だけの疎結合でのテストを行うのに向いています。外部システム連携する際や、バージョンアップなどに伴う互換性の確認などに使うこともできるでしょう。