はじめに
PostmanとはAPIのテストツールです。開発時の動作確認や自動テスト等で活用できます。
今回はPostmanのちょっとしたテクニックを紹介します。
目次
- Postmanの使い方
- コレクションの作成
- リクエストの作成
- 環境変数
- 複雑な処理の委託
Postmanの使い方
使い方について詳しくは説明しません。公式ドキュメントや他記事をご参照ください。
ここでは最低限の使い方について説明します。
コレクションの作成
PostmanはAPIのリクエストについて定義して実行する事ができます。
コレクションとはそれらをまとめたものです。
また、APIについてテストシナリオがある場合、一連の流れをまとめたものとも捉えることできます。
実際の操作はPostmanの左側にあるCreate New Collectionを押下するだけです。
リクエストの作成
さきほど作成したコレクションを右クリックするとAdd requestと出ます。
これを押下すると新しいリクエストについて追加する事ができます。
リクエスト送信
URLを入力してSendを押下するとHTTPリクエストが送信できます。
ここではhttpbinに対して送ります。
画像下部でレスポンスボディが確認できます。
環境変数
Postmanには環境変数を定義する事ができます。用途は主に2つあります。
1つはテスト対象の切替です。例えばAPIのドメインを切り替えるのは、環境変数を利用すると楽に行えます。
このように定義した環境変数は{{}}で囲むことでURLはもちろん、クエリパラメータやリクエストボディ等に利用できます。
もう1つはテストシナリオ中に発生した値の受け渡しです。
例えばレスポンスボディの値を環境変数に入れることで次のリクエストの実行のパラメータにする事ができます。
複雑な処理の委託
Postmanはリクエストを送る前と後でjavascriptを実行する事ができます。ただし、ライブラリを読み込ませて複雑な処理をすることはできません。さきほど説明した環境変数の操作やリクエストの実行結果のAssert程度です。
ただし、テストシナリオを自動化する中で、クライアント側で少し器用な処理が行えると便利なときがあります。これはローカルに委託先のサーバを作成する事で対応できる場合があります。今回はローカルでテストが自動化できれば要件を満たせたため問題はありませんでしたがCICDに組み込むなら検討が必要になることに注意してください。
非同期処理のAPIを実行して、数秒待機してから次のAPIを実行したい場合は、以下のように実現できます。
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const PORT = 9999;
app.use(bodyParser.json());
app.post('/delay', (req, res) => {
const { delayInSeconds } = req.body;
if (typeof delayInSeconds !== 'number' || delayInSeconds <= 0) {
return res.status(400).send('Invalid delay value');
}
setTimeout(() => {
res.send(`Delayed for ${delayInSeconds} seconds!`);
}, delayInSeconds * 1000);
});
const server = app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
process.on('SIGTERM', () => {
console.log('Stopping server gracefully');
server.close(() => {
console.log('Server stopped');
process.exit(0);
});
});
nodejsで簡単なサーバを構築します。nodeをインストールして実行しても良いですし、dockerで動かしても良いと思います。
http://localhost:9999/delay
にPOSTリクエストを送ると指定された秒数待機してからレスポンスを返します。これをコレクションのリクエストの間に挟むことで実現できます。
まとめ
今後はnewmanやdockerと合わせた自動テストについて紹介したいと思います。