XMLペイロードを使用するAPI(たとえばSOAP API)をテストする場合、カスタムのリクエスト後処理用スクリプトを使ってレスポンスの検証や変数の作成ができます。これを実現するためのステップを簡単にご紹介します。
- 事後リクエストスクリプトに新しいAPIスニペットを追加します。
- 組み込みのxml2jsonライブラリを使用して、XMLレスポンスボディをJSONオブジェクトに変換します。
- JSONパス表記を使用してオブジェクトキーの反復処理を行い、ターゲットプロパティを見つけます。
- Postmanの
pm.メソッドを使用して変数またはアサーションを作成します。
この記事では、W3SchoolsのFahrenheitToCelsiusエンドポイント (華氏から摂氏に変換) を使用して、APIテストエディターでのXMLペイロードの使用方法を示します。
変数の追加
この例では、tempF の値が正しく tempC の値に変換されていることをアサーションします。次の変数を変数パネルに追加してください。
-
tempF=32 -
tempC=0
リクエストの詳細の設定
次の詳細を持つリクエストを追加します。
- メソッド: POST
- URL:
https://www.w3schools.com/xml/tempconvert.asmx - ヘッダー:
- Content-Type = text/xml
- SOAPAction = https://www.w3schools.com/xml/FahrenheitToCelsius
[リクエストの詳細] の [ボディ] タブに、次の未加工のXMLリクエストボディを追加します。
<?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リクエストを送信すると、tempFの温度を摂氏に変換したXMLレスポンスボディがAPIから返されます。この例では、温度は0です。
<?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変数の値に等しいかどうかをアサートするには、[バリデーションと変数代入] セクションの [リクエスト後処理用] タブに新しいスニペットを追加します。
下記のスクリプトは、レスポンスを検証するために次の手順を実行します。
- xml2jsonライブラリを使用して、XMLレスポンスボディをJSONオブジェクトに変換します。
-
JSONパス表記を使用して、
FahrenheitToCelsiusの値を取得します。 -
FahrenheitToCelsiusの値が変数tempCの値に等しいかどうかをアサートします。
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"));
});
新しい変数の作成
XMLレスポンスボディに基づいて変数を作成するには、XMLベースのレスポンスボディのデータを検証するときと同じ手順を最初に実行します。つまり、xml2jsonライブラリを使用してXMLをJSONに変換し、JSONパス表記を使用してFahrehheitToCelsiusResultのターゲットプロパティ値を見つけます。
pm.environment.set()メソッドを使用して、変数に結果を割り当てます。
//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を追加します。