在 SOAP UI 中拦截 SOAP 响应

Intercept SOAP response in SOAP UI

一个网络服务 returns

<SOAP: Envelope>
<SOAP: Header>
    <SOAP: Body>
        <RootElement>
        <![CDATA[Base64 encoded string]]>
        </RootElement>
    </SOAP : Body>
</SOAP: Header>

Base64编码的字符串实际上是EXI编码的XML。我知道如何解码 base 64,然后将 EXI 转换为 XML。让我们称之为 MyEXIEncoder.class (Java class)

但是,我们目前有很多基于 XML 响应的 SOAP UI 测试用例。

目前唯一的方法似乎是添加一个可以调用我的 java class class 的 groovy 脚本,但这是一个额外的测试步骤,这意味着,我必须编写一些脚本来更新我的 SOAP UI 测试用例。此外,我不确定我的断言将如何工作以及我的测试用例会有多少变化(我有数百个测试用例)

我需要一种方法

拦截来自我的测试步骤的 SOAP 响应,使用我的自定义 class 进行解码,return 响应返回 SOAP UI 以便现有断言可以工作。

如有任何帮助,我们将不胜感激!

提前致谢。

如图所示添加监听监听器here

例如

Event Handler:
//MonitorListener.afterProxy

// get the raw response as a string
def str = new String( messageExchange.getResponseContent()  )

// Decode
 </ConversionRateResult", "Result>1.0</ConversionRateResult");

// save the response back
messageExchange.rawResponseBody = str 

Edit : Based on the comment of OP, updating with the link to use context.

根据 Tip and tricks of SOAPUI 第 6 点。使用 RequestFilter.afterRequest 可以设置响应。

// write it back 
context.httpResponse.responseContent = content

MonitorListener.afterProxy 不给出上下文对象。

RequestFilter.afterRequest + 使用 context 结果证明是更好的解决方案。