如何在SoapSonar 7/SoapUI 5.4中为PEPi 5 SOAP请求附加SignOn令牌?
嘿,我刚好有过用这两款工具处理SOAP令牌认证的经验,针对你用PEPi v5的场景,给你整理了详细的步骤,分工具来说明:
在SoapUI 5.4中处理PEPi SignOn令牌
- 第一步:先拿到SignOn令牌
- 把PEPi的WSDL导入SoapUI后,打开
SignOn请求,填好有效凭证发送,确保能拿到带令牌的响应。 - 先确认响应里令牌的位置,比如是
<SignOnToken>xxx</SignOnToken>这种XML节点。
- 把PEPi的WSDL导入SoapUI后,打开
- 第二步:把令牌存成全局变量
- 右键点击你的项目,选
Properties,新增一个属性,比如叫PEPiSignOnToken,先空着就行。 - 回到
SignOn请求,切换到底部的Script标签,写一段Groovy脚本自动提取令牌并赋值给刚才的全局属性:def response = context.expand('${SignOn Request#Response}') def xml = new XmlSlurper().parseText(response) def token = xml.SignOnToken.text() testRunner.testCase.testSuite.project.setPropertyValue("PEPiSignOnToken", token)
- 右键点击你的项目,选
- 第三步:让后续请求自动带令牌
- 打开需要调用的其他请求,找到接口要求放令牌的位置——可能是SOAP Header、HTTP Header或者请求体里的参数。
- 用
${#Project#PEPiSignOnToken}这个占位符替换对应位置就行,比如SOAP Header里可以这么写:<soapenv:Header> <auth:Token>${#Project#PEPiSignOnToken}</auth:Token> </soapenv:Header> - 如果是HTTP Header的话,直接在请求的
Request Properties里加对应Header,值填这个占位符就行。
在SoapSonar 7中处理PEPi SignOn令牌
- 第一步:提取并存储令牌
- 导入PEPi的WSDL后,创建
SignOn测试用例,填好凭证运行请求,确保响应正常返回令牌。 - 右键点
SignOn请求的响应,选Extract Value,设置提取规则:比如选XML节点路径//SignOnToken,然后把提取的值存到全局变量里,比如命名为PEPiToken。
- 导入PEPi的WSDL后,创建
- 第二步:配置后续请求携带令牌
- 打开后续的测试请求,找到要放令牌的位置。
- 直接用
${PEPiToken}占位符替换对应字段,比如SOAP Header示例:<soap:Header> <ns:AuthToken>${PEPiToken}</ns:AuthToken> </soap:Header> - 如果要求放HTTP Header里,就在请求的
HTTP Headers设置里加自定义Header,比如Authorization: Bearer ${PEPiToken}(具体格式得看PEPi接口要求)。
- 小提醒:调整执行顺序
一定要确保SignOn请求在所有需要令牌的请求之前跑,SoapSonar默认按顺序执行,但你也可以在测试套件里给后续请求加Depends On属性,指定依赖SignOn请求,避免令牌还没拿到就跑其他请求。
通用注意事项
- 先搞清楚PEPi接口要求的令牌传递方式:是SOAP Header、HTTP Header还是请求体参数?可以查官方文档,或者抓官方客户端的请求看看格式。
- 如果令牌有过期时间,两款工具都能设置自动刷新:SoapUI可以用Groovy脚本判断令牌是否过期,过期就重新调用SignOn;SoapSonar可以用
Conditional Execution来触发重新获取。 - 建议先手动把令牌填到后续请求里,确认能正常调用后再配置自动提取,这样排查问题更方便。
内容的提问来源于stack exchange,提问作者Gus D
相关产品推荐
相关产品推荐

