APIのテストでPostmanを使っていますがNewmanというコマンドラインで実行できるものがあったので使ってみました。
Postmanとは?
APIリクエストを簡単に実行できたり、開発で役に立つツールです。
公式サイト:https://www.getpostman.com/
ドキュメント:https://learning.getpostman.com/docs/postman/launching-postman/introduction/
Newmanとは?
NewmanはPostmanで作ったjsonを読み込んでコマンドラインから実行できるツールです。
ドキュメント:https://learning.getpostman.com/docs/postman/collection-runs/command-line-integration-with-newman/
インストール
npm install -g newman
準備
Postman Echoという確認用のAPIサービスがあるのでこちらで確認してみます。
Postman Learning CenterのページからCollection.jsonとCSVを取得します。
CSVはそのまま使用すると実行結果が失敗となったため、valueの値を"で囲みました。
{
"variables": [],
"info": {
"name": "Using data files",
"_postman_id": "5d604721-fce3-a131-635c-fbbf5744a169",
"description": "",
"schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json"
},
"item": [
{
"name": "POST Request",
"event": [
{
"listen": "test",
"script": {
"type": "text/javascript",
"exec": [
"var jsonData = JSON.parse(responseBody);",
"",
"tests['Response has data value'] = jsonData.form.foo === data.value"
]
}
}
],
"request": {
"url": "postman-echo.com/{{path}}",
"method": "POST",
"header": [],
"body": {
"mode": "formdata",
"formdata": [
{
"key": "foo",
"value": "{{value}}",
"type": "text",
"enabled": true
}
]
},
"description": ""
},
"response": []
}
]
}
path,value
post,"1"
post,"2"
post,"3"
post,"4"
実行
基本的にはnewman run mycollection.json
で実行します。
今回はリクエストをCSVファイルから読み込むので-d
オプションを使用します。
$ newman run Collection.json -d requestData.csv
実行すると、
$ newman run Collection.json -d requestData.csv
newman
Using data files
Iteration 1/4
→ POST Request
POST postman-echo.com/post [200 OK, 690B, 503ms]
✓ Response has data value
Iteration 2/4
→ POST Request
POST postman-echo.com/post [200 OK, 785B, 173ms]
✓ Response has data value
Iteration 3/4
→ POST Request
POST postman-echo.com/post [200 OK, 663B, 162ms]
✓ Response has data value
Iteration 4/4
→ POST Request
POST postman-echo.com/post [200 OK, 784B, 169ms]
✓ Response has data value
┌─────────────────────────┬─────────────────────┬────────────────────┐
│ │ executed │ failed │
├─────────────────────────┼─────────────────────┼────────────────────┤
│ iterations │ 4 │ 0 │
├─────────────────────────┼─────────────────────┼────────────────────┤
│ requests │ 4 │ 0 │
├─────────────────────────┼─────────────────────┼────────────────────┤
│ test-scripts │ 4 │ 0 │
├─────────────────────────┼─────────────────────┼────────────────────┤
│ prerequest-scripts │ 0 │ 0 │
├─────────────────────────┼─────────────────────┼────────────────────┤
│ assertions │ 4 │ 0 │
├─────────────────────────┴─────────────────────┴────────────────────┤
│ total run duration: 1208ms │
├────────────────────────────────────────────────────────────────────┤
│ total data received: 1.5KB (approx) │
├────────────────────────────────────────────────────────────────────┤
│ average response time: 251ms [min: 162ms, max: 503ms, s.d.: 145ms] │
└────────────────────────────────────────────────────────────────────┘
成功しました。
実際に使うときは使用しているコレクションや環境変数をエクスポートして指定します。
-r
オプションで実行結果をJSONで出力したり、
-e
オプションで環境変数ファイルを指定できます。
オプションは他にも色々あるので確認してみてください。
ライブラリとしても使用できるようです。
Using Newman as a Library
newman.jsconst newman = require('newman'); // require newman in your project // call newman.run to pass `options` object and wait for callback newman.run({ collection: require('./sample-collection.json'), reporters: 'cli' }, function (err) { if (err) { throw err; } console.log('collection run complete!'); });
まとめ
gitフック1などに組み込んでおけば便利そうです。
参考
PostmanとNewmanを組み合わせて、CI/CDに組み込むREST APIの自動テストを作ろう!
newman
Postman Echo
Postman Learning Center
-
gitフックを使ったことがないので今度使ってみたいと思います。 ↩