在SoapUI中使用groovy数组动态比较Rest XML/JSON响应和JDBC
在SoapUI中,我有一个返回以下数据的JDBC测试步骤:在SoapUI中使用groovy数组动态比较Rest XML/JSON响应和JDBC,json,xml,rest,groovy,soapui,Json,Xml,Rest,Groovy,Soapui,在SoapUI中,我有一个返回以下数据的JDBC测试步骤: <Results> <ResultSet fetchSize="128"> <Row rowNumber="1"> <ID>1</ID> <NAME>TestName1</NAME> <DESCRIPTION/> <TYPE>Bool</TYPE>
<Results>
<ResultSet fetchSize="128">
<Row rowNumber="1">
<ID>1</ID>
<NAME>TestName1</NAME>
<DESCRIPTION/>
<TYPE>Bool</TYPE>
<ISPRODUCTTAG>true</ISPRODUCTTAG>
<ISLOCATIONTAG>false</ISLOCATIONTAG>
<SUBSECTION>Default Sub Section</SUBSECTION>
<SECTION>Default Section</SECTION>
<SUBGROUP>Default Sub Group</SUBGROUP>
<GROUP>Default Group</GROUP>
</Row>
<Row rowNumber="2">
<ID>2</ID>
<NAME>TestName2</NAME>
<DESCRIPTION/>
<TYPE>Bool</TYPE>
<ISPRODUCTTAG>true</ISPRODUCTTAG>
<ISLOCATIONTAG>false</ISLOCATIONTAG>
<SUBSECTION>Default Sub Section</SUBSECTION>
<SECTION>Default Section</SECTION>
<SUBGROUP>Default Sub Group</SUBGROUP>
<GROUP>Default Group</GROUP>
</Row>
</Row>
</ResultSet>
<ArrayOfTagInfo>
<TagInfo id="1" name="TestName1" type="Bool" isProductTag="true" isLocationTag="false" subsection="Default Sub Section" section="Default Section" subgroup="Default Sub Group" group="Default Group"/>
<TagInfo id="2" name="TestName2" type="Bool" isProductTag="true" isLocationTag="false" subsection="Default Sub Section" section="Default Section" subgroup="Default Sub Group" group="Default Group"/>
</ArrayOfTagInfo>
1.
测试名称1
布尔
真的
假的
默认小节
默认部分
默认子组
默认组
2.
测试名称2
布尔
真的
假的
默认小节
默认部分
默认子组
默认组
我有一个REST API XML响应,其中包含以下数据:
<Results>
<ResultSet fetchSize="128">
<Row rowNumber="1">
<ID>1</ID>
<NAME>TestName1</NAME>
<DESCRIPTION/>
<TYPE>Bool</TYPE>
<ISPRODUCTTAG>true</ISPRODUCTTAG>
<ISLOCATIONTAG>false</ISLOCATIONTAG>
<SUBSECTION>Default Sub Section</SUBSECTION>
<SECTION>Default Section</SECTION>
<SUBGROUP>Default Sub Group</SUBGROUP>
<GROUP>Default Group</GROUP>
</Row>
<Row rowNumber="2">
<ID>2</ID>
<NAME>TestName2</NAME>
<DESCRIPTION/>
<TYPE>Bool</TYPE>
<ISPRODUCTTAG>true</ISPRODUCTTAG>
<ISLOCATIONTAG>false</ISLOCATIONTAG>
<SUBSECTION>Default Sub Section</SUBSECTION>
<SECTION>Default Section</SECTION>
<SUBGROUP>Default Sub Group</SUBGROUP>
<GROUP>Default Group</GROUP>
</Row>
</Row>
</ResultSet>
<ArrayOfTagInfo>
<TagInfo id="1" name="TestName1" type="Bool" isProductTag="true" isLocationTag="false" subsection="Default Sub Section" section="Default Section" subgroup="Default Sub Group" group="Default Group"/>
<TagInfo id="2" name="TestName2" type="Bool" isProductTag="true" isLocationTag="false" subsection="Default Sub Section" section="Default Section" subgroup="Default Sub Group" group="Default Group"/>
</ArrayOfTagInfo>
如果可能的话,我希望能够使用groovy数组比较(断言)数据库值和响应值(响应可以是XML或JSON,具体取决于请求接受头),因为从数据库返回的数据可能非常大
有人能帮忙吗?如果您有SoapUI Pro,您应该能够在没有Groovy的情况下完成所有这些
如果您有SOAPUIPro,您应该能够在没有Groovy的情况下完成所有这一切
您可以使用以下测试步骤设计测试用例:
- 获取jdbc步骤的响应
- 获取json步骤的响应
- 以对象的形式构建数据,以便比较
- 将对象存储在列表中,一个用于jdbc,另一个用于json
- 对两个列表进行排序,以确保比较相同的数据
- 比较两个列表是否相同
/**
*用于比较的模型对象
*/
@groovy.transform.Canonical
类模型{
定义id
定义名称
def类型
def isProductTag
def isLocationTag
def小节
def部分
def子群
def组
/**
*这将接受jdbc行
*@param行
*@返回
*/
def buildJdbcData(行){
吵架{
id=id
name=name
类型=类型
isProductTag=isProductTag
isLocationTag=isLocationTag
分段=分段
截面=截面
子群=子群
组=组
}
}
/**
*这将接受json标记信息
*@param tagInfo
*@返回
*/
def buildJsonData(标记信息){
id=tagInfo@id
name=tagInfo@name
type=tagInfo@type
isProductTag=tagInfo@isProductTag
isLocationTag=tagInfo@isLocationTag
subSection=tagInfo.@subSection
section=tagInfo@section
subGroup=tagInfo。@subGroup
group=tagInfo@group
}
}
/**
*从接收到的响应创建jdbcResponse,使用固定值进行测试
*如果需要,可以直接使用“下”而不是“当前”分配收到的响应,并确保正确替换步骤名称
*def jdbcsresponse=context.expand(“${JdbcStepName#Response}”)
*/
def jdbcResponse=''
1.
测试名称1
布尔
真的
假的
默认小节
默认部分
默认子组
默认组
2.
测试名称2
布尔
真的
假的
默认小节
默认部分
默认子组
默认组
3.
测试名称3
布尔
假的
假的
默认第3分节
默认第3节
默认子组3
默认组3
'''
/**
*使用固定的测试值从接收到的响应创建jsonResponse
*如果需要,可以直接使用“下”而不是“当前”分配收到的响应,并确保正确替换步骤名称
*def jsonResponse=context.expand(“${JsonStepName#Response}”)
*/
def重新响应=“”
'''
//解析jdbc并构建jdbc模型对象列表
def results=new XmlSlurper().parseText(jdbcResponse)
def jdbcDataObjects=[]
results.ResultSet.Row.each{Row->
添加(新模型().buildJdbcData(行))
}
//解析json并构建json模型对象列表
def arrayOfTagInfo=new XmlSlurper().parseText(restResponse)
def jsonDataObjects=[]
arrayOfTagInfo.TagInfo.each{TagInfo->
添加(新模型().buildJsonData(标记信息))
}
//在检查是否相等之前对数据进行排序
jdbcDataObjects.sort()
jsonDataObjects.sort()
if(jdbcDataObjects.size()!=jsonDataObjects.size()){
System.err.println(“Jdbc结果集大小为:${jdbcDataObjects.size()},Json结果大小为:${jsonDataObjects.size()}”)
}
断言jdbcDataObjects==jsonDataObjects,“比较Jdbc和Json数据失败”
在上面,第3行不匹配,因此assert将抛出以下错误:
捕获:java.lang.AssertionError:比较失败。表达式:(jdbcDataObjects==jsonDataObjects)。值:jdbcDataObjects=[默认组3,默认组,默认组],jsonDataObjects=[默认组,默认组,默认组]
java.lang.AssertionError:比较失败。表达式:(jdbcDataObjects==jsonDataObjects)。值:jdbcDataObjects=[默认组3,默认组,默认组],jsonDataObjects=[默认组,默认组,默认组]
在So31472381处运行(So31472381.gro