Asercje w SoapUI: skrypty, XQuery, poradnik dotyczący typów XPath
Co to jest twierdzenie?
Asercja oznacza akt potwierdzenia lub stwierdzenia czegoś. Można go również interpretować jako punkt kontrolny lub punkt walidacji.
Po wysłaniu żądania do serwera WWW otrzymana zostanie odpowiedź. Musimy sprawdzić, czy odpowiedź zawiera dane, których oczekujemy. Aby zweryfikować odpowiedź, musimy użyć asercji.
Rodzaje asercji
Istnieją różne sposoby zapewnienia odpowiedzi; jednakże podczas sprawdzania poprawności odpowiedzi skupimy się na powszechnie używanych typach asercji SoapUI. Poniżej znajdują się te, które są dostępne w wersji Open Source SoapUI.
- Zawartość właściwości
- Standard statusu zgodności
- Scenariusz
- SLA
- JMS
- Bezpieczeństwo

Oprócz tych wymienionych powyżej, wersja PRO posiada również wbudowaną asercję JDBC, za pomocą której możemy sprawdzić, czy usługa internetowa poprawnie zaktualizowała bazę danych.
ZAWIERA TWIERDZENIE
Wyszukuje istnienie określonego ciągu. Obsługuje również wyrażenia regularne.
Będziemy kontynuować ten sam przykład z poprzedniego samouczka z żądaniem WSDL http://www.dneonline.com/calculator.asmx.
Krok 1: Domyślnie nie ma żadnych asercji.
- Liczba asercji jest pokazana na karcie Asercje.
- Aby dodać nową asercję, kliknij przycisk „Dodaj nową asercję”.
Krok 2: Teraz,
- Wybierz kategorię asercji.
- Wybierz typ asercji.
- Kliknij „Dodaj”
Krok 3: Sprawdźmy, czy w odpowiedzi istnieje ciąg „46”. Kliknij OK'
Uwaga: Możemy także zignorować wielkość liter i dodać wyrażenie regularne.
Krok 4: Po dodaniu natychmiast wykonywana jest asercja i wyświetlana informacja, czy jest WAŻNA, czy NIEWAŻNA.
Krok 5: Teraz powiedzmy, że zmieniamy zawartość „Zawiera asercję w SoapUI” na „47” i zobaczymy, co się stanie.
Krok 6: Asercja jest wykonywana, a wynik jest zgłaszany użytkownikowi. Ponieważ w odpowiedzi nie mamy ciągu „47”, potwierdzenie nie powiodło się.
NIE ZAWIERA TWIERDZENIA
Wyszukuje nieistnienie określonego ciągu. Obsługuje również wyrażenia regularne.
Krok 1: Teraz, po kliknięciu przycisku „dodaj nowe potwierdzenia”,
- Wybierz kategorię asercji.
- Wybierz typ asercji – w tym przypadku „NIE zawiera”
- Kliknij „Dodaj”
Krok 2: Sprawdźmy, czy w odpowiedzi istnieje ciąg „intA”. Wprowadź ciąg „FromCurrency” i kliknij „OK”
Krok 3: Gdy tylko zostanie dodane potwierdzenie, zostanie ono wykonane i wyświetlone zostanie wynik. Do tej pory dodaliśmy dwa potwierdzenia, więc oba potwierdzenia zostały wykonane i wyświetlone zostały wyniki.
Krok 4: Zmieńmy teraz treść stwierdzenia „Nie zawiera” i zobaczmy, co się stanie. Sprawdzimy, czy ciąg „AddResult” nie istnieje.
Krok 5: Ciąg „AddResult” faktycznie występuje w odpowiedzi, dlatego potwierdzenie „NIE zawiera” zakończy się niepowodzeniem, jak pokazano poniżej.
Twierdzenie o dopasowaniu XPATH
Używa XPath wyrażenie, aby wybrać węzeł docelowy i jego wartości. XPath to język zapytań XML służący do wybierania węzłów z dokumentu XML.
Krok 1: Teraz, po kliknięciu przycisku „Dodaj nowe asercje”,
- Wybierz kategorię asercji.
- Wybierz typ asercji – w tym przypadku „Dopasowanie XPath”
- Kliknij „Dodaj”
Krok 2: Otworzy się okno Dodaj XPath.
Przed dodaniem XPath SoapUI musimy zadeklarować przestrzeń nazw. Przestrzeń nazw XML to zbiór nazw identyfikowanych przez odwołanie do Uniform Resource Identifier (URI), które są używane w dokumentach XML jako nazwy elementów i atrybutów. To samo jest używane w asercji XPath interfejsu użytkownika SOAP.
Aby zadeklarować przestrzeń nazw XML, wystarczy kliknąć przycisk „Zadeklaruj”, który wykona to zadanie za nas, w przeciwnym razie możemy również ręcznie zadeklarować przestrzeń nazw samodzielnie.
Po zadeklarowaniu przestrzeni nazw musimy odwołać się do XPath przy użyciu utworzonej przestrzeni nazw.
Po kliknięciu przycisku „Zadeklaruj” pojawią się dwie przestrzenie nazw, ponieważ mamy dwa identyfikatory URI. Jeden z nich to adres URL schematu, a drugi odpowiada rzeczywistemu adresowi URL usługi internetowej. Podczas odwoływania się do XPath musimy używać rzeczywistej przestrzeni nazw, w której znajduje się usługa internetowa, a NIE przestrzeni nazw schematu.
zadeklaruj mydło przestrzeni nazw='http://schemas.xmlsoap.org/soap/envelope/';
zadeklaruj przestrzeń nazw ns1='http://tempuri.org/';
Krok 3: Teraz musimy wprowadzić XPath węzła XML, który musimy sprawdzić.
//ns1:AddResult Podaje nam wartość węzła zawartego pomiędzy & a ns1 odpowiada zadeklarowanej przestrzeni nazw, która wskazuje na „http://tempuri.org/”
Po wprowadzeniu kodu XML musimy kliknąć opcję „Wybierz z bieżącej”, aby wartość z bieżącej odpowiedzi została pobrana do porównania w przyszłości.
Krok 4: Do tej pory
- Po zadeklarowaniu przestrzeni nazw wprowadziliśmy XPath węzła XML, który musimy sprawdzić.
- Musimy kliknąć „Wybierz z bieżącego”, aby bieżąca wartość stała się wartością oczekiwaną.
- Użytkownikowi pokazywana jest aktualna wartość, którą w razie potrzeby możemy zmodyfikować.
- Kliknij „Zapisz”.
Krok 5: Dodane potwierdzenie w SoapUI zostanie wyświetlone w sposób pokazany poniżej.
Twierdzenia skryptowe
Ta technika asercji jest najpowszechniej stosowana, ponieważ niezwykle trudno jest zarządzać i utrzymywać setki asercji.
Interfejs użytkownika SOAP używa jednego z nich Groovy Skrypty lub JAVASCRIPT do asercji skryptowych. Technika skryptowa jest stosowana do opracowywania ram do testowania SOAP. Asercje skryptowe są używane w następujących okolicznościach.
Skrypty pozwalają użytkownikowi na wykonanie pewnych operacji przed i po wykonaniu TestCase za pomocą metod odpowiednio set up i tear down. Set up to procedura wykonywana przed wykonaniem określonej metody (przykład – tworzenie i inicjalizacja obiektu), podczas gdy tear down to procedura wykonywana po wykonaniu metody (np. niszczenie obiektów i czyszczenie). Ta funkcja nie jest dostępna w innych typach Assertion i można ją wykonać tylko za pomocą kodowania.
Umożliwia użytkownikom otwieranie/zamykanie projektu, inicjowanie lub czyszczenie ustawień związanych z projektem, a także pracę ze zmiennymi środowiskowymi, co jest bardzo pomocne podczas pisania skryptów.
Pomaga nam to w zapewnieniu dynamicznej treści odpowiedzi.
Potwierdzenia skryptowe służą do tworzenia potwierdzeń zdefiniowanych przez użytkownika, które NIE są predefiniowane przez interfejs użytkownika SOAP.
Do zademonstrowania asercji skryptu w SoapUI użyjemy kalkulatora WSDL, utworzonego wcześniej przypadku testowego „Dodaj”.
Krok 1: Kroki dodania skryptu groovy są takie same, jak w przypadku innych asercji, z tą różnicą, że asercja nie jest wstępnie zdefiniowana. Zamiast tego jest to asercja zdefiniowana przez użytkownika, która oferuje większą elastyczność niż te wbudowane.
Wybierz krok testu, do którego ma zostać dodane potwierdzenie.
Kliknij przycisk „Dodaj asercję”, jak pokazano poniżej.
Krok 2: Teraz wybierz kategorię Asercja.
- W tym przypadku jest to Skrypt.
- Wybierz opcję Asercja skryptu SoapUI i nie są z nią powiązane żadne podtypy.
- Kliknij „Dodaj”.
Krok 3: Otworzy się okno dialogowe skryptów, w którym użytkownik będzie mógł napisać zdefiniowany przez siebie skrypt w celu sprawdzenia poprawności kodu XML odpowiedzi.
Krok 4: Teraz napiszmy fajny skrypt, aby sprawdzić współczynnik konwersji. Poniżej załączono skrypt z osadzonymi komentarzami. Zaleca się posiadanie wiedzy nt Java Skrypt lub Groovy Skrypt przed próbą napisania własnego skryptu.
//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"}
- Kliknij przycisk „Wykonaj”, aby uruchomić wykonanie.
- Dane wyjściowe skryptu są wyświetlane w panelu Dane wyjściowe. Wydrukował zarówno wartość konwersji, jak i wynik końcowy (pozytywny lub negatywny)
- Wyświetla się informacja, że 'Script Assertion Passed'. Kliknij OK.
Uwaga: Ostateczne wyskakujące okienko z informacjami będzie zawsze wyświetlane z komunikatem „Potwierdzenie skryptu przekazane”, o ile skrypt jest poprawny składniowo. Nie ma to żadnego związku z twoim twierdzeniem zawartym w skrypcie.
kliknij OK
Krok 5: Teraz karta asercji wyświetla wszystkie potwierdzenia, które dodaliśmy dla tego zestawu testów, wraz ze statusem każdego z nich.
Krok 6: Teraz
- Wybierz zestaw testów z drzewa Nawigatora
- Kliknij przycisk „Uruchom”.
- Wyniki zostaną wyświetlone dla całego zestawu testów.
Twierdzenie dopasowania Xquery
Używa wyrażenia Xquery do wybierania treści z właściwości docelowej. Potrzebujemy znacznie większej odpowiedzi XML, aby lepiej zrozumieć asercję XQuery w SoapUI. Zaimportujmy jeszcze jeden plik WSDL, jak pokazano poniżej: http://www.webservicex.net/medicareSupplier.asmx?WSDL
Krok 1: Kliknij prawym przyciskiem myszy istniejący projekt i wybierz opcję „Dodaj WSDL”.
Krok 2: Kliknij prawym przyciskiem myszy istniejący projekt i wybierz opcję „Dodaj WSDL”. Pozostaw inne opcje jako domyślne i kliknij przycisk „OK”.
Krok 3: Poniżej przedstawiono listę wszystkich operacji.
Krok 4: Teraz dodajmy a Przypadek testowy w tym samym zestawie testów, dla którego stworzyliśmy Testowanie przelicznik walut.
Krok 5: Wprowadź nazwę przypadku testowego i kliknij przycisk „OK”.
Krok 6: Przypadek testowy jest tworzony w sposób pokazany poniżej.
Krok 7: Dodaj
nowy etap testowy typu „Żądanie testu mydła”, jak pokazano poniżej.
Krok 8: Wprowadź nazwę kroku testowego. Powiedzmy – Dostawca_po_City, które byłoby bardziej znaczące. Kliknij „OK”.
Krok 9: Wybierz Operaktórą chcielibyśmy zweryfikować. W tym przypadku jest to 'MedicareSupplierSoap -> GetSupplierByCity'. Kliknij 'OK'.
Krok 10: Wprowadź nazwę przypadku testowego i kliknij „OK”.
Krok 11: Zarys żądania XML zostanie wyświetlony w sposób pokazany poniżej.
Krok 12: Teraz znajdźmy wszystkie informacje o dostawcach dla miasta „Nowy Jork”.
Aby to zrobić, dodaj następujące wiersze do swojego kodu.
<GetSupplierByCity xmlns="http://www.webservicex.net/"> <City>New York</City> </GetSupplierByCity>
WSDL pod poniższym adresem URL – http://www.webservicex.net/medicareSupplier.asmx?op=GetSupplierByCity
Krok 13: Po wykonaniu testu otrzymujemy poniższą odpowiedź
Krok 14: Załóżmy, że musimy zweryfikować cały numer dostawcy. Nie możemy używać asercji XPath, ponieważ potrzebujemy setek asercji XPath. Dlatego w tym przypadku użycie XQuery jest nieuniknione.
Asercja XQuery pomaga nam zweryfikować grupę odpowiedzi XML, które mają charakter powtarzalny.
Krok 15: Teraz kliknij „Dodaj asercję”,
- W tym przypadku wybierz „Kategorię twierdzenia” – Treść właściwości.
- Wybierz typ asercji jako „Asercja XQuery”
- Kliknij „Dodaj”.
Krok 16: Podobnie jak w przypadku asercji XPath, musimy zadeklarować przestrzeń nazw.
-
Kliknij przycisk „Declare”, aby automatycznie zezwolić interfejsowi użytkownika SOAP na zadeklarowanie przestrzeni nazw. Po kliknięciu przycisku „declare” użytkownikowi wyświetli się „POP up” z komunikatem „declare namespace from schema instead”. Kliknij „Yes”, aby kontynuować, jak pokazano poniżej.
Uwaga: Po naciśnięciu przycisku „Zadeklaruj” możesz otrzymać inny adres URL jako deklarację przestrzeni nazw, jednak przy kodowaniu będzie brana pod uwagę rzeczywista przestrzeń nazw lokalizacji usługi internetowej.
- Aby pobrać cały numer dostawcy, musimy napisać zapytanie XPath i umieścić je w <Numer dostawcy> i Tagi.
- Kliknij „Wybierz z bieżącego”, co spowoduje wykonanie na podstawie bieżącej odpowiedzi.
- Po kliknięciu „Wybierz z bieżącego” zostaną wyświetlone wszystkie numery dostawców.
- Kliknij „Zapisz”.
// 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)} }
Krok 17: Asercja XQuery zostanie wykonana, a ostateczny wynik zostanie wyświetlony w panelu „Assercja”, jak pokazano poniżej. Teraz pomyślnie dodaliśmy asercję Xquery, za pomocą której sprawdziliśmy wszystkie informacje o numerze dostawcy. To samo byłoby porównywane z wartościami rzeczywistymi za każdym razem, gdy żądanie jest wysyłane do serwera WWW.
Uwaga: Rzeczywiste wartości nie zostaną wyświetlone. Jeśli wszystkie rzeczywiste wartości są takie same jak oczekiwane wartości, wyświetla się VALID, w przeciwnym razie wyświetla się 'Failed'.
Kiedy używać wbudowanej asercji?
- Gdy odpowiedź jest krótka i można ją zweryfikować za pomocą jednej z wbudowanych asercji.
- Możemy również użyć wbudowanej asercji, jeśli odpowiedź wysyłana z serwera WWW ma zawsze charakter statyczny. Jeśli jest dynamiczny, nie będziemy w stanie go potwierdzić za pomocą wbudowanych asercji.
- Kiedy użycie wbudowanych potwierdzeń, takich jak potwierdzenia przekroczenia limitu czasu i potwierdzenia zabezpieczeń, staje się nieuniknione.
- Wbudowane twierdzenia sprawdzają się całkiem dobrze w przypadku jednorazowego użycia, gdy testów nie trzeba powtarzać.
Opcje asercji
Utworzonymi asercjami najlepiej sterować za pomocą panelu sterowania, który został podświetlony poniżej.
Utworzone potwierdzenia pozwalają testerom skonfigurować następujące rzeczy z zestawu narzędzi potwierdzenia.
Option | Opisy Konstrukcyjne |
---|---|
|
Wybrana asercja przesuwa się w górę kolejności. |
|
Wybrana asercja przesuwa się w dół kolejności. |
|
Usuwa wybrane potwierdzenie |
|
Skonfiguruj ponownie/edytuj wybraną asercję. |
- Poniżej znajdują się funkcje dostępne wyłącznie w wersji PRO SOAP UI. Wersja PRO pomaga nam również w grupowaniu asercji, dzięki czemu możemy dodać jeszcze jedną warstwę walidacji do utworzonych asercji.
- Wersja Pro również pozwala Klonowanie twierdzeń: Ta opcja umożliwia testerom zezwolenie na kopiowanie asercji do innego kroku testowego w tym samym lub innym projekcie.
- Wyłącz/Włącz Asercje: Ta opcja umożliwia wyłączenie lub włączenie dowolnej asercji zgrupowanej lub niezgrupowanej. Jeśli asercja jest wyłączona, jest wyszarzona, a gdy wykonywany jest przypadek testowy, wyłączone asercje nie zostaną wykonane.
- Rozgrupuj asercje: wszelkie zgrupowane asercje można rozgrupować, jeśli testerzy tak postanowią.
ORAZ: Wszystkie asercje są oceniane jako WAŻNE, co skutkuje SPRAWDZONYM warunkiem grupy. LUB: Co najmniej jedno z stwierdzeń w grupie musi być WAŻNE, aby można było stwierdzić grupowy warunek SPRAWDZONY.
Pełna lista metod dostępnych w różnych typach asercji
Mechanizm potwierdzania |
Opisy Konstrukcyjne |
ZAWARTOŚĆ NIERUCHOMOŚCI | |
zawiera | Wyszukuje istnienie określonego ciągu. Obsługuje również wyrażenia regularne. |
Nie zawiera | Wyszukuje nieistnienie określonego ciągu. Obsługuje również wyrażenia regularne. |
Dopasowanie XPath | Używa wyrażenia XPath do wybrania węzła docelowego i jego wartości. |
Dopasowanie XQuery | Używa wyrażenia Xquery do wybierania zawartości z właściwości docelowej. |
Zgodność, status, standardy | |
HTTP Pobierz wszystkie zasoby | Sprawdza dokument HTML po pobraniu i sprawdza każdą właściwość zawierającą HTML. |
Nieprawidłowe kody stanu HTTP | Sprawdza, czy odpowiedź HTML zawiera kod stanu, którego nie ma na liście zdefiniowanych kodów. |
Nie błąd SOAP | Sprawdza, czy ostatnia odebrana wiadomość nie jest błędem protokołu SOAP. Jest bardzo oczywiste, że ma to zastosowanie tylko w przypadku kroków testowych SOAP. |
Zgodność schematu | Sprawdza, czy ostatnia odebrana wiadomość jest zgodna ze standardową definicją schematu WSDL lub WADL. Sprawdza się dobrze w przypadku kroków testowych SOAP i REST. |
Błąd SOAP-a | Sprawdza, czy ostatnia odebrana wiadomość jest błędem protokołu SOAP. Jest to odwrotność stwierdzeń o błędach „NIE SOAP”. |
Odpowiedź SOAP | Sprawdza, czy ostatnia otrzymana odpowiedź jest prawidłową odpowiedzią SOAP i obowiązuje tylko w przypadku kroków żądania testu SOAP. |
Prawidłowe kody stanu HTTP | Sprawdza, czy odpowiedź HTML zawiera kod stanu znajdujący się na liście zdefiniowanych kodów. Jest to odwrotność stwierdzenia „Nieprawidłowe kody stanu HTTP”. |
Żądanie adresowania WS | Sprawdza, czy ostatnie otrzymane żądanie zawiera odpowiednie nagłówki adresowania WS. |
Odpowiedź adresowania WS | Sprawdza, czy ostatnia otrzymana odpowiedź zawiera odpowiednie nagłówki adresowania WS. |
Stan zabezpieczeń WS | Sprawdza, czy ostatnia odebrana wiadomość zawiera prawidłowe nagłówki WS-Security i jest ważna tylko w przypadku żądań SOAP. |
Scenariusz | |
Twierdzenie skryptu | Umożliwia użytkownikom wykonanie niestandardowego skryptu w celu przeprowadzenia weryfikacji zdefiniowanej przez użytkownika. |
SLA | |
Umowa SLA odpowiedzi | Sprawdza, czy czas odpowiedzi ostatniej otrzymanej odpowiedzi mieścił się w zdefiniowanym limicie. |
JMS | |
Stan JMS | Sprawdza, czy żądanie JMS z kroku testowego zostało pomyślnie wykonane i działa prawidłowo w przypadku kroków testowych z punktem końcowym JMS. |
Limit czasu JMS | Sprawdza, czy odpowiedź JMS w kroku testu nie trwała dłużej niż określony czas. |
Bezpieczeństwo | |
Ekspozycja informacji wrażliwych | Sprawdza, czy komunikat odpowiedzi nie ujawnia poufnych informacji o systemie docelowym. Możemy użyć tego potwierdzenia dla kroków testowych REST, SOAP i HTTP. |
POBIERZ PROJEKT SOAPUI ZAWIERAJĄCY POWYŻSZE TWIERDZENIA
Typowe błędy i rozwiązywanie problemów
Użyj prawidłowej przestrzeni nazw. Przestrzeń nazw powinna być adresem URL, pod którym znajduje się usługa internetowa.
Jeśli podczas opracowywania asercji skryptowej wystąpi błąd, użyj „log.info”, aby wydrukować zawartość zmiennych
Jeśli nie otrzymano oczekiwanych wyników, sprawdź, czy w żądaniu przekazano prawidłowe dane wejściowe.
Na przykład w przeliczniku walut, jeśli wpiszesz „intA” jako „x”, które nie jest liczbą całkowitą, na wyjściu zostanie wyświetlony kod błędu „SOAP-Client”, co oznacza, że problem dotyczy parametru przekazywanego z Strona klienta.
Upewnij się, że używasz poprawnej składni podczas korzystania z asercji XPATH i XQuery. NIE powinieneś używać kropki(.) zamiast dwukropka(:) podczas korzystania z powyższego twierdzenia. Składnia to //przestrzeń nazw:Zmienna i NIE //przestrzeń_nazw.zmienna. W ten sposób może pojawić się komunikat „NIE pasuje w bieżącej odpowiedzi”, mimo że nazwa tagu jest poprawna.