我正在尝试从db检索一些数据,并根据响应,我必须通过或未通过测试用例。每次查询db
时我都要这样做我能够建立与db的连接并获得响应。但是,不太确定如何从响应中断言值
尝试使用脚本断言,但无法弄明白,因为我是全新的
<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>
从上面的回答来看,在第一步我将要断言&#34; TASK1&#34;存在和&#34; Value1&#34;存在于同一组中,然后是&#34; TASK2&#34;和&#34; Value1&#34;
如果这是模糊的,请告诉我,以便我可以尝试修改我的查询
答案 0 :(得分:1)
使用Xpath断言
断言1
/结果/结果集[@ FETCHSIZE = “10”] /列[1] / T1
预期结果
任务1
断言2
/结果/结果集[@ FETCHSIZE = “10”] /列[1] / T3
预期结果
值1
您可以根据需要为任意数量的节点添加任意数量的Xpath断言。
快速提示:要生成XPath,请使用在线工具或Oxygen XML Editor。 :)
答案 1 :(得分:0)
尝试XmlSlurper:http://groovy-lang.org/processing-xml.html
检查TASK1:
def results = new XmlSlurper().parseText(response)
def row1 = results.ResultSet.find { node->
node.name() == 'Row' && node.@rowNumber == '1'
}
assert row1.T2 == 'TASK1'
我希望你能够自己做其余的事情;)
答案 2 :(得分:0)
您可以将Script Assertion用于soapUI中的JDBC Request测试步骤。
脚本断言
//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 ;它显示了失败错误消息的样子。
请注意,上面的脚本中使用了列名T2
,T3
。如果原始结果中的名称不同,只需在最后进行更改。
另请注意,assertion
未使用故意 来捕获所有比较问题,不想在第一次比较问题时停止。