2017-03-08 3 views
1

db에서 일부 데이터를 검색하려고하는데 응답을 기반으로 테스트 케이스를 통과하거나 실패해야합니다. db를 쿼리 할 때마다이 작업을 수행해야합니다.SOAP UI의 쿼리 DB에서받은 XML 응답에 여러 값을 지정합니다.

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> 

에서 완전히 새로운 생각으로 알아낼 수 없습니다

응답, 첫 번째 단계에서 나는 "TASK1"이 존재하고 "TASK2"와 "Value1"이 뒤 따르는 "TASK2"와 "Value1"이 같은 "Value1"이 존재한다고 주장해야합니다.

이것이 막연한 경우 알려주십시오. 내 검색어 수정을 시도 할 수 있습니다.

+0

수리야, 제공되는 솔루션을 볼 기회가 있습니까? – Rao

답변

0

) soapUI에서 테스트 단계를 요청하십시오.

스크립트를 신속하게 Demo 온라인 솔루션을 시도 할 수

//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 ${[email protected]}\n") 
} 

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

주장; 오류 메시지가 어떻게 나타나는지 보여줍니다.

위의 스크립트에는 열 이름 T2, T3이 사용됩니다. 이름이 원래 결과와 다른 경우 끝에 변경하십시오.

또한 assertion는, 의도적으로모든 비교 문제 잡으려고 을 사용하지 않는 첫 번째 문제 비교에서 중지하지 않으 있습니다.

+0

와우 !! 나는 우리가 그런 것을 할 수 있다는 것을 결코 알지 못했다. 값을 선언하고 값을 기반으로 계속 길어주는 긴 스크립트를 작성했습니다. 그것의 모양에서 나는 내 기존의 그루비 스크립트에 그것을 포함시킬 수 있다고 느낍니다. 나는 이것을 시도하고 이것이 작동 하는지를 알려줄 것이다. – Surya

+0

@Surya, 질문을 게시 한 후 확인하지 않은 것 같지 않은지. 당신이 돌아와서 해결책을 찾았 기 때문에 다행입니다. 대부분의 주장은 별도의 그루비 스크립트 (하나의 테스트 단계가 아닌) 대신 동일한 jdbc 단계에 대한 스크립트 어설 션에서 사용할 수 있습니다. – Rao

0

해보십시오 XmlSlurper : http://groovy-lang.org/processing-xml.html

확인하려면 작업 1 : 나는 당신이 당신의 자신에 의해 나머지를 할 수 있습니다 희망

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

def row1 = results.ResultSet.find { node-> 
    node.name() == 'Row' && [email protected] == '1' 
} 

assert row1.T2 == 'TASK1' 

, 당신은 JDBC에 대한 을 사용할 수 있습니다

+0

감사합니다. Anton. 나는 이것을 내 스크립트에 포함시키고 시도해 보겠습니다. – Surya

1

XPath를 사용 주장 대신
명제 1
/결과/ResultSet의 [@ fetchSize = "10"]/행 [1]/T1
예상 결과
작업 1
어설 2
/Results/ResultSet [@ fetchSize = "10"]/Row [1]/T3
기대 resu
값 1

원하는 수만큼 노드를 추가 할 수 있습니다.

빠른 팁 : XPath를 생성하려면 온라인 도구 또는 Oxygen XML 편집기를 사용하십시오. :)

+0

감사합니다. .. 이미 시도했습니다. 그러나 테스트 할 시나리오의 종류에 따라 많은 작업이 있으므로 각 작업에 대해 수행하기가 어려웠습니다. 따라서 나는 응답을 포착 할 수있는 그루비 스크립트를 포함 시켰으며 그 값을 기반으로 추가 단계를 진행합니다. – Surya