カスタムの事後リクエストスクリプトを使用して、レスポンスを検証し、XMLペイロードから変数を作成できます。そのための大まかな手順は次のとおりです。
- 事後リクエストスクリプトに新しいAPIスニペットを追加します。
- 組み込みのxml2jsonライブラリを使用して、XMLレスポンスボディをJSONオブジェクトに変換します。
- JSONパス表記を使用してオブジェクトキーの反復処理を行い、ターゲットプロパティを見つけます。
- Postmanの
pm.
メソッドを使用して変数またはアサーションを作成します。
この記事では、W3SchoolsのFahrenheitToCelsiusエンドポイント (華氏から摂氏に変換) を使用して、APIテストエディターでのXMLペイロードの使用方法を示します。
変数の追加
この例では、tempF
の値がtempC
の値に正しく変換されることをアサートします。左側の [Variables] パネルに次の変数を追加します。
-
tempF
=32
-
tempC
=0
リクエストの詳細の設定
次の詳細を持つリクエストを追加します。
- メソッド: POST
- URL:
https://www.w3schools.com/xml/tempconvert.asmx
- ヘッダー:
- Content-Type = text/xml
- SOAPAction = https://www.w3schools.com/xml/FahrenheitToCelsius
[Request details] の [BODY] タブに、次の未加工の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>
レスポンスの検証
値 <FahrenheitToCelsiusResult>0</FahrenheitToCelsiusResult>
がtempC
変数の値に等しいかどうかをアサートするには、[Validation and variable assignment] セクションの [POST-REQUEST] タブに新しいスニペットを追加します。
下記のスクリプトは、レスポンスを検証するために次の手順を実行します。
- 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テストエディターの左側にある [Variables] リストにmyTemperature
を追加します。