将数据从 XML 响应传输到 SoapUI 属性
Transfer data from XML response to SoapUI property
我对 SoapUI(开源版本)和 REST 还很陌生。我们有一个 ERP 系统,它通过 Web 服务使用 REST 来允许第三方应用程序与其通信。我正在使用 SoapUI 来测试这些调用是如何工作的。我使用用户名和密码为我的会话获取令牌。我在 SoapUI 中使用 属性 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>
当我使用 属性 传输获取令牌时,我能得到的最好的是存储整个 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 响应中提取数据的 correct/preferred 方法吗?我是否应该对 "Target" 设置下方的文本字段进行任何操作?我假设这个过程与 JSON 类似(将我们的 Slurper 换成 Json)。
我需要进行大量测试才能使用 SoapUI,并且我想确保我正确使用了该工具。
这应该可以通过 属性 传输测试步骤实现。我提出这个问题的原因是我发现它对系统内存的负担比 groovy 脚本少。
如果您添加了属性测试步骤,下面的内容应该能够传输您正在寻找的 属性。
如果有帮助请告诉我
是的,你没看错,有两种获取数据的方法。
- 属性 转移
- Groovy 脚本
a) XmlParser/XmlSlurper
b) xml持有人
另请注意,如果您的 xml 有 命名空间 ,那么只有 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 的验证是更好的选择
我对 SoapUI(开源版本)和 REST 还很陌生。我们有一个 ERP 系统,它通过 Web 服务使用 REST 来允许第三方应用程序与其通信。我正在使用 SoapUI 来测试这些调用是如何工作的。我使用用户名和密码为我的会话获取令牌。我在 SoapUI 中使用 属性 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>
当我使用 属性 传输获取令牌时,我能得到的最好的是存储整个 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 响应中提取数据的 correct/preferred 方法吗?我是否应该对 "Target" 设置下方的文本字段进行任何操作?我假设这个过程与 JSON 类似(将我们的 Slurper 换成 Json)。
我需要进行大量测试才能使用 SoapUI,并且我想确保我正确使用了该工具。
这应该可以通过 属性 传输测试步骤实现。我提出这个问题的原因是我发现它对系统内存的负担比 groovy 脚本少。
如果您添加了属性测试步骤,下面的内容应该能够传输您正在寻找的 属性。
如果有帮助请告诉我
是的,你没看错,有两种获取数据的方法。
- 属性 转移
- Groovy 脚本
a) XmlParser/XmlSlurper
b) xml持有人
另请注意,如果您的 xml 有 命名空间 ,那么只有 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 的验证是更好的选择