Postmanを使用した負荷テスト
1. 概要
負荷テストは、最新のエンタープライズアプリケーションのソフトウェア開発ライフサイクル(SDLC)の重要な部分です。 このチュートリアルでは、 Postmanコレクションを使用して、簡単な負荷テストアクティビティを実行します。
2. 設定
システムのオペレーティングシステムと互換性のあるデスクトップクライアントをダウンロードしてインストールできます。 または、無料のPostmanアカウントを作成して、Webクライアントにアクセスすることもできます。
それでは、Postmanのコレクション形式v2.1で利用可能ないくつかのサンプルHTTPリクエストをインポートして、「Google Apps –負荷テスト」という新しいコレクションを作成しましょう。
{
"info": {
"_postman_id": "ddbb5536-b6ad-4247-a715-52a5d518b648",
"name": "Google Apps - Load Testing",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Get Google",
"event": [
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://www.google.com",
"protocol": "https",
"host": [
"www",
"google",
"com"
]
}
},
"response": []
},
{
"name": "Get Youtube",
"event": [
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://www.youtube.com/",
"protocol": "https",
"host": [
"www",
"youtube",
"com"
],
"path": [
""
]
}
},
"response": []
},
{
"name": "Get Google Translate",
"event": [
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://translate.google.com/",
"protocol": "https",
"host": [
"translate",
"google",
"com"
],
"path": [
""
]
}
},
"response": []
}
]
}
データのインポート中に「生のテキスト」オプションを使用する必要があります: それでおしまい! [続行]アクションをクリックしてインポートタスクを実行するだけで、Postman内でテストコレクションの準備が整います。
3. Postmanコレクションランナーの使用
このセクションでは、Postmanのコレクションランナーを使用して「GoogleApps–負荷テスト」コレクションのAPIリクエストを実行し、基本的な負荷テストを実行する方法について説明します。
3.1. 基本構成
コレクションを右クリックして、コレクションランナーを起動できます。
ランナーモードで、実行の順序、反復回数、および連続するAPIヒット間の遅延を指定して実行を構成しましょう:
次に、[Google Appsの実行–負荷テスト]をクリックして、コレクション内のAPIリクエストの基本的な負荷テストを開始します。
ランナーがAPIリクエストを実行すると、複数の反復にまたがる各APIヒットのライブ結果を確認できます。
3.2. テストスクリプトを使用した高度な構成
Postman GUIを使用して、APIの実行順序を制御することができました。 ただし、Postmanのテストスクリプト機能を使用することで、実行フローをより細かく制御できます。
「GoogleAPI」へのヒットがHTTP200 ステータスコードで返される場合にのみ、ワークフローに「GoogleTranslate」APIを含めたいとしましょう。 それ以外の場合は、「YoutubeAPI」を直接ヒットします。
まず、「GetGoogle」リクエストの[テスト]セクションに簡単な条件ステートメントを追加します。
if (pm.response.code == 200) {
postman.setNextRequest("Get Google Translate");
}
else {
postman.setNextRequest("Get Youtube");
}
次に、「GetGoogleTranslate」の後に実行される後続のリクエストとして「GetYoutube」を設定します。
postman.setNextRequest("Get Youtube");
さらに、「Get Youtube」がフローの最後のリクエストであることがわかっているため、その後の次のリクエストをnullとして設定します。
postman.setNextRequest(null);
最後に、テストスクリプトを含む完全なコレクションを見てみましょう。
{
"info": {
"_postman_id": "ddbb5536-b6ad-4247-a715-52a5d518b648",
"name": "Google Apps - Load Testing",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Get Google",
"event": [
{
"listen": "test",
"script": {
"exec": [
"if (pm.response.code == 200) {",
" postman.setNextRequest(\"Get Google Translate\");",
"}",
"else {",
" postman.setNextRequest(\"Get Youtube\");",
"}"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://www.google.com",
"protocol": "https",
"host": [
"www",
"google",
"com"
]
}
},
"response": []
},
{
"name": "Get Youtube",
"event": [
{
"listen": "test",
"script": {
"exec": [
"postman.setNextRequest(null);"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://www.youtube.com/",
"protocol": "https",
"host": [
"www",
"youtube",
"com"
],
"path": [
""
]
}
},
"response": []
},
{
"name": "Get Google Translate",
"event": [
{
"listen": "test",
"script": {
"exec": [
"postman.setNextRequest(\"Get Youtube\");"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://translate.google.com/",
"protocol": "https",
"host": [
"translate",
"google",
"com"
],
"path": [
""
]
}
},
"response": []
}
]
}
以前と同様に、コレクションランナーを使用してこのカスタムフローを実行できます。
4. ニューマンランナーの使用
Newman CLIユーティリティを使用して、コマンドラインからPostmanコレクションを実行できます。 このアプローチを取ると、自動化の機会が広がります。
これを使用して、既存のコレクションのカスタムフローの2つの反復を実行してみましょう。
newman run -n2 "Custom Flow Google Apps - Load Testing.postman_collection.json"
すべての反復が終了すると、統計の要約が表示され、リクエストの平均応答時間を確認できます。
最近のほとんどのサービスには、より高い値または期間のリクエストのブロックを開始するレート制限およびリクエストブロックロジックがあるため、デモンストレーションには意図的に低い値を使用していることに注意する必要があります。
5. Grafanak6の使用
Postmanは、リクエストの収集と実行のフローを作成する最も簡単な方法です。 ただし、 PostmanまたはNewmanを使用している間、リクエストを次々に呼び出しています。
実際のシナリオでは、同時に複数のユーザーからのリクエストについてシステムをテストする必要があります。 このようなユースケースでは、Grafanaのk6ユーティリティを使用できます。
まず、既存のPostmanコレクションをk6互換形式に変換する必要があります。 このマイルストーンには、postman-to-k6ライブラリを使用できます。
postman-to-k6 "Google Apps - Load Testing.json" -o k6-script.js
次に、2人の仮想ユーザーで3秒間ライブランを実行しましょう。
k6 run --duration 3s --vus 2 k6-script.js
完了すると、平均応答時間、反復回数、その他多くの指標を示す詳細な統計レポートが表示されます。
6. 結論
このチュートリアルでは、 Postmanコレクションを活用して、GUIとNewmanランナーを使用して基本的な負荷テストを実行しました。 さらに、Postmanコレクション内のリクエストの高度な負荷テストを実行するために使用できるk6ユーティリティについても学びました。