soapUI - practiQA

Transkrypt

soapUI - practiQA
soapUI
Przedstawione informacje pochodzą ze źródeł wymienionych w
ostatniej części dokumentu oraz własnych doświadczeń.
Wstęp
SoapUI to zyskujące sobie coraz większą popularność narzędzie
wspomagające testy funkcjonalne, obciążeniowe oraz
bezpieczeństwa. Zwolenników zyskuje przede wszystkim ze
względu na łatwość obsługi i dużą funkcjonalność. Jego
możliwości wykraczają poza protokół SOAP i pozwalają testować
aplikację wykorzystujące technologie REST, JMS, AMF oraz JDBC.
Korzystając z języka Groovy możliwa jest też rozbudowa jego
możliwości.
Struktura obiektów soapUI
Właściwości (ang. properties)
Właściwość (ang. property) to tekst dostępny poprzez odpowiedni
identyfikator. Właściwości i opowiadające im identyfikatory
wydoczne są w panelu 'Properties'. Wszystkie elementy projektu
soapUI posiadają domyślny zestaw właściwości, które kontrolują
ich zachowanie. Użytkownik ma również możliwość dodawania
własnych właściwości. Istnieje kilka sposobów odczytywania i
zapisywania wartości właściwości.
Dostęp do właściwości z treści zapytań i asercji
W teściach wysyłanych zapytań oraz asercjach możliwe jest
odwołanie się do właściwości poprzez zapis:
${[zakres]nazwaWłaściwości[#wyrażenie-xpath]}
Struktua obiektów soapUI to struktura drzewiasta, w której każdy
z obiektów posiada referencję do obiektu nadrzędnego oraz
obiektów podrzędnych. Odpowiada to strukturze i hierarchii
elementów z jakich zbudowany jest projekt. Posiadając referencję
do dowolnego elementu w tej struktórze, dzięki poniższym
funkcjom, możliwy jest dostęp do dowolnego innego obiektu w
drzewie projektu.
Project
getTestSuiteByName(name)
getTestSuiteCount()
getTestSuiteAt(index)
Test Suite
getProject()
getTestCaseByName(name)
getTestCaseCount()
getTestCaseAt(index)
TestCase
getTestSuite()
getTestStepByName(name)
getTestStepCount()
getTestStepAt(index)
TestStep
getTestCase()
MockService
getProject()
Do pobrania referencji do początkowego obiektu w skryptach
Groovy należy wykorzystać obiekt testRunner. W zależności od
tego na jakim poziomie wykonywany jest skrypt inny element
początkowy będzie dostępny. Poniżej znajduje się fragment kodu
jaki można wykorzystać w kroku GroovyScript.
Przykłady:
def testCase
def testSuite
def project
def testStep
= testRunner.testCase
= testCase.getTestSuite()
= testSuite.getProject()
= testCase.getTestStepByName("SendReq")
Dostępne są następujące zakresy
Zakres
#Project#
#TestSuite#
#TestCase#
#MockService#
#Global#
TestStep_name#
odwołanie do właściwości projektu
odwołanie do właściwości aktualnego TestSuite
odwołanie do właściwości aktualnego TestCase
odwołanie do właściwości MockService
odwołanie do właściwości globalnych
odwołanie do właściwości aktualnego TestStep
Przykłady:
${#Project#hostName}
${#TestCase#temperature}
${Search Request#Response#//ns1:Item[1]/n1:Author[1]/text()}
Dynamiczne zmienne
soapUI daje użytkownikowi możliwość dynamicznego
generowania wartości właściwości. Jest to przydatne by np.
dokonać obliczeć wygenerować losowy identyfikator lub
wykorzystać aktualną datę. Umożliwia to zapis:
${=<wyrażenie groovy>}
Przykłady:
${=214 + ${#TestCase#temperature}
${=Math.random() * 1000}
${=String.format('%tH%<tM%<td%<tm%<ty', new Date())}
Odczyt z wykorzystaniem obiektu context
Rozwinięcie nazwy i odczytanie właściwości w skrypcie możliwe
jest poprzez prosty zapis:
def url = context.expand( '${#Project#url}' )
www.practiqa.pl ver 1.0.0
Pobieranie i zapis poprzez obiekt testRunner
Odczytywanie i zapis wartości właściwości w skryptach Groovy
możliwe jest poprzez metody:
getPropertyValue(String propertyName)
setPropertyValue(String propertyName, String propertyValue)
Przykład:
def testCaseProp
= tc.getPropertyValue( "MyProp" )
tc.setPropertyValue( "MyProp", “MyVal” )
Pobieranie i zapis poprzez obiekt
messageExchange
W kroku Script Assertion dostęp do właściwości możliwy jest
poprzez zapis:
def tc = messageExchange.modelItem.testStep.testCase
def testCaseProp
= tc.getPropertyValue( "MyProp" )
Konwersja tekstu na typy numeryczne
Ponieważ właściwości są zapisywane jako teksty, by dokonać na
nich obliczeń, konieczna jest konwersja na jeden z typów
numerycznych. Konwersja jest wymagana również podczas
zapisu danych numerycznych do właściwości.
Przykład:
Logowanie w przypadku niepowodzenia testu
for ( testCaseResult in runner.results ){
testCaseName = testCaseResult.getTestCase().name
log.info testCaseName
if ( testCaseResult.getStatus().toString() == 'FAILED' ){
log.info "$testCaseName has failed"
for ( testStepResult in testCaseResult.getResults() )
{
testStepResult.messages.each() { msg -> log.info msg }
}
}
}
Przetwarzanie treści XML
def groovyUtils =
new com.eviware.soapui.support.GroovyUtils( context )
def holder = groovyUtils.getXmlHolder( "Request 1#Response" )
holder.namespaces["ns"] = "http://acme.com/mynamspace"
for( item in holder.getNodeValues( "//ns:item" ))
log.info "Item : [$item]"
XPath & Xquery
XPath umożliwia pobieranie i dokonywanie operacji na
wartościach tagów XML
Pobranie tag'a w oparciu o ścieżkę bezwzględną
/catalog/product[1]/name
Pobranie tag'a w oparciu o kolekcję elementów
//product[@dept="WMN"]/name
def testCaseProp
def tempInteger
def tempDecimal
= tc.getPropertyValue( "Temp" )
= testCaseProp as Integer
= testCaseProp as BigDecimal
def updatedTemp
= temperature + 214.5
Wykorzystanie XPath do obliczeń
count(/catalog/product)
/catalog/product[1]/number + /catalog/product[2]/number
def testCaseProp
= tc.getPropertyValue( "Temp",
updatedTemp as String)
Manipulacja tekstami
//product[4]/substring(name, 1, 10)
Przydatne fragmenty skryptów
Katalog domowy projektu
def projectdir = context.expand('${projectDir}');
Sprawdzenie czy projekt wykonywany jest z linii poleceń
if( com.eviware.soapui.SoapUI.isCommandLine() ){
log.info "This code is executed by Command Line soapUI"
}
Sprawdzenie czy test wykonywany jest jako Load Test
if( context.LoadTestContext != null ) {
log.info "This code is executed from a LoadTest"
}
Zmienne dostępne w skryptach Load Test
context.ThreadIndex - numer wątka
context.RunCount
- numer iteracji
www.practiqa.pl XQuery umożliwia oeracje na kolekcjach tagów XML.
Filtrowanie i sortowanie tagów xml
<result>{
for $prod in /catalog/product
where $prod/@dept = "ACC"
order by $prod/name
return $prod/name
}</result>
Przetwarzanie tagów xml
<ul>{
for $prod in /catalog/product
return <li class="{$prod/@dept}">{data($prod/name)}</li>
}</ul>
Referencje
http://soapui.org
ver 1.0.0

Podobne dokumenty