【问题标题】:SoapUI - Compare XML in mock dispatch script using XMLUnit & GroovySoapUI - 使用 XMLUnit 和 Groovy 比较模拟调度脚本中的 XML
【发布时间】:2016-11-28 01:00:41
【问题描述】:

在 SoapUI 5.2.1 中,我尝试在我的 Mock Dispatch Groovy 脚本中应用断言,以比较 mock 接收到的 XML 是否与我预期的 xml 匹配。我已经看到使用 XMLUnit 来实现这一点的参考。有没有人有完整的 groovy 脚本,包括:

  1. 所需库的导入
  2. 以 XMLUnit 可以理解的格式访问 xml 负载
  3. 创建一个预期的 xml 负载,请求负载将与之进行比较
  4. 以可识别 xml 的方式比较 xml 有效负载,可能使用 XMLUnit
  5. 生成断言失败或采取其他措施

关于这个领域还有其他一些问题,但对我来说似乎都不完整。

谢谢, 马特。

【问题讨论】:

  • 嗨@MattG,您能否提供一个示例来展示您已经尝试过的内容?

标签: xml groovy soapui xmlunit


【解决方案1】:

感谢@Nick Grealy,我已经成功了。一些注意事项:

  1. 从内联 xml“expectedRequest”中省略 XML 声明,否则会出现“不允许与“[xX][mM][lL]”匹配的处理指令目标。'
  2. 您需要定义 2 条响应模拟消息:
    • 失败响应
    • 成功响应

这是 SOAP UI v 5.2.1 中的 groovy 代码,Mock Dispatch 脚本

import org.custommonkey.xmlunit.*

XMLUnit.setIgnoreWhitespace(true)
XMLUnit.setIgnoreComments(true)
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true)
XMLUnit.setNormalizeWhitespace(true)

def expectedRequest = '''
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
    <soap:Body xmlns:m="http://www.example.org/stock">
        <m:GetStockPrice>
                <m:StockName>IBM</m:StockName>
        </m:GetStockPrice>
    </soap:Body>
</soap:Envelope>
'''

def actualRequestReceived = mockRequest.requestContent

def diff  = new Diff(actualRequestReceived, expectedRequest)

diff.compare()

log.info('actualRequestReceived:' + actualRequestReceived)
log.info('expectedRequest:' + expectedRequest)
log.info('identical:' + diff.identical())
log.info('similar:' + diff.similar())

if (!diff.identical) {
    responseToUse = "FailureResponse"
} else {
    responseToUse = "SuccessResponse"
}

return responseToUse

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多