我对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输出。经过大量的Google搜索,我唯一能提出的解决方案是后续步骤,请使用以下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,并且我想确保自己正确使用了该工具。
答案 0 :(得分:2)
答案 1 :(得分:1)
是的,您发现它是正确的,有两种获取数据的方法。
a)XmlParser / XmlSlurper
b)xmlHolder
还请注意,如果您的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更为有益,因为如果您要进行大量验证,它会使您的任务非常容易。