Утвърждения в SoapUI: Урок за скриптове, XQuery, типове XPath
Какво е твърдение?
Твърдението означава акт на потвърждаване или заявяване на нещо. Може също да се тълкува като контролна точка или точка за валидиране.
След като заявка бъде изпратена до уеб сървър, се получава отговор. Трябва да проверим дали отговорът съдържа данните, които очакваме. За да потвърдим отговора, трябва да използваме твърдения.
Видове твърдения
Има различни начини за отстояване на отговор; ние обаче ще се съсредоточим върху често използваните типове твърдения на SoapUI, докато валидираме отговор. По-долу са тези, които са налични във версията с отворен код на SoapUI.
- Съдържание на собствеността
- Стандарт за състояние на съответствие
- Сценарий
- SLA
- JMS
- Охрана
Освен изброените по-горе, PRO версията има и вграден JDBC Assertion, чрез който можем да потвърдим дали уеб услугата е актуализирала правилно базата данни.
СЪДЪРЖА ТВЪРДЕНИЕ
Търси съществуването на посочения низ. Той също така поддържа регулярен израз.
Ще продължим със същия пример от предишния урок с WSDL заявка като http://www.dneonline.com/calculator.asmx.
Стъпка 1: По подразбиране няма твърдения.
- Броят на твърденията се показва в раздела Твърдения.
- За да добавите ново твърдение, щракнете върху бутона „Добавяне на ново твърдение“.
Стъпка 2: Сега,
- Изберете категорията на твърдението.
- Изберете Тип твърдение.
- Щракнете върху "Добавяне"
Стъпка 3: Нека проверим дали низът „46“ съществува в отговора. Щракнете върху „OK“
Забележка: Можем също да игнорираме малки и големи букви и да добавим регулярен израз.
Стъпка 4: При добавянето му незабавно се изпълнява assertion и се показва дали е ВАЛИДЕН или НЕВАЛИДЕН.
Стъпка 5: Нека сега да кажем, че променяме съдържанието на „Contains Assertion in SoapUI“ на „47“ и да видим какво ще се случи.
Стъпка 6: Твърдението се изпълнява и резултатът се хвърля на потребителя. Тъй като нямаме низа „47“ в отговора, твърдението е неуспешно.
НЕ СЪДЪРЖА ТВЪРДЕНИЕ
Търси несъществуването на посочения низ. Той също така поддържа регулярен израз.
Стъпка 1: След като щракнете върху бутона „добавяне на нови твърдения“,
- Изберете категорията на твърдението.
- Изберете типа твърдение – в този случай „НЕ съдържа“
- Щракнете върху "Добавяне"
Стъпка 2: Нека проверим дали низът 'intA' съществува в отговора. Въведете низа „FromCurrency“ и щракнете върху „OK“
Стъпка 3: Веднага щом бъде добавено твърдение, то се изпълнява и показва резултата. Досега сме добавили две твърдения, следователно и двете твърдения се изпълняват и показват резултата.
Стъпка 4: Сега нека променим съдържанието на 'Not Contains Assertion' и да видим какво ще се случи. Ще проверим за несъществуването на низа „AddResult“.
Стъпка 5: Низът „AddResult“ действително присъства в отговора, следователно твърдението „НЕ съдържа“ ще се провали, както е показано по-долу.
УТВЪРЖДЕНИЕ ЗА СЪОТВЕТСТВИЕ НА XPATH
Можете да използвате XPath израз, за да изберете целевия възел и неговите стойности. XPath е език за XML заявки за избор на възли от XML документ.
Стъпка 1: След като щракнете върху бутона „Добавяне на нови твърдения“,
- Изберете категорията на твърдението.
- Изберете типа твърдение – в този случай „XPath Match“
- Щракнете върху "Добавяне"
Стъпка 2: Отваря се прозорец за добавяне на XPath.
Преди да добавим SoapUI XPath, трябва да декларираме NameSpace. XML пространството от имена е колекция от имена, идентифицирани чрез препратка към Uniform Resource Identifier (URI), които се използват в XML документи като имена на елементи и атрибути. Същото се използва в SOAP UI XPath Assertion.
За да декларираме пространство от имена на XML, просто трябва да щракнем върху бутона „Деклариране“, което ще свърши работата вместо нас, в противен случай можем също ръчно да декларираме пространство от имена сами.
След като декларираме пространството от имена, трябва да препратим XPath, използвайки създаденото пространство от имена.
При щракване върху бутона „Деклариране“ ще изскочат две пространства от имена, тъй като имаме два URI. Единият от тях е URL адресът на схемата, а другият съответства на действителния URL адрес на уеб услугата. Трябва да използваме действителното пространство от имена, където се намира уеб услугата, а НЕ пространството от имена на схемата, докато препращаме към XPath.
декларирайте namespace soap='http://schemas.xmlsoap.org/soap/envelope/';
декларирайте пространство от имена ns1='http://tempuri.org/';
Стъпка 3: Сега трябва да въведем XPath на XML възела, който трябва да валидираме.
//ns1:AddResult Дава ни стойността на възела, затворен между и и ns1 съответства на декларираното пространство от имена, което сочи към „http://tempuri.org/“
След като въведем XML, трябва да щракнем върху „Избор от текущия“, така че стойността от текущия отговор да бъде взета за сравнение в бъдеще.
Стъпка 4: Досега,
- След като декларираме пространствата от имена, въведохме XPath на XML възел, който трябва да валидираме.
- Трябва да щракнете върху „Избор от текуща“, за да направим текущата стойност като очаквана стойност.
- Текущата стойност се показва на потребителя, която можем да променим, ако е необходимо.
- Щракнете върху „Запазване“.
Стъпка 5: Добавеното твърдение в SoapUI ще се покаже, както е показано по-долу.
Скриптови твърдения
Тази техника за твърдения е най-широко използваната, тъй като е изключително трудно да се управляват и поддържат стотици твърдения.
SOAP UI използва и двете Groovy Скриптиране или JavaСценарий за скриптови твърдения. Скриптовата техника е възприета за разработване на рамка за тестване на SOAP. Скриптовите твърдения се използват при следните обстоятелства.
Скриптовете позволяват на потребителя да извършва някои операции преди и след изпълнението на TestCase, като използва съответно методи за настройка и разрушаване. Настройването е процедура, която се изпълнява преди изпълнението на конкретен метод (пример – създаване и инициализация на обект), докато събарянето е процедура, която се изпълнява след изпълнение на метода (напр.: Унищожаване на обекти и почистване). Тази функция не е налична в други типове твърдения и може да се направи само чрез кодиране.
Той позволява на потребителите да извършват отваряне/затваряне на проект, за да инициализират или изчистят свързаните с проекта настройки, както и да работят с променливи на средата, което е много полезно по време на скриптове.
Помага ни при утвърждаването на динамично съдържание на отговора.
Скриптовите твърдения се използват за създаване на дефинирани от потребителя твърдения, които НЕ са предварително дефинирани от SOAP UI.
За демонстриране на твърдение на скрипт в SoapUI ще използваме калкулатора WSDL, тестовия случай „Добавяне“, който създадохме по-рано.
Стъпка 1: Стъпките за добавяне на groovy скрипт са същите като тези на други твърдения, с изключение на това, че твърдението не е предварително дефинирано. Вместо това е дефинирано от потребителя твърдение, което предлага по-голяма гъвкавост от вградените.
Изберете тестовата стъпка, спрямо която трябва да се добави твърдението.
Щракнете върху бутона „Добавяне на твърдение“, както е показано по-долу.
Стъпка 2: Сега изберете категорията Assertion.
- В този случай това е скрипт.
- Изберете SoapUI Script Assertion и няма свързани с него подтипове.
- Кликнете върху „Добавяне“.
Стъпка 3: Отваря се диалоговият прозорец за скриптове, където потребителят ще може да напише дефиниран от потребителя скрипт, за да потвърди XML отговора.
Стъпка 4: Сега нека напишем groovy скрипт за валидиране на процента на реализация. Сценарият е приложен по-долу с вградени коментари. Препоръчително е да имате познания по Java Сценарий или Groovy Скрипт, преди да се опитате да напишете свой собствен скрипт.
//Define Groovy Utils and holder for validating the XML reponse content def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) def holder = groovyUtils.getXmlHolder(messageExchange.responseContent) //Define the NameSpace holder.namespaces["ns1"] = "http://tempuri.org/" //Get the Value of the Node 'AddResult' and assign to a variable def addResult = holder.getNodeValue("//ns1:AddResult") //print the value of the result in the Output panel log.info "The result value for integers is " + addResult //Comparing the value to print 'Pass' or 'Fail' if(addResult=="46") { log.info "Pass" } else { log.info "fail"}
- Щракнете върху бутона „Изпълнение“, за да задействате изпълнението.
- Резултатът от скрипта се показва в прозореца Изход. Той е отпечатал както стойността на преобразуването, така и крайния резултат (успешен или неуспешен)
- Показва се информацията, че „Script Assertion Passed“. Натиснете OK.
Забележка: Последният изскачащ прозорец с информация винаги ще се показва със съобщението „Утвърждението на скрипта е преминало“, стига скриптът да е синтактично правилен. Няма връзка с вашето твърдение в сценария.
натиснете ОК
Стъпка 5: Сега разделът за твърдения показва всички твърдения, които сме добавили за този пакет от тестове, със състоянието спрямо всяко едно от тях.
Стъпка 6: Сега
- Изберете пакета за тестване от дървото на навигатора
- Щракнете върху бутона „Изпълни“.
- Резултатите ще бъдат показани за целия набор от тестове.
Твърдение за съвпадение на Xquery
Той използва Xquery израз за избор на съдържание от целевото свойство. Имаме нужда от много по-голям XML отговор, за да разберем по-добре XQuery твърдението в SoapUI. Нека импортираме още един WSDL, както е показано по-долу: http://www.webservicex.net/medicareSupplier.asmx?WSDL
Стъпка 1: Щракнете с десния бутон върху съществуващия проект и изберете „Добавяне на WSDL“.
Стъпка 2: Щракнете с десния бутон върху съществуващия проект и изберете „Добавяне на WSDL“. Оставете другите опции по подразбиране и щракнете върху бутона „OK“.
Стъпка 3: Всички операции са изброени, както е показано по-долу.
Стъпка 4: Сега нека добавим a Тестов случай в рамките на същия тестов пакет, за който създадохме Тестване валутен конвертор.
Стъпка 5: Въведете името на тестовия случай и щракнете върху бутона „OK“.
Стъпка 6: Тестовият случай се създава, както е показано по-долу.
Стъпка 7: Добави
нова тестова стъпка от тип „Заявка за тест за сапун“, както е показано по-долу.
Стъпка 8: Въведете името на тестовата стъпка. Да кажем – Supplier_by_City, което би било по-смислено Кликнете върху „OK“.
Стъпка 9: Изберете Operaция, която бихме искали да валидираме. В този случай това е „MedicareSupplierSoap -> GetSupplierByCity“. Кликнете върху „OK“.
Стъпка 10: Въведете името на тестовия случай и щракнете върху „OK“.
Стъпка 11: XML структурата на заявката ще се покаже, както е показано по-долу.
Стъпка 12: Сега нека намерим цялата информация за доставчика за град „Ню Йорк“.
За да направите това, добавете следните редове към вашия код.
<GetSupplierByCity xmlns="http://www.webservicex.net/"> <City>New York</City> </GetSupplierByCity>
WSDL в URL адреса по-долу – http://www.webservicex.net/medicareSupplier.asmx?op=GetSupplierByCity
Стъпка 13: При изпълнение на теста получаваме отговора по-долу
Стъпка 14: Да кажем, че трябва да валидираме всички номера на доставчика. Не можем да използваме XPath Assertion, тъй като трябва да имаме стотици XPath Assertion. Следователно използването на XQuery е неизбежно в този случай.
XQuery Assertion ни помага да валидираме група от XML отговори, които са повтарящи се по природа.
Стъпка 15: Сега щракнете върху „Добавяне на твърдение“,
- Изберете „Категория на твърдението“ – в този случай съдържание на собственост.
- Изберете типа твърдение като „XQuery твърдение“
- Кликнете върху „Добавяне“.
Стъпка 16: Подобно на XPath Assertion трябва да декларираме пространството от имена.
-
Щракнете върху бутона „Деклариране“, за да позволите автоматично на SOAP UI да декларира пространството от имена. При щракване върху бутона за деклариране на потребителя ще се покаже „POP up“ със съобщение „вместо това декларирайте пространство от имена от схема“. Щракнете върху „Да“, за да продължите, както е показано по-долу.
Забележка: При натискане на бутона „Деклариране“ може да се окажете с различни URL адреси като декларация на пространството на имената, но действителното пространство на имената на местоположението на уеб услугата е това, което ще се счита за кодиране.
- За да извлечем целия номер на доставчик, трябва да напишем XPath заявка и ще я поставим в < SupplierNumber> и Етикети.
- Щракнете върху „Избор от текущия“, който ще се изпълни от текущия отговор.
- При щракване върху „Избор от текущия“ се показват всички номера на доставчика.
- Щракнете върху „Запазване“.
// Namespace declaration declare namespace soap='http://schemas.xmlsoap.org/soap/envelope/'; declare namespace ns1='http://www.webservicex.net/'; declare namespace x = ''; // Placing the result in Myresult Tags{ // Iterating through all the supplier number for $x in //ns1:GetSupplierByCityResponse/ns1:SupplierDataLists/ns1:SupplierDatas/ns1:SupplierData //Return all the Supplier number within ‘SupplierNumber’ Tags. return {data($x/ns1:SupplierNumber)} }
Стъпка 17: XQuery Assertion се изпълнява и показва крайния резултат в панела „Assertion“, както е показано по-долу. Сега успешно добавихме Xquery твърдение, използвайки което потвърдихме цялата информация за номера на доставчика. Същото ще бъде сравнено с действителните, всеки път, когато заявката бъде изпратена до уеб сървъра.
Забележка: Действителните стойности няма да бъдат показани. Ако всички действителни стойности са същите като тези на очакваните стойности, тогава се показва VALID, в противен случай ще се покаже „Неуспешно“.
Кога да използвате вградено твърдение?
- Когато отговорът е кратък, така че да може да бъде валидиран с помощта на едно от тези вградени твърдения.
- Можем също да използваме Inbuilt Assertion, ако отговорът, изпратен от уеб сървъра, винаги е статичен по природа. Ако е динамичен, няма да можем да го потвърдим с помощта на вградени твърдения.
- Когато използването на вградени твърдения като твърдения за изчакване и твърдения за сигурност стане неизбежно.
- Вградените твърдения се държат доста добре за еднократна употреба, когато тестовете не трябва да се повтарят.
Опции за твърдения
Създадените твърдения могат да се контролират най-добре с помощта на контролния панел, който е маркиран по-долу.
Създадените твърдения позволяват на тестерите да конфигурират следните неща от кутията с инструменти за твърдения.
Опция | Descriptйон |
---|---|
Избраното твърдение се придвижва нагоре в реда. | |
Избраното твърдение се придвижва надолу по реда. | |
Премахва избраното твърдение | |
Преконфигурирайте/редактирайте избраното твърдение. |
- По-долу са функциите, налични изключително в PRO версията на SOAP UI. PRO версията също ни помага да групираме твърдения, така че да можем да добавим още един слой на валидиране към създадените твърдения.
- Pro версия също позволява Клониране на твърдения: Тази опция позволява на тестерите да разрешат копиране на твърдение в различна тестова стъпка в същия или различен проект.
- Деактивиране/Разрешаване на твърдения: Тази опция позволява всяко групирано или негрупирано твърдение да бъде деактивирано или разрешено. Ако дадено твърдение е забранено, то е оцветено в сиво и когато се изпълни тестов случай, забранените твърдения няма да бъдат изпълнени.
- Разгрупиране на твърдения: Всички групирани твърдения могат да бъдат разгрупирани, ако тестерите решат да го направят.
И: Всички твърдения се оценяват като ВАЛИДНИ твърдения, което ще доведе до ПРЕМИНАТО групово условие. ИЛИ: Поне едно от твърденията в рамките на групата трябва да бъде ВАЛИДНО, за да се потвърди ПРЕМИНАТО групово условие.
Пълен списък с методи, налични в различни типове твърдения
Утвърждаващ механизъм |
Descriptйон |
СЪДЪРЖАНИЕ НА ИМОТА | |
Съдържа | Търси съществуването на посочения низ. Той също така поддържа регулярен израз. |
Не съдържа | Търси несъществуването на посочения низ. Той също така поддържа регулярен израз. |
Съвпадение на XPath | Използва XPath израз за избор на целевия възел и неговите стойности. |
Съвпадение на XQuery | Използва Xquery израз за избор на съдържание от целевото свойство. |
Съответствие, статус, стандарти | |
HTTP Изтегляне на целия ресурс | Валидира HTML документа след изтегляне и се отнася добре за всяко свойство, съдържащо HTML. |
Невалидни HTTP кодове за състояние | Проверява дали HTML отговорът съдържа код на състояние, който не е в списъка с дефинирани кодове. |
Не е SOAP грешка | Проверява дали последното получено съобщение не е SOAP грешка. Много очевидно е, че е приложимо само за SOAP Test Steps. |
Съответствие на схемата | Проверява дали последното получено съобщение е съвместимо с дефиницията на стандартната схема на WSDL или WADL. Поддържа се добре за SOAP и REST тестови стъпки. |
SOAP грешка | Проверява дали последното получено съобщение е SOAP грешка. Това е обратното на твърденията за грешка „НЕ SOAP“. |
SOAP отговор | Проверява дали последният получен отговор е валиден SOAP отговор и е валиден само за SOAP Test Request Steps. |
Валидни HTTP статус кодове | Проверява дали HTML отговорът съдържа код на състояние, който е в списъка с дефинирани кодове. Това е обратното на твърдението „Невалидни HTTP кодове за състояние“. |
WS-заявка за адресиране | Проверява дали последната получена заявка съдържа подходящи заглавки за WS-адресиране. |
WS-адресиращ отговор | Проверява дали последният получен отговор съдържа подходящи заглавки за WS-адресиране. |
WS-Състояние на сигурността | Проверява дали последното получено съобщение съдържа валидни заглавки на WS-Security и е валидно само за SOAP заявки. |
Сценарий | |
Твърдение на скрипта | Позволява на потребителите да изпълняват персонализиран скрипт за извършване на дефинирани от потребителя проверки. |
SLA | |
SLA за отговор | Потвърждава дали времето за отговор на последния получен отговор е в рамките на дефинирания лимит. |
JMS | |
Състояние на JMS | Проверява дали JMS заявката на тестовата стъпка е изпълнена успешно и е валидна за тестови стъпки с JMS крайна точка. |
Време за изчакване на JMS | Проверява дали отговорът на JMS на тестова стъпка не е отнел повече от определената продължителност. |
Охрана | |
Излагане на чувствителна информация | Проверява дали съобщението за отговор не разкрива поверителна информация за целевата система. Можем да използваме това твърдение за REST, SOAP и HTTP тестови стъпки. |
ИЗТЕГЛЕТЕ ПРОЕКТА SOAPUI, СЪДЪРЖАЩ ГОРНИТЕ ТВЪРДЕНИЯ
Често срещани грешки и отстраняване на неизправности
Използвайте правилното пространство от имена. Пространството за имена трябва да бъде URL адресът, където се намира уеб услугата.
Ако възникне грешка при разработването на твърдение за скрипт, използвайте 'log.info', за да отпечатате съдържанието на променливите
Ако не сте получили желания изход, проверете дали в заявката е подаден валиден вход.
Например, в конвертора на валута, ако въведете „intA“ като „x“, което не е цяло число, изходът извежда код за грешка като „SOAP-клиент“, което означава, че проблемът е с параметъра, който се предава от клиентска страна.
Уверете се, че използвате правилния синтаксис, докато използвате XPATH и XQuery твърдение. НЕ трябва да използвате точка(.) вместо двоеточие(:), докато използвате горното твърдение. Синтаксисът е //пространство от имена:Име на маркер, а НЕ //пространство от имена.име на маркер. Като направите това, може да получите съобщение, че „НЯМА съвпадение в текущия отговор“, въпреки че името на маркера е правилно.