将数据从XML响应传输到SoapUI属性

时间:2018-07-16 16:42:10

标签: xml groovy soapui open-source

我对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,并且我想确保自己正确使用了该工具。

2 个答案:

答案 0 :(得分:2)

这应该可以通过属性转移测试步骤进行。之所以提出这一点,是因为我发现它对系统内存的负担比普通的脚本要少。

如果您添加了属性测试步骤,则下面的内容应该能够转移您要查找的属性。

enter image description here

请告诉我这是否有帮助

答案 1 :(得分:1)

是的,您发现它是正确的,有两种获取数据的方法。

  1. 财产转让
  2. 时髦脚本

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]

enter image description here

使用groovy更为有益,因为如果您要进行大量验证,它会使您的任务非常容易。

  • a)如果要验证令牌长度怎么办
  • b)值是字母数字,里面有5个子节点 MGRestTokenResponse因此从长期的角度和详细的 依靠Groovy进行验证是一个更好的选择