如何在Parasoft SOATest中合并SOAP字段并与REST字段断言
嘿,这个需求在接口测试里太常见了!我给你整理了几种主流工具和代码层面的实现方法,你按需选用:
合并SOAP响应的日期+时间字段并与REST字段断言的实现方法
一、用SoapUI(开源/Pro版通用)
- 第一步:提取SOAP响应中的日期和时间字段
可以用Groovy脚本直接解析XML响应,记得替换成你的实际节点路径:// 获取SOAP响应内容 def soapResponse = context.expand('${SOAP Request#Response}') def xmlSlurper = new XmlSlurper().parseText(soapResponse) // 提取Field1(日期)和Field2(时间) def field1 = xmlSlurper.Path.To.Field1.text() def field2 = xmlSlurper.Path.To.Field2.text() - 第二步:合并并格式化字段
要保证合并后的格式和REST响应的目标字段一致,比如REST用yyyy-MM-dd HH:mm:ss格式:// 直接拼接(如果SOAP的日期时间格式已经和REST一致) def field3 = "${field1} ${field2}" // 如果需要转换日期格式(比如SOAP是MM/dd/yyyy,REST是yyyy-MM-dd) def inputFormat = new SimpleDateFormat("MM/dd/yyyy") def outputFormat = new SimpleDateFormat("yyyy-MM-dd") def formattedDate = outputFormat.format(inputFormat.parse(field1)) def field3 = "${formattedDate} ${field2}" - 第三步:与REST字段做断言比对
先获取REST响应的目标字段,再用断言语句验证:// 获取REST响应内容 def restResponse = context.expand('${REST Request#Response}') def jsonSlurper = new groovy.json.JsonSlurper().parseText(restResponse) def restTargetField = jsonSlurper.targetField // 替换为你的JSON字段路径 // 执行断言 assert field3 == restTargetField : "合并字段与REST字段不匹配:${field3} vs ${restTargetField}"
二、用Postman
- 第一步:提取SOAP响应的日期和时间字段
在SOAP请求的Tests标签中解析XML:const xmlResponse = pm.response.text(); const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlResponse, "text/xml"); // 提取字段(替换为你的实际节点名) const field1 = xmlDoc.querySelector("Field1").textContent; const field2 = xmlDoc.querySelector("Field2").textContent; - 第二步:合并并格式化字段
利用Postman内置的moment.js处理格式转换:// 直接拼接(格式一致时) let field3 = `${field1} ${field2}`; // 格式转换示例:SOAP日期是MM/DD/YYYY,转成REST的YYYY-MM-DD const formattedDate = moment(field1, "MM/DD/YYYY").format("YYYY-MM-DD"); field3 = `${formattedDate} ${field2}`; - 第三步:调用REST接口并断言
用pm.sendRequest发起REST请求,然后验证匹配:pm.sendRequest({ url: "你的REST接口URL", method: "GET" }, function (err, res) { const restData = res.json(); pm.test("合并字段与REST字段匹配", function () { pm.expect(field3).to.eql(restData.targetField); }); });
三、代码层面(以Python pytest为例)
- 第一步:发送SOAP请求并提取字段
import requests from lxml import etree # 发送SOAP请求 soap_url = "你的SOAP接口URL" soap_payload = """你的SOAP请求体XML""" soap_response = requests.post(soap_url, data=soap_payload, headers={"Content-Type": "text/xml"}) xml_tree = etree.fromstring(soap_response.content) # 提取字段(注意处理命名空间,替换为你的实际命名空间和节点路径) field1 = xml_tree.xpath("//ns:Field1/text()", namespaces={"ns": "你的命名空间URL"})[0] field2 = xml_tree.xpath("//ns:Field2/text()", namespaces={"ns": "你的命名空间URL"})[0] - 第二步:合并并格式化字段
from datetime import datetime # 格式转换示例:SOAP日期是DD/MM/YYYY,转成REST的YYYY-MM-DD date_obj = datetime.strptime(field1, "%d/%m/%Y") formatted_date = date_obj.strftime("%Y-%m-%d") field3 = f"{formatted_date} {field2}" - 第三步:发送REST请求并断言
rest_url = "你的REST接口URL" rest_response = requests.get(rest_url) rest_data = rest_response.json() # 执行断言 assert field3 == rest_data["targetField"], f"字段不匹配:{field3} vs {rest_data['targetField']}"
内容的提问来源于stack exchange,提问作者user9803698
相关产品推荐
相关产品推荐

