在 SOAP UI 中查询数据库时收到的 XML 响应中断言多个值

Assert multiple values in an XML response received on querying DB in SOAP UI

我正在尝试从数据库中检索一些数据,并且根据响应,我必须通过或不通过测试用例。每次查询 db

时我都必须这样做

我能够连接到数据库并获得响应。但是,不太确定如何断言响应中的值

尝试使用 Script Assertion 但无法理解,因为我对此完全陌生

<Results>
<ResultSet fetchSize="10">
    <Row rowNumber="1">
        <T1>TEXT1</T1>
        <T2>TASK1</T2>
        <T3>Value1</T3>
        <T4>xyz</T4>
      </Row>
       <Row rowNumber="2">
        <T1>TEXT2</T1>
        <T2>TASK2</T2>
        <T3>Value1</T3>
        <T4>ABC</T4>
      </Row>
     </ResultSet>

从上面的回复中,第一步我必须断言 "TASK1" 存在并且 "Value1" 存在于同一集合中,然后是 "TASK2" 和 "Value1"

如果这含糊不清,请告诉我,以便我可以尝试修改我的查询

试试 XmlSlurper:http://groovy-lang.org/processing-xml.html

检查任务 1:

def results = new XmlSlurper().parseText(response)

def row1 = results.ResultSet.find { node->
    node.name() == 'Row' && node.@rowNumber == '1'
}

assert row1.T2 == 'TASK1'

我希望你能自己完成剩下的事情 ;)

您可以将 Script Assertion 用于 soapUI 中的 JDBC 请求测试步骤。

脚本断言

//define your expected data as map. You may add more key value pairs if more Rows
def expectedData = ['TASK1':'Value1', 'TASK2':'Value1']

//Assert if the response is not null
assert context.response, 'Response is not null or empty'

//Parse and get rows
def rows = new XmlSlurper().parseText(context.esponse).ResultSet.Row

def getRowData = { data, elementName, elementValue ->
    data.'**'.findAll { it.name() == elementName && it == elementValue }*.parent()
}

def assertionErrors = new StringBuffer()

//Loop thur expectedData and capture the errors
expectedData.each { key, value->
    def matchingRow = getRowData(rows, 'T2', key)[0]
    value == matchingRow.T3.text() ?: assertionErrors.append("Assertion failed for rowNumber ${matchingRow.@rowNumber}\n")
}

//Check and show the result
if (assertionErrors) {
    throw new Error(assertionErrors.toString())
} else {
    log.info 'Assertions passed'
}

您可以快速在线尝试解决方案Demo;它显示了失败错误消息的样子。

请注意,上面的脚本中使用了列名 T2T3。如果名称与原始结果不同,请在最后进行更改。

还要注意assertion不是故意来捕捉所有的比较问题,不想停在首先比较问题。

改为使用 Xpath 断言
断言 1
/Results/ResultSet[@fetchSize="10"]/行[1]/T1
预期结果
任务 1
断言 2
/Results/ResultSet[@fetchSize="10"]/行[1]/T3
预期结果
值 1

您可以为任意数量的节点添加任意数量的 Xpath 断言。

快速提示: 要生成 XPath,请使用在线工具或 Oxygen XML 编辑器。 :)