Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SoapUI中使用groovy数组动态比较Rest XML/JSON响应和JDBC_Json_Xml_Rest_Groovy_Soapui - Fatal编程技术网

在SoapUI中使用groovy数组动态比较Rest XML/JSON响应和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>

在SoapUI中,我有一个返回以下数据的JDBC测试步骤:

<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的情况下完成所有这些

  • 进行REST调用以检索所有数据
  • 启动一个解析XML的程序
  • 进行JDBC调用,选择要验证的行的正确ID。在这里做所有的断言
  • 循环回到#2

  • 如果您有SOAPUIPro,您应该能够在没有Groovy的情况下完成所有这一切

  • 进行REST调用以检索所有数据
  • 启动一个解析XML的程序
  • 进行JDBC调用,选择要验证的行的正确ID。在这里做所有的断言
  • 循环回到#2

  • 您可以使用以下测试步骤设计测试用例:

  • jdbc步骤
  • json步骤
  • groovy脚本步骤
  • groovy脚本步骤中的idea/sudo代码是

    • 获取jdbc步骤的响应
    • 获取json步骤的响应
    • 以对象的形式构建数据,以便比较
    • 将对象存储在列表中,一个用于jdbc,另一个用于json
    • 对两个列表进行排序,以确保比较相同的数据
    • 比较两个列表是否相同
    下面是groovy脚本:

    /**
    *用于比较的模型对象
    */
    @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