В моем тестовом примере у меня есть два шага теста, которые производят XML-ответ.Структура XML немного отличается друг от друга, но данные одинаковы и упорядочены одинаково.
Я создал шаг теста Groovy Script, который будет считывать итерации данных из обоих XML-файлов и утверждать, что они равны.Количество строк в этом XML-ответе может превышать 500 строк.
Тестовый набор повторяется более 349 раз.
Когда я запускаю тестовый пример, он отстает от скриптового утверждения для первого проходного цикла - на его выполнение уходит более 5 минут.Я пытаюсь найти способ улучшить текущий сценарий или лучше сравнить два ответа XML.
Ответ JDBC:
<Results>
<ResultSet fetchSize="128">
<Row rowNumber="1">
<id>1540107</id>
<name>10C/Ar1</name>
<code>10C/Ar1</code>
<subjectId>349176</subjectId>
</Row>
<Row rowNumber="2">
<id>1540108</id>
<name>11A/Ar1</name>
<code>11A/Ar1</code>
<subjectId>349177</subjectId>
</Row>
...
REST Response:
<Response>
<e>
<id>1540107</id>
<name>10C/Ar1</name>
<code>10C/Ar1</code>
<subjectId>349176</subjectId>
</e>
<e>
<id>1540108</id>
<name>11A/Ar1</name>
<code>11A/Ar1</code>
<subjectId>349177</subjectId>
</e>
...
Groovy Сценарий:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context);
//API Response
def HolderA = groovyUtils.getXmlHolder(context.expand('${01_Test_Step_05#ResponseAsXml}'))
def CountA = HolderA.getNodeValues("//e").size();
log.info CountA
//Database Query Response
def HolderB = groovyUtils.getXmlHolder(context.expand('${01_Test_Step_04#ResponseAsXml#//Results[1]/ResultSet[1]}'))
def CountB = HolderB.getNodeValues("//Row").size();
log.info CountB
//Asser Response Sizes
assert CountA == CountB : 'Response Counts Dont Equal'
def i = 1
while(i < (CountA + 1)) {
//API Response Elements
def id_A = context.expand( '${01_Test_Step_05#ResponseAsXml#//e[' + i + ']/id}' )
def name_A = context.expand( '${01_Test_Step_05[GET]#ResponseAsXml#//e[' + i + ']/name}' )
def code_A = context.expand( '${01_Test_Step_05[GET]#ResponseAsXml#//e[' + i + ']/code}' )
def subjectId_A = context.expand( '${01_Test_Step_05[GET]#ResponseAsXml#//e[' + i + ']/subjectId}' )
//Database Query Response Elements
def id_B = context.expand( '${01_Test_Step_04#ResponseAsXml#//Results[1]/ResultSet[1]/Row[' + i + ']/id}' )
def name_B = context.expand( '${01_Test_Step_04#ResponseAsXml#//Results[1]/ResultSet[1]/Row[' + i + ']/name}' )
def code_B = context.expand( '${01_Test_Step_04#ResponseAsXml#//Results[1]/ResultSet[1]/Row[' + i + ']/code}' )
def subjectId_B = context.expand( '${01_Test_Step_04#ResponseAsXml#//Results[1]/ResultSet[1]/Row[' + i + ']/subjectId}' )
//Assert API Response Elements & Database Query Response Elements
assert id_A == id_B : 'Mismatching IDs'
assert name_A == name_B : 'Mismatching Names'
assert code_A == code_B : 'Mismatching Codes'
assert subjectId_A == subjectId_B : 'Mismatching Subject IDs'
i++
}