APIスクリプトの例

このガイドでは、レスポンス検証、変数作成、デバッグのためのコンソールログの実行を使用した例を紹介します。

📘

Postman JavaScriptオブジェクト

mablとPostmanとのインテグレーションにより、ユーザーはPostmanでサポートされるJavaScriptのオブジェクトや関数を使用して、カスタムロジックやレスポンスの検証を行うことができます。

レスポンス検証

APIが期待どおりの結果を返していることを検証するには、ローコードのアサーション機能を使用することをお勧めします。ただし、より複雑なアサーションを作成する必要がある場合は、JavaScriptを使用してカスタムアサーションを作成できます。

JSONペイロードを使用するREST API

JSONレスポンスボディのデータを検証するには、以下のようなコードを使用します。

pm.test("Person is Jane", () => {
  
  //assigning the response body to a constant.
  const responseJson = pm.response.json(); 
  
  //assert that the third person object in the response has name and age properties with a given value.
  pm.expect(responseJson.person[3].name).to.eql("Jane"); 
  pm.expect(responseJson.person[3].age).to.eql(23); 
});

配列の長さを検証する場合は、上記のpm.tests() 関数内に次のスニペットを追加できます: pm.expect(responseJson.person).to.have.lengthOf(15);`

前述の例で、アサートする個人名がpersonNameなどの変数に格納される場合は、静的文字列 "Jane" を変数値に置き換えて、アサーション用のコードを次のようにすることができます: pm.expect(responseJson.person[3].name).to.eql(pm.variables.get("personName"));

XMLペイロードを使用するSOAP API

XMLベースのレスポンスボディのデータを検証するアサーションを作成するには、次のスクリプト手法を使用します。

  • 組み込みのxml2jsonライブラリを使用して、XMLボディをJSONオブジェクトに変換します。
  • JSONパス表記を使用するか、オブジェクトキーの反復処理を行ってアサートするターゲットプロパティを見つけます。

: POSTリクエストを次のエンドポイントに送信します: https://www.w3schools.com/xml/tempconvert.asmx (温度を華氏から摂氏に変換)。1つの変数 (例: tempF = 32) をリクエストボディで華氏の入力を渡すのに使用し、もう1つの変数をレスポンスボディで摂氏の期待される結果 (例: tempC = 0) を検証するのに使用します。

APIテストステップで次の内容を指定します。
メソッド: POST
URL: https://www.w3schools.com/xml/tempconvert.asmx
ヘッダー:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
     <FahrenheitToCelsius xmlns="https://www.w3schools.com/xml/">
       <Fahrenheit>{{tempF}}</Fahrenheit>
     </FahrenheitToCelsius>
    </soap:Body>
</soap:Envelope>

このPOSTリクエストを送信すると、摂氏表示の温度を含むレスポンスボディが返されます (例: 32°Fが0°Cに変換される)。
レスポンスボディ

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <FahrenheitToCelsiusResponse xmlns="https://www.w3schools.com/xml/">
      <FahrenheitToCelsiusResult>0</FahrenheitToCelsiusResult>
    </FahrenheitToCelsiusResponse>
  </soap:Body>
</soap:Envelope>

0 の値がtempC変数の値に等しいかどうかをアサートするには、APIステップの [Validation and variable assignment] セクションで次のスクリプトを記述します。
XMLベースのレスポンスに対するJavaScriptのアサーション

pm.test("Validate conversion Fahrenheit To Celsius produces the expected result", () => {
    //convert XML response body to a JSON object using xml2Json library
    const responseJson = xml2Json(pm.response.text());

    //Use JSON path syntax to get to the target property 
    let result = responseJson["soap:Envelope"]["soap:Body"].FahrenheitToCelsiusResponse.FahrenheitToCelsiusResult;

    //Assert that result is the correct value
    pm.expect(result).to.eql(pm.variables.get("tempC"));
});

変数作成

JSONデータに基づいた変数の作成

APIレスポンス (JSON形式) に基づいて変数を作成するには、次のようなコードを使用します。
JavaScript

var jsonData = JSON.parse(responseBody);

//assign the third person's object id to a variable named userID
postman.setEnvironmentVariable("userID", jsonData.person[3].id);

XMLデータに基づいた変数の作成

XML形式のAPIレスポンスボディに基づいて変数を作成するには、XMLベースのレスポンスボディのデータを検証する場合と同様に、最初に次の手順を実行します。

  • 組み込みのxml2jsonライブラリを使用して、XMLボディをJSONオブジェクトに変換します。
  • JSONパス表記を使用するか、オブジェクトキーの反復処理を行って変数に代入するターゲットプロパティ値を見つけます。

たとえば、上記のアサーションセクションで説明した同じAPIエンドポイント (温度を華氏から摂氏に変換) を使用する場合は、次のスクリプトを用いて生成される摂氏温度をmyTemperatureという変数に代入することができます。

//convert XML response body to a JSON object using xml2Json library
const responseJson = xml2Json(pm.response.text());

//Use JSON path syntax to get to the target property value to be assigned to a variable
let result = responseJson["soap:Envelope"]["soap:Body"].FahrenheitToCelsiusResponse.FahrenheitToCelsiusResult;

//Assign the result value to a given variable name
pm.environment.set("myTemperature", result);

変数作成のスクリプトは、前のセクションのアサーションスクリプトによく似ています。大きな違いは、アサーションで検証を行う代わりにターゲット値を変数に代入している点です。

リクエストを送信する際に更新後のmyTemperature変数値を参照するには、APIテストエディターの左側のパネルにある変数リストにmyTemperatureを追加します。

コンソールログ

APIテストでは、デバッグに便利なコンソールログもサポートされます。コンソールログは、事前リクエストスクリプト、テストスクリプト、フローレベルスクリプトのすべてのAPIテストスクリプトで機能します。

📘

ログステートメントの使用

以下のログステートメントがサポートされます。

  • console.log()
  • console.info()
  • console.warn()
  • console.error()

出力の表示

コンソールログステートメントの出力は、APIテストエディター、クラウド実行の [API Test Output] ページ、CLIによるローカル実行の出力で確認できます。
APIテストエディターで [Send] ボタンをクリックすると、コンソールログは次のように [Results] パネルのタブとして利用可能になります。

11861186

クラウド実行では、[Test Output] ページでAPIテストの各ステップについて、コンソールログを確認できます。

14041404

コンソールログは、mabl CLIで実行したAPIテストの出力にも含まれます。
テキスト

🚧

テストのサイズ制限

APIテストのサイズは、1MBを超えることはできません。大きなJavaScript事前リクエストスクリプトは、慎重に使用することをお勧めします。

API test with console log

→ 
  ┌
  │ 'Reticulating splines before API request.'
  │ 'Reticulating complete:', { splineCount: 42, averageReticulation
  │ 9m: 0.98 }
  └
  GET https://localhost:8080/test/splines  OK, 1kB, 243ms]
  ┌
  │ 'Resetting splines after request.'
  └
  ✓  Status equals 200

┌─────────────────────────┬────────────────────┬───────────────────┐
│                         │           executed │            failed │
├─────────────────────────┼────────────────────┼───────────────────┤
│              iterations │                  1 │                 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│                requests │                  1 │                 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│            test-scripts │                  1 │                 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│      prerequest-scripts │                  1 │                 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│              assertions │                  1 │                 0 │
├─────────────────────────┴────────────────────┴───────────────────┤
│ total run duration: 307ms                                        │
├──────────────────────────────────────────────────────────────────┤
│ total data received: 102B (approx)                               │
├──────────────────────────────────────────────────────────────────┤
│ average response time: 243ms [min: 243ms, max: 243ms, s.d.: 0µs] │
└──────────────────────────────────────────────────────────────────┘
10:34:07 AM -  Test Passed

詳細はこちら

詳細なスクリプトのリファレンスについては、Postmanのドキュメントを参照してください。