大家好。这是我第一次来这里,我很想听听你的回答。
工作环境: SoapUI 4.6.1
我有带有请求的 WSDL,并且正在进行功能测试。 在我的测试用例中,我需要来自一个请求和不同响应的值进行比较和相等。我在哪里可以做到这一点以及如何做到这一点?
我想到了请求中的"断言",但"预期结果"是字符串,我无法从另一个请求中输入数据。
因此,为了确保您做对了一切: 这是一个请求(我们需要里面的数据),它响应了一些我们不需要的数据。然后是另一个请求,然后是带有响应的请求(我们需要里面的数据)
<soapenv:Envelope .....(there xmlns and scheme links)>
<soapenv:Header/>
<soapenv:Body>
<ban:transactions>
<sessionid>xxx</sessionid>
<scheme_id>yyy</scheme_id>
<scheme_type>zzz</scheme_type>
<field_list>
<scheme_field>
<field_id>aaa1</field_id>
<type>bbb1</type>
<value>ccc1</value>
</scheme_field>
<scheme_field>
<field_id>aaa2</field_id>
<type>bbb2</type>
<value>ccc2</value>
</scheme_field>
<scheme_field>
<field_id>aaa3</field_id>
<type>bbb3</type>
<value>ccc3</value>
</scheme_field>
...
<scheme_field>
<field_id>aaaN</field_id>
<type>bbbN</type>
<value>cccN</value>
</scheme_field>
</field_list>
</ban:transactions>
</soapenv:Body>
</soapenv:Envelope>
这是来自另一个请求(!
<soapenv:Envelope .....(there xmlns and scheme links)>
<soapenv:Header/>
<soapenv:Body>
<data>
<repeat>
<next_scheme>
<sessionid>xxx</sessionid>
<scheme_id>yyy</scheme_id>
<scheme_type>zzz</scheme_type>
<field_list>
<scheme_field>
<field_id>aaa1</field_id>
<type>bbb1</type>
<value>ccc1</value>
</scheme_field>
<scheme_field>
<field_id>aaa2</field_id>
<type>bbb2</type>
<value>ccc2</value>
</scheme_field>
<scheme_field>
<field_id>aaa3</field_id>
<type>bbb3</type>
<value>ccc3</value>
</scheme_field>
...
<scheme_field>
<field_id>aaaN</field_id>
<type>bbbN</type>
<value>cccN</value>
</scheme_field>
</field_list>
</next_scheme>
</repeat>
</data>
</soapenv:Body>
</soapenv:Envelope>
我想比较所有这些值 - 从第一个请求xxx,yyy,zzz,aaaN,bbbN and cccN
到响应xxx,yyy,zzz,aaaN,bbbN and cccN
所有这些值!如果它们不相等 - 弹出断言或错误。
这是一个时髦的脚本,它提取以下每个内容并对其进行排序,然后比较数据。
- 会话标识
- scheme_id
- scheme_type
- scheme_field
时髦的脚本
//Pass the xml string for xml1 and xml2
//Does not matter which xml you pass to which variable
//Not assigned here in the below to save the space.
def xml1 =
def xml2 =
//Closure to get the element data
def getData = { data, element -> data.'**'.findAll{it.name() == element} }
//Closure to sort criteria for scheme_field
def criteria = {a, b -> a.field_id.text() <=> b.field_id.text() ?: a.type.text() <=> b.type.text() ?: a.value.text() <=> b.value.text()}
def pXml1 = new XmlSlurper().parseText(xml1)
def pXml2 = new XmlSlurper().parseText(xml2)
//Extract the data from both xml element wise and sort data
def sessions1 = getData(pXml1, 'sessionid').sort()
def sessions2 = getData(pXml2, 'sessionid').sort()
def schemeIds1 = getData(pXml1, 'scheme_id').sort()
def schemeIds2 = getData(pXml2, 'scheme_id').sort()
def schemeTypes1 = getData(pXml1, 'scheme_type').sort()
def schemeTypes2 = getData(pXml2, 'scheme_type').sort()
def schemeFields1 = getData(pXml1, 'scheme_field').sort(criteria)
println schemeFields1
def schemeFields2 = getData(pXml2, 'scheme_field').sort(criteria)
println schemeFields2
//Now do the assertion of both xml data
assert sessions1 == sessions2
assert schemeIds1 == schemeIds2
assert schemeTypes1 == schemeTypes2
assert schemeFields1 == schemeFields2
您可以快速尝试在线演示。另请注意,在此演示中scheme_field
顺序会更改,以确保它可以以任何顺序处理元素列表。