【问题标题】:Transfer data from XML response to SoapUI property将数据从 XML 响应传输到 SoapUI 属性
【发布时间】:2018-07-16 16:42:09
【问题描述】:

我对 SoapUI(开源版本)和 REST 非常陌生。我们有一个 ERP 系统,它通过 Web 服务使用 REST,以允许第三方应用程序与其通信。我正在使用 SoapUI 来测试这些调用是如何工作的。我使用用户名和密码为我的会话获取令牌。我在 SoapUI 中使用了 Property Transfer 来设置用户名和密码。结果是 XML:

<MGRestTokenResponse xmlns="http://schemas.datacontract.org/2004/07/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
   <Message>success</Message>
   <Token>--I WANT THIS DATA--</Token>
</MGRestTokenResponse>

当我使用 Property Transfer 来获取令牌时,我能得到的最好的结果就是存储整个 XML 输出。经过大量谷歌搜索,我能想出的唯一解决方案是在后续步骤中,使用以下 Groovy 代码:

def content = context.expand('${Set Test Properties#sectoken}')
def xml = new XmlSlurper().parseText(content)
def token = xml.getAt("Token")
testRunner.testCase.getTestStepByName("Set Test Properties").setPropertyValue("sectoken",token.toString())

这是从 SoapUI 中的 XML 响应中提取数据的正确/首选方法吗?我应该对“目标”设置下方的文本字段做些什么吗?我假设这个过程与 JSON 类似(将 Slurper 换成 Json)。

我需要使用来自 SoapUI 的大量测试,并且我想确保我正确使用了该工具。

【问题讨论】:

    标签: xml groovy soapui open-source


    【解决方案1】:

    这应该可以通过属性转移测试步骤来实现。我提出这个问题的原因是我发现它对系统内存的负担比 groovy 脚本少。

    如果您添加了属性测试步骤,下面应该能够转移您正在寻找的属性。

    如果有帮助请告诉我

    【讨论】:

    • 我刚刚尝试过,但它不起作用。我的“令牌”属性仍然为空,因此以下测试失败。我已经尝试过 Response 和 ResponeAsXml 但似乎都没有使用您概述的步骤存储令牌。如果这有什么不同,我正在使用 SoapUI 5.4.0 开源。我同意你的观点,在 Property Transfer 步骤中执行此操作要干净得多,这正是我想要的,而不是有一个步骤来存储整个输出,然后使用 Groovy 解析文本以仅存储令牌。
    【解决方案2】:

    是的,你没看错,有两种获取数据的方式。

    1. 财产转让
    2. Groovy 脚本

    a) XmlParser/XmlSlurper
    b) xmlHolder

    另外请注意,如果您的 xml 有 namespaces,那么只有 xmlHolder 可以帮助您。

    i.e. <f:table>
    <f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
    <f:table>
    

    即//*:length 仍然有效,但是如果你使用 xml.getAt(length) 这可能不起作用

    def groovyUtils= new com.eviware.soapui.support.GroovyUtils(context) def xml=groovyUtils.getXmlHolder('YourRestRequestName#Request') def token=xml.getNodeValue("//*:Token") log.info token

    通过属性转移步骤获取值的正确语法是

     declare namespace ns1='http://schemas.datacontract.org/2004/07/'; 
     //ns1:MGRestTokenResponse[1]/ns1:Token[1]
    

    使用 groovy 更有益,因为如果您需要如此多的验证,它会使您的任务变得非常容易。

    • a) 如果要验证令牌的长度怎么办
    • b) 值是字母数字,里面有 5 个子节点 MGRESTTokenResponse 所以从长远的角度来看,详细 依靠 Groovy 进行验证是更好的选择

    【讨论】:

    • 我刚刚测试了你的答案,我不得不改变一件事。我将属性设置为响应而不是请求,并且效果很好。您的回答也让我对导航 XML 有了更好的理解。我刚刚购买了一门关于 SoapUI 的课程,以便在这方面做得更好,但效果很好。谢谢!
    猜你喜欢
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多