SOAP接口通常以XML格式返回响应数据,在Postman中验证这类响应的节点值,核心思路是先将XML响应转换为JSON对象,再针对转换后的对象做断言操作。Postman内置了xml2Json工具,能够自动完成XML到JSON的转换,大幅降低了XML节点的解析难度。

前提准备
首先需要在Postman中创建一个SOAP接口的测试请求,请求方法选择POST,在请求头中设置Content-Type为text/xml;charset=utf-8,请求体中填写完整的SOAP请求报文。发送请求后,能够在响应区域看到返回的XML格式数据。
XML转JSON的核心步骤
Postman的Tests标签页用于编写断言脚本,要验证XML节点值,第一步就是获取响应内容并完成格式转换:
// 获取接口返回的XML响应文本 var xmlResponse = responseBody; // 使用Postman内置的xml2Json工具将XML转换为JSON对象 var jsonResponse = xml2Json(xmlResponse);
转换完成后,jsonResponse就是包含所有XML节点信息的JSON对象,后续可以直接通过点语法或者中括号语法访问对应节点。
验证普通XML节点值
假设SOAP接口返回的XML响应结构如下:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetUserResponse xmlns="http://tempuri.org/">
<GetUserResult>
<UserName>张三</UserName>
<Age>25</Age>
<IsActive>true</IsActive>
</GetUserResult>
</GetUserResponse>
</soap:Body>
</soap:Envelope>
如果要验证UserName节点的值为张三,对应的断言脚本如下:
// 验证UserName节点值
pm.test("验证UserName节点值为张三", function() {
// 按照XML的层级访问节点,注意SOAP命名空间的处理
var userName = jsonResponse["soap:Envelope"]["soap:Body"]["GetUserResponse"]["GetUserResult"]["UserName"];
pm.expect(userName).to.equal("张三");
});
验证带命名空间的节点值
SOAP响应通常会包含默认的命名空间,转换后的JSON对象中,带命名空间的节点名称会保留命名空间前缀。如果节点的命名空间和上述示例不同,比如响应中包含自定义命名空间ns,对应的访问方式也需要调整:
// 假设响应中自定义命名空间为ns,验证Age节点值
pm.test("验证Age节点值为25", function() {
var age = jsonResponse["soap:Envelope"]["soap:Body"]["ns:GetUserResponse"]["ns:GetUserResult"]["ns:Age"];
pm.expect(age).to.equal("25");
});
验证节点存在性和数据类型
除了验证节点值,还可以验证节点是否存在,以及节点值的类型是否符合预期:
// 验证IsActive节点存在且值为布尔类型true
pm.test("验证IsActive节点存在且值为true", function() {
var isActive = jsonResponse["soap:Envelope"]["soap:Body"]["GetUserResponse"]["GetUserResult"]["IsActive"];
// 先判断节点是否存在
pm.expect(isActive).to.exist;
// 验证节点值是否为true,注意xml2Json转换后布尔值可能还是字符串,需要根据实际情况调整
pm.expect(isActive).to.equal("true");
});
常见注意事项
- xml2Json转换后,所有节点值默认都是字符串类型,即使原XML中是数字或者布尔值,也需要按字符串做对比,或者先做类型转换再断言。
- 如果XML节点有重复的同名子节点,转换后的JSON对象中该节点会变为数组,需要通过索引访问对应位置的节点值。
- 如果响应XML格式不规范,xml2Json转换可能会失败,此时可以先在
Tests标签页打印xmlResponse检查响应内容是否正确。
完整测试示例
将上述所有断言整合到Tests标签页的完整脚本如下:
// 获取XML响应并转换为JSON
var xmlResponse = responseBody;
var jsonResponse = xml2Json(xmlResponse);
// 验证UserName节点
pm.test("验证UserName节点值为张三", function() {
var userName = jsonResponse["soap:Envelope"]["soap:Body"]["GetUserResponse"]["GetUserResult"]["UserName"];
pm.expect(userName).to.equal("张三");
});
// 验证Age节点
pm.test("验证Age节点值为25", function() {
var age = jsonResponse["soap:Envelope"]["soap:Body"]["GetUserResponse"]["GetUserResult"]["Age"];
pm.expect(age).to.equal("25");
});
// 验证IsActive节点
pm.test("验证IsActive节点值为true", function() {
var isActive = jsonResponse["soap:Envelope"]["soap:Body"]["GetUserResponse"]["GetUserResult"]["IsActive"];
pm.expect(isActive).to.equal("true");
});
运行请求后,在Test Results区域可以看到所有断言的执行结果,绿色表示断言通过,红色表示断言失败并会提示具体错误信息。