Affermazioni in SoapUI: Script, XQuery, tipi XPath
โก Riepilogo intelligente
Affermazioni in SoapUI Sono i punti di controllo che decidono se la risposta di un servizio web รจ corretta, trasformando una richiesta che si limita a essere eseguita in un test che ha effettivamente successo o fallisce su contenuti reali e verificabili.
Cos'รจ un'asserzione?
Asserzione significa atto di affermare o affermare qualcosa. Puรฒ anche essere interpretato come punto di controllo o punto di convalida.
Una volta inviata una richiesta a un server web, si riceve una risposta. Dobbiamo verificare se la risposta contiene i dati che ci aspettiamo. Per convalidare la risposta, dobbiamo usare le asserzioni. Senza un'asserzione, un passaggio di test dimostra solo che il servizio ha risposto, non che ha risposto correttamente, motivo per cui ogni test API dovrebbe portarne almeno uno.
Tipi di asserzione
Esistono vari modi per formulare una risposta; tuttavia, ci concentreremo su quelli comunemente utilizzati SoapUI tipi di asserzione durante la convalida di una risposta. Di seguito sono riportate le categorie disponibili nella versione Open Source di SoapUI.
- Contenuto della proprietร
- Standard sullo stato di conformitร
- Copione
- SLA
- JMS
- Sicurezza
La finestra di dialogo raggruppa ogni asserzione in queste categorie, come mostrato nella schermata seguente.

Oltre a quelle elencate sopra, la versione Pro include anche un'asserzione JDBC integrata che permette di verificare se il servizio web ha aggiornato correttamente il database.
Nota sulla versione: corrente SoapUI la documentazione elenca anche un JDBC categoria (stato JDBC e timeout JDBC) insieme alle categorie sopra e una Contenuto del messaggio asserzione all'interno di Property Content per un confronto XML piรน ricco. L'edizione commerciale qui denominata "Pro" รจ ora venduta come ReadyAPI da SmartBear, quindi le etichette dei menu nelle versioni piรน recenti potrebbero essere visualizzate in modo diverso, mentre il comportamento di asserzione rimane invariato.
Contiene asserzione
Cerca l'esistenza della stringa specificata. Supporta anche le espressioni regolari.
Continueremo con lo stesso esempio del tutorial precedente con la richiesta WSDL as http://www.dneonline.com/calculator.asmxSe non hai ancora realizzato quel progetto, lavora attraverso creazione di un progetto, di una suite di test e di un caso di test prima.
Passaggio 1: Per impostazione predefinita non ci sono asserzioni.
- Il numero di asserzioni รจ mostrato nella scheda Asserzioni.
- Per aggiungere una nuova asserzione, fare clic sul pulsante "Aggiungi nuova asserzione".
Passaggio 2: ora,
- Seleziona la categoria di asserzione.
- Seleziona il tipo di asserzione.
- Fai clic su "Aggiungi"
Passaggio 3: Verifichiamo se la stringa '46' รจ presente nella risposta. Fare clic su 'OK'.
Nota: possiamo anche ignorare maiuscole e minuscole e aggiungere espressioni regolari.
Passaggio 4: Dopo averlo aggiunto, viene immediatamente eseguita l'asserzione che mostra se รจ VALIDO o NON VALIDO.
Passaggio 5: Ora diciamo che modifichiamo il contenuto di 'Contiene asserzione in SoapUI' a '47' e vedi cosa succede.
Passaggio 6: L'asserzione viene eseguita e il risultato viene mostrato all'utente. Poichรฉ la stringa '47' non รจ presente nella risposta, l'asserzione non รจ andata a buon fine.
Non contiene asserzione
La sua controparte funziona al contrario: cerca l'inesistenza della stringa specificata. Supporta anche le espressioni regolari.
Passaggio 1: Ora, dopo aver fatto clic sul pulsante 'aggiungi nuove asserzioni',
- Seleziona la categoria di asserzione.
- Seleziona il tipo di asserzione: in questo caso "NON contiene"
- Fai clic su "Aggiungi"
Passaggio 2: Verifichiamo se la stringa 'intA' รจ presente nella risposta. Inserisci la stringa 'FromCurrency' e fai clic su 'OK'.
Passaggio 3: Non appena viene aggiunta un'asserzione, questa viene eseguita e ne viene visualizzato il risultato. Finora abbiamo aggiunto due asserzioni, quindi entrambe vengono eseguite e il risultato viene visualizzato.
Passaggio 4: Ora modifichiamo il contenuto dell'asserzione 'Not Contains' e vediamo cosa succede. Verificheremo l'inesistenza della stringa "AddResult".
Passaggio 5: La stringa 'AddResult' รจ effettivamente presente nella risposta, pertanto l'asserzione 'NOT Contains' fallirร , come mostrato di seguito.
Asserzione corrispondenza XPath
La corrispondenza tra stringhe รจ approssimativa, quindi l'asserzione successiva si concentra su un singolo nodo. Utilizza un'espressione XPath per selezionare il nodo di destinazione e i relativi valori. XPathรจ un linguaggio di interrogazione XML per la selezione di nodi da un documento XML.
Passaggio 1: Ora, dopo aver fatto clic sul pulsante 'Aggiungi nuove asserzioni',
- Seleziona la categoria di asserzione.
- Seleziona il tipo di asserzione: in questo caso "XPath Match"
- Fai clic su "Aggiungi"
Passaggio 2: Si apre la finestra Aggiungi XPath.
Prima di aggiungere un SoapUI XPath, dobbiamo dichiarare lo spazio dei nomi. Uno spazio dei nomi XML รจ una raccolta di nomi, identificati da un riferimento Uniform Resource Identifier (URI), che vengono utilizzati nei documenti XML come nomi di elementi e attributi. Lo stesso viene utilizzato nel SoapUI Asserzione XPath.
Per dichiarare uno spazio dei nomi XML, รจ sufficiente fare clic sul pulsante "Dichiara", che eseguirร l'operazione automaticamente; in alternativa, รจ possibile dichiarare manualmente lo spazio dei nomi.
Dopo aver dichiarato lo spazio dei nomi, dobbiamo fare riferimento all'XPath utilizzando lo spazio dei nomi creato.
Facendo clic sul pulsante 'Declare', appariranno due namespace poichรฉ abbiamo due URI. Uno di essi รจ lo schema URL e l'altro corrisponde al servizio web vero e proprio URLDobbiamo utilizzare il namespace effettivo in cui si trova il servizio web e NON il namespace dello schema quando facciamo riferimento a XPath. Le righe dichiarate appaiono nella parte superiore della casella XPath, come mostrato di seguito.
dichiarare lo spazio dei nomi soap='http://schemas.xmlsoap.org/soap/envelope/';
dichiarare lo spazio dei nomi ns1='http://tempuri.org/';
Passaggio 3: Ora dobbiamo inserire l'XPath del nodo XML che dobbiamo convalidare.
//ns1:AddResult Ci fornisce il valore del nodo racchiuso tra & e ns1 corrisponde allo spazio dei nomi dichiarato che punta a "http://tempuri.org/"
Dopo aver inserito l'XML, dobbiamo fare clic su "Seleziona da corrente" in modo che il valore della risposta corrente venga prelevato per il confronto futuro.
Passo 4: Finora,
- Dopo aver dichiarato gli spazi dei nomi, abbiamo inserito il nodo XPath del XML che dobbiamo convalidare.
- Dobbiamo fare clic su "Seleziona da corrente" per rendere il valore corrente come valore previsto.
- All'utente viene mostrato il valore corrente che possiamo modificare se necessario.
- Fare clic su "Salva".
Passaggio 5: L'asserzione aggiunta in SoapUI verrร visualizzato come mostrato di seguito.
Asserzioni di scripting
Questa tecnica di asserzione รจ quella piรน utilizzata poichรฉ รจ estremamente difficile gestire e mantenere centinaia di asserzioni.
SoapUI usa sia Groovy Script o JavaCopione per le asserzioni di scripting. La tecnica di scripting viene adottata per lo sviluppoping Un framework per il test di SOAP. Le asserzioni di scripting vengono utilizzate nelle seguenti circostanze.
- Lo scripting consente all'utente di eseguire alcune operazioni prima e dopo l'esecuzione di un caso di test, utilizzando rispettivamente i metodi di configurazione e di pulizia. La configurazione รจ una procedura eseguita prima dell'esecuzione di un metodo specifico (ad esempio, creazione e inizializzazione di un oggetto), mentre la pulizia รจ una procedura eseguita dopo l'esecuzione del metodo (ad esempio, distruzione di oggetti e pulizia). Questa funzionalitร non รจ disponibile in altri tipi di asserzione e puรฒ essere implementata solo tramite codice.
- Consente agli utenti di aprire e chiudere un progetto, per inizializzare o ripulire le impostazioni relative al progetto e anche per lavorare con le variabili d'ambiente, il che รจ molto utile durante la programmazione.
- Ci aiuta ad affermare un contenuto di risposta dinamico.
- Le asserzioni di scripting vengono utilizzate per creare asserzioni definite dall'utente che NON sono predefinite da SoapUI.
Per dimostrare un'asserzione di script in SoapUI, utilizzeremo il WSDL della calcolatrice, il caso di test 'Add' che avevamo creato in precedenza.
Passaggio 1: I passaggi per aggiungere uno script Groovy sono gli stessi di quelli per le altre asserzioni, con la differenza che non si tratta di un'asserzione predefinita. ร invece un'asserzione definita dall'utente, che offre maggiore flessibilitร rispetto a quelle integrate.
Selezionare la fase del test rispetto alla quale deve essere aggiunta l'asserzione.
Fare clic sul pulsante "Aggiungi asserzione" come mostrato di seguito.
Passaggio 2: Ora seleziona la categoria Asserzione.
- In questo caso รจ Script.
- Seleziona SoapUI Asserzione di script e non ci sono sottotipi associati ad essa.
- Fare clic su "Aggiungi".
Passaggio 3: si apre la finestra di dialogo Scripting, in cui l'utente potrร scrivere uno script personalizzato per convalidare la risposta XML.
Passaggio 4: Ora scriviamo uno script Groovy per convalidare il tasso di conversione. Lo script รจ allegato di seguito con i commenti incorporati. Si consiglia di avere conoscenza su Java Scrittura o Groovy Script prima di provare a scrivere il tuo script.
//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"}
- Fare clic sul pulsante "Esegui" per attivare l'esecuzione.
- L'output dello script viene visualizzato nel riquadro Output. Ha stampato sia il valore di conversione che il risultato finale (Passato o Fallito)
- Viene visualizzata l'informazione "Asserzione script superata". Fare clic su OK.
Nota: il popup informativo finale verrร sempre visualizzato con il messaggio "Asserzione script superata" purchรฉ lo script sia sintatticamente corretto. Non ha alcuna correlazione con la tua affermazione all'interno della sceneggiatura.
fare clic su OK
Passaggio 5: Ora la scheda Asserzioni visualizza tutte le asserzioni che abbiamo aggiunto per questa suite di test, con lo stato corrispondente a ciascuna di esse.
Passaggio 6: ora
- Selezionare la Test Suite dall'albero del Navigatore
- Fare clic sul pulsante "Esegui".
- I risultati verranno visualizzati per l'intera suite di test.
Asserzione di corrispondenza XQuery
Utilizza un'espressione XQuery per selezionare il contenuto dalla proprietร di destinazione. Abbiamo bisogno di un XML di risposta molto piรน grande per comprendere meglio l'asserzione XQuery in SoapUIImportiamo un altro file WSDL come mostrato di seguito: http://www.webservicex.net/medicareSupplier.asmx?WSDL
Nota: Gli endpoint demo pubblici di webservicex.net utilizzati in questa procedura guidata non sono piรน raggiungibili in modo affidabile, pertanto gli screenshot di richiesta e risposta riportati di seguito sono mantenuti come esempio di riferimento. Qualsiasi WSDL che restituisca un set di nodi ripetuto eseguirร l'asserzione XQuery esattamente nello stesso modo.
Passaggio 1: Fai clic con il pulsante destro del mouse sul progetto esistente e seleziona "Aggiungi WSDL".
Passaggio 2: si apre la finestra di dialogo Aggiungi WSDL. Lascia le altre opzioni predefinite e fai clic sul pulsante 'OK'.
Passaggio 3: Tutte le operazioni sono elencate come mostrato di seguito.
Passaggio 4: Ora aggiungiamo un Test Case all'interno della stessa suite di test per cui avevamo creato Collaudo il convertitore di valuta.
Passaggio 5: Inserire il nome del caso di test e fare clic sul pulsante 'OK'
Passaggio 6: Il caso di test viene creato come mostrato di seguito.
Passaggio 7: Aggiungere un nuovo passaggio di test di tipo 'Richiesta di test SOAP' come mostrato di seguito.
Passaggio 8: Inserire il nome del passaggio del test. Ad esempio, Fornitore_per_Cittร , che sarebbe piรน significativo. Fare clic su 'OK'.
Passo 9: selezionare il Operazione che vorremmo convalidare. In questo caso รจ 'MedicareSupplierSoap -> GetSupplierByCity'. Fai clic su 'OK'.
Passaggio 10: Inserire il nome del caso di test e fare clic su 'OK'.
Passaggio 11: La struttura XML della richiesta verrร visualizzata come mostrato di seguito.
Passaggio 12: Ora cerchiamo tutte le informazioni sui fornitori per la cittร di New York.
Per farlo, aggiungi le seguenti righe al tuo codice.
<GetSupplierByCity xmlns="http://www.webservicex.net/"> <City>New York</City> </GetSupplierByCity>
WSDL qui sotto URL โ http://www.webservicex.net/medicareSupplier.asmx?op=GetSupplierByCity
Passaggio 13: Dopo aver eseguito il test, riceviamo la seguente risposta
Passaggio 14: Supponiamo di dover convalidare tutti i numeri di fornitore. Non possiamo usare le asserzioni XPath perchรฉ ne servirebbero centinaia. Pertanto, l'utilizzo di XQuery รจ inevitabile in questo caso.
XQuery Assertion ci aiuta a convalidare un gruppo di risposte XML di natura ripetitiva.
Passaggio 15: Ora fai clic su 'Aggiungi un'asserzione',
- Selezionare la "Categoria di asserzione" โ Contenuto della proprietร in questo caso.
- Seleziona il tipo di asserzione come "Asserzione XQuery"
- Fare clic su "Aggiungi".
Passaggio 16: Analogamente all'asserzione XPath, dobbiamo dichiarare lo spazio dei nomi.
- Fai clic sul pulsante 'Dichiara' per consentire automaticamente SoapUI per dichiarare il namespace. Facendo clic sul pulsante "Dichiara", verrร visualizzato un "POP up" con il messaggio "Dichiara il namespace dallo schema invece". Fai clic su "Sรฌ" per procedere come mostrato di seguito.
- Per recuperare tutto il Numero Fornitore, dobbiamo scrivere una query XPath e la inseriremo all'interno di <Numero Fornitore> e Tag.
- Fare clic su "Seleziona dalla corrente" per eseguire la risposta corrente.
- Facendo clic su "Seleziona dall'elenco corrente", vengono visualizzati tutti i numeri di fornitore.
- Fare clic su "Salva".
Nota: premendo il pulsante 'Dichiara' potresti ritrovarti con qualcosa di diverso URL's come dichiarazione di namespace, tuttavia, il namespace effettivo della posizione del servizio web รจ quello che verrebbe considerato per la codifica.
L'espressione XQuery finale, con le relative dichiarazioni di namespace, si presenta cosรฌ.
// 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)} }
Passaggio 17: L'asserzione XQuery viene eseguita e il risultato finale viene visualizzato nel pannello "Asserzioni", come mostrato di seguito. Ora abbiamo aggiunto con successo un'asserzione XQuery tramite la quale abbiamo convalidato tutte le informazioni relative al numero del fornitore. Queste verranno confrontate con i dati effettivi ogni volta che la richiesta viene inviata al server web.
Nota: i valori effettivi non verranno visualizzati. Se tutti i valori effettivi sono uguali a quelli attesi, verrร visualizzato VALID altrimenti verrร visualizzato 'Failed'.
Quando utilizzare l'asserzione incorporata?
Avendo trattato sia l'opzione "punta e clicca" che quella basata su script, la domanda pratica รจ quale delle due sia la piรน adatta.
- Quando una risposta รจ breve in modo tale da poter essere convalidata utilizzando una di quelle asserzioni integrate.
- Possiamo anche utilizzare Inbuilt Assertion se la risposta inviata dal server web รจ sempre di natura statica. Se รจ dinamico, non saremo in grado di affermarlo utilizzando asserzioni integrate.
- Quando l'utilizzo di asserzioni integrate come asserzioni di timeout e asserzioni di sicurezza diventa inevitabile.
- Le asserzioni integrate sono abbastanza valide per l'utilizzo una tantum in cui i test non devono essere ripetuti.
Opzioni di asserzioni
Le asserzioni create possono essere controllate al meglio con l'aiuto del pannello di controllo evidenziato di seguito.
Le asserzioni create consentono ai tester di configurare le seguenti cose dalla cassetta degli attrezzi delle asserzioni.
| Opzione | Descrizione |
| L'asserzione selezionata avanza nell'ordine. | |
| L'asserzione selezionata si sposta verso il basso nell'ordine. | |
| Rimuove l'asserzione selezionata | |
| Riconfigurare/modificare l'asserzione selezionata. |
Di seguito sono elencate le funzionalitร disponibili esclusivamente nella versione Pro di SoapUI, ora spedito come ReadyAPILa versione Pro ci permette anche di raggruppare le asserzioni, aggiungendo cosรฌ un ulteriore livello di validazione a quelle create.
- E: Tutte le asserzioni vengono valutate come asserzioni VALIDE, il che comporterร la condizione di gruppo SUPERATA.
- OR: Almeno una delle asserzioni all'interno del gruppo deve essere VALIDA per poter affermare che la condizione del gruppo รจ SUPERATA.
- La versione Pro consente anche Clonazione di asserzioniQuesta opzione consente ai tester di autorizzare la copia di un'asserzione in una diversa fase di test, nello stesso progetto o in un progetto diverso.
- Disabilita/Abilita asserzioni: questa opzione consente di disabilitare o abilitare qualsiasi asserzione, sia raggruppata che non. Se un'asserzione รจ disabilitata, viene visualizzata in grigio e, quando viene eseguito un caso di test, le asserzioni disabilitate non verranno eseguite.
- Separazione delle asserzioni: qualsiasi asserzione raggruppata puรฒ essere separata se i tester decidono di farlo.
Elenco completo dei metodi disponibili in vari tipi di asserzioni
La tabella seguente raccoglie tutte le asserzioni discusse in precedenza, raggruppate in base alla categoria in cui appaiono nella finestra di dialogo Aggiungi asserzione.
| Meccanismo di affermazione | Descrizione |
| CONTENUTO DELL'IMMOBILE | |
| contiene | Cerca l'esistenza della stringa specificata. Supporta anche le espressioni regolari. |
| Non contiene | Cerca la non esistenza della stringa specificata. Supporta anche le espressioni regolari. |
| Corrispondenza XPath | Utilizza l'espressione XPath per selezionare il nodo di destinazione e i relativi valori. |
| Corrispondenza XQuery | Utilizza un'espressione XQuery per selezionare il contenuto dalla proprietร di destinazione. |
| Conformitร , stato, standard | |
| HTTP Scarica tutte le risorse | Convalida il documento HTML dopo il download e rimane valido per qualsiasi proprietร contenente HTML. |
| Stato HTTP non valido Codes | Verifica se la risposta HTML contiene un codice di stato che non รจ presente nell'elenco dei codici definiti. |
| Non รจ un errore SOAP | Verifica se l'ultimo messaggio ricevuto non รจ un errore SOAP. ร ovvio che รจ applicabile solo per le fasi del test SOAP. |
| Conformitร allo schema | Verifica se l'ultimo messaggio ricevuto รจ conforme alla definizione dello schema standard WSDL o WADL. Vale anche per le fasi di test SOAP e REST. |
| Errore SOAP | Verifica se l'ultimo messaggio ricevuto รจ un errore SOAP. ร l'inverso delle asserzioni di errore "NOT SOAP". |
| Risposta SAPONE | Verifica se l'ultima risposta ricevuta รจ una risposta SOAP valida e vale solo per i passaggi della richiesta di test SOAP. |
| Stato HTTP valido Codes | Verifica se la risposta HTML contiene un codice di stato presente nell'elenco dei codici definiti. ร l'inverso di 'Stato HTTP non valido'. CodeAffermazione di s. |
| Richiesta di indirizzamento WS | Verifica se l'ultima richiesta ricevuta contiene intestazioni WS-Addressing appropriate. |
| Risposta all'indirizzamento WS | Verifica se l'ultima risposta ricevuta contiene intestazioni WS-Addressing appropriate. |
| Stato WS-Security | Convalida se l'ultimo messaggio ricevuto contiene intestazioni WS-Security valide e vale solo per le richieste SOAP. |
| Copione | |
| Asserzione di copione | Consente agli utenti di eseguire uno script personalizzato per eseguire convalide definite dall'utente. |
| SLA | |
| SLA di risposta | Convalida se il tempo di risposta dell'ultima risposta ricevuta rientrava nel limite definito. |
| JMS | |
| Stato JMS | Verifica se la richiesta JMS della fase di test รจ stata eseguita correttamente ed รจ valida per le fasi di test con un endpoint JMS. |
| Timeout JMS | Verifica se la risposta JMS di una fase di test non ha richiesto piรน tempo della durata specificata. |
| Sicurezza | |
| Esposizione di informazioni sensibili | Verifica se il messaggio di risposta non espone informazioni riservate sul sistema di destinazione. Possiamo utilizzare questa affermazione per le fasi di test REST, SOAP e HTTP. |
SCARICA IL PROGETTO SOAPUI CONTENENTE LE ASSERZIONI DI CUI SOPRA
Errori comuni e risoluzione dei problemi
La maggior parte degli errori di asserzione tracTorniamo a una piccola serie di errori, quindi controllali prima di riscrivere un'espressione.
- Utilizzare il namespace corretto. Il namespace dovrebbe essere il URL dove si trova il servizio web.
- Se si verifica un errore durante lo sviluppoping Per eseguire un'asserzione di scripting, utilizzare 'log.info' per stampare il contenuto delle variabili.
- Se non si ottiene l'output desiderato, verificare che nella richiesta venga passato un input valido.
Ad esempio, in un convertitore di valuta, se si inserisce 'intA' come 'x', che non รจ un numero intero, l'output genera un codice di errore 'SOAP-Client', il che significa che il problema risiede nel parametro passato dal lato client. La richiesta contenente il valore non valido viene visualizzata per prima.
La risposta restituisce il codice di errore anzichรฉ un risultato, come mostrato di seguito.
Assicurati di utilizzare la sintassi corretta quando usi XPath e le asserzioni XQuery. NON usare il punto (.) al posto dei due punti (:) quando usi l'asserzione di cui sopra. La sintassi รจ //namespace:Tagname e NON //namespace.tagname. In caso contrario, potresti ricevere il messaggio "Nessuna corrispondenza nella risposta corrente" anche se il nome del tag รจ corretto.














































