Afirmaciones en SoapUI: Scripts, XQuery, Tutorial de tipos XPath
¿Qué es una afirmación?
Aserción significa acto de afirmar o afirmar algo. También puede interpretarse como un punto de control o un punto de validación.
Una vez que se envía una solicitud a un servidor web, se recibe una respuesta. Necesitamos validar si la respuesta contiene los datos que esperamos. Para validar la respuesta, necesitamos usar aserciones.
Tipos de afirmación
Hay varias formas de afirmar una respuesta; sin embargo, nos centraremos en los tipos de afirmaciones SoapUI más utilizados mientras validamos una respuesta. A continuación se muestran los que están disponibles en la versión de código abierto de SoapUI.
- Contenido de la propiedad
- Estándar de estado de cumplimiento
- Guión
- SLA
- JMS
- Seguridad
Además de los que se enumeran anteriormente, la versión PRO también tiene una aserción JDBC incorporada mediante la cual podemos afirmar si el servicio web ha actualizado la base de datos correctamente.
CONTIENE ASERCIÓN
Busca la existencia de la cadena especificada. También admite expresiones regulares.
Continuaremos con el mismo ejemplo del tutorial anterior con solicitud WSDL como http://www.dneonline.com/calculator.asmx.
Paso 1: Por defecto no hay afirmaciones.
- El número de afirmaciones se muestra en la pestaña Afirmaciones.
- Para agregar una nueva afirmación, haga clic en el botón "Agregar nueva afirmación".
Paso 2: Ahora,
- Seleccione la categoría de afirmación.
- Seleccione el tipo de afirmación.
- Haga clic en 'Agregar'
Paso 3: Validemos si la cadena '46' existe en la respuesta. Haga clic en Aceptar'
Nota: También podemos ignorar mayúsculas y minúsculas y agregar expresiones regulares.
Paso 4: Al agregarlo, se ejecuta inmediatamente la aserción y muestra si es VÁLIDA o NO VÁLIDA.
Paso 5: Ahora digamos que cambiamos el contenido de "Contiene afirmación en SoapUI" a "47" y vemos qué sucede.
Paso 6: La afirmación se ejecuta y el resultado se envía al usuario. Como no tenemos la cadena '47' dentro de la respuesta, la afirmación falló.
NO CONTIENE Afirmación
Busca la inexistencia de la cadena especificada. También admite expresiones regulares.
Paso 1: Ahora, después de hacer clic en el botón "agregar nuevas afirmaciones",
- Seleccione la categoría de afirmación.
- Seleccione el tipo de afirmación: en este caso, "NO contiene".
- Haga clic en 'Agregar'
Paso 2: Validemos si la cadena 'intA' existe en la respuesta. Ingrese la cadena "FromCurrency" y haga clic en "Aceptar".
Paso 3: Tan pronto como se agrega una afirmación, se ejecuta y muestra el resultado. Hasta ahora hemos agregado dos afirmaciones, por lo tanto, ambas se ejecutan y muestran el resultado.
Paso 4: Ahora cambiemos el contenido de la "Aserción no contiene" y veamos qué sucede. Comprobaremos la inexistencia de la cadena “AddResult”.
Paso 5: La cadena 'AddResult' está realmente presente en la respuesta, por lo tanto, la afirmación 'NO Contiene' fallará como se muestra a continuación.
ASERCIÓN DE COINCIDENCIA XPATH
Usos XPath expresión para seleccionar el nodo de destino y sus valores. XPath, es un lenguaje de consulta XML para seleccionar nodos de un documento XML.
Paso 1: Ahora, después de hacer clic en el botón "Agregar nuevas afirmaciones",
- Seleccione la categoría de afirmación.
- Seleccione el tipo de afirmación: en este caso, "XPath Match"
- Haga clic en 'Agregar'
Paso 2: Se abre la ventana Agregar XPath.
Antes de agregar SoapUI XPath, debemos declarar el NameSpace. Un espacio de nombres XML es una colección de nombres, identificados mediante una referencia de Identificador uniforme de recursos (URI), que se utilizan en documentos XML como nombres de elementos y atributos. Lo mismo se utiliza en SOAP UI XPath Assertion.
Para declarar un espacio de nombres XML, solo necesitamos hacer clic en el botón "Declarar", que haría el trabajo por nosotros; de lo contrario, también podemos declarar manualmente un espacio de nombres nosotros mismos.
Después de declarar el espacio de nombres, debemos hacer referencia al XPath utilizando el espacio de nombres creado.
Al hacer clic en el botón "Declarar", aparecerán dos espacios de nombres ya que tenemos dos URI. Uno de ellos es la URL del esquema y el otro corresponde a la URL del servicio web real. Necesitamos usar el espacio de nombres real donde se encuentra el servicio web y NO el espacio de nombres del esquema al hacer referencia a XPath.
declarar espacio de nombres jabón =’http://schemas.xmlsoap.org/soap/envelope/’;
declarar espacio de nombres ns1=’http://tempuri.org/’;
Paso 3: Ahora necesitamos ingresar el XPath del nodo XML que necesitamos validar.
//ns1:AddResult Nos da el valor del nodo encerrado entre & y ns1 corresponde al espacio de nombres declarado que apunta a 'http://tempuri.org/'
Después de ingresar el XML, debemos hacer clic en "Seleccionar del actual" para que el valor de la respuesta actual se seleccione para compararlo en el futuro.
Paso 4: Hasta el momento,
- Después de declarar los espacios de nombres, ingresamos el XPath del nodo XML que necesitamos validar.
- Necesitamos hacer clic en 'Seleccionar de actual' para que el valor actual sea el valor esperado.
- El valor actual se muestra al usuario y podemos modificarlo si es necesario.
- Clic en Guardar'.
Paso 5: La afirmación agregada en SoapUI se mostrará como se muestra a continuación.
Afirmaciones de secuencias de comandos
Esta técnica de afirmación es la más utilizada ya que es extremadamente difícil gestionar y mantener cientos de afirmaciones.
SOAP UI utiliza cualquiera de los dos Groovy secuencias de comandos o JavaGuión Para la creación de scripts de aserciones. La técnica de creación de scripts se adopta para desarrollar un marco de trabajo para probar SOAP. Las aserciones de creación de scripts se utilizan en las siguientes circunstancias.
Los scripts permiten al usuario realizar algunas operaciones antes y después de ejecutar un TestCase utilizando los métodos de configuración y desmontaje respectivamente. La configuración es un procedimiento que se ejecuta antes de ejecutar un método en particular (por ejemplo, creación e inicialización de objetos), mientras que el desmontaje es un procedimiento que se ejecuta después de ejecutar el método (por ejemplo, destrucción de objetos y limpieza). Esta función no está disponible en otros tipos de aserciones y solo se puede realizar mediante codificación.
Permite a los usuarios abrir/cerrar un proyecto, para inicializar o limpiar configuraciones relacionadas con el proyecto y también trabajar con variables ambientales, lo cual es muy útil durante la creación de secuencias de comandos.
Nos ayuda a afirmar un contenido de Respuesta dinámico.
Las aserciones de secuencias de comandos se utilizan para crear aserciones definidas por el usuario que NO están predefinidas por la interfaz de usuario de SOAP.
Para demostrar la afirmación del script en SoapUI, utilizaremos la calculadora WSDL, el caso de prueba "Agregar" que habíamos creado anteriormente.
Paso 1: Los pasos para agregar un script maravilloso son los mismos que para otras afirmaciones, excepto que la afirmación no es predefinida. En cambio, es una afirmación definida por el usuario que ofrece mayores flexibilidades que las incorporadas.
Seleccione el paso de prueba contra el cual se debe agregar la afirmación.
Haga clic en el botón "Agregar afirmación" como se muestra a continuación.
Paso 2: Ahora seleccione la categoría Afirmación.
- En este caso es Script.
- Seleccione Aserción de script SoapUI y no habrá subtipos asociados.
- Haga clic en 'Agregar'.
Paso 3: Se abre el cuadro de diálogo de secuencias de comandos donde el usuario podrá escribir una secuencia de comandos definida por el usuario para validar el XML de respuesta.
Paso 4: Ahora escribamos un script maravilloso para validar la tasa de conversión. El guión se adjunta a continuación con los comentarios incrustados. Se recomienda tener conocimientos sobre Java Guión o Groovy Guión antes de intentar escribir su propio guión.
//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"}
- Haga clic en el botón "Ejecutar" para activar la ejecución.
- La salida del script se muestra en el panel Salida. Ha impreso tanto el valor de conversión como el resultado final (aprobado o reprobado).
- Se muestra la información "Se aprobó la aserción de script". Haga clic en Aceptar.
Nota: La ventana emergente de información final siempre se mostrará con el mensaje "Aserción del script aprobada", siempre y cuando el script sea sintácticamente correcto. No tiene correlación con su afirmación en el guión.
haga clic en Aceptar
Paso 5: Ahora la pestaña de aserción muestra todas las aserciones que agregamos para este conjunto de pruebas con el estado de cada una de ellas.
Paso 6: Ahora
- Seleccione el conjunto de pruebas en el árbol del Navegador.
- Haga clic en el botón "Ejecutar"
- Los resultados se mostrarán para todo el conjunto de pruebas.
Aserción de coincidencia de Xquery
Utiliza una expresión Xquery para seleccionar contenido de la propiedad de destino. Necesitamos un XML de respuesta mucho más grande para comprender mejor la afirmación de XQuery en SoapUI. Importemos otro WSDL como se muestra a continuación: http://www.webservicex.net/medicareSupplier.asmx?WSDL
Paso 1: Haga clic derecho en el proyecto existente y seleccione "Agregar WSDL".
Paso 2: Haga clic derecho en el proyecto existente y seleccione "Agregar WSDL". Deje otras opciones como predeterminadas y haga clic en el botón "Aceptar".
Paso 3: Todas las operaciones se enumeran como se muestra a continuación.
Paso 4: Ahora agreguemos un Caso de prueba dentro del mismo conjunto de pruebas que habíamos creado para Pruebas el conversor de moneda.
Paso 5: Ingrese el nombre del caso de prueba y haga clic en el botón "Aceptar".
Paso 6: El caso de prueba se crea como se muestra a continuación.
Paso 7: Añadir el archivo
un nuevo paso de prueba del tipo "Solicitud de prueba de jabón" como se muestra a continuación.
Paso 8: Ingrese el nombre del paso de prueba. Digamos: Proveedor_por_Ciudad, lo cual sería más significativo. Haga clic en "Aceptar".
Paso 9: Seleccione el botón Operación que queremos validar. En este caso es 'MedicareSupplierSoap -> GetSupplierByCity'. Haga clic en 'Aceptar'.
Paso 10: Ingrese el nombre del caso de prueba y haga clic en "Aceptar".
Paso 11: El esquema XML de la solicitud se mostrará como se muestra a continuación.
Paso 12: Ahora busquemos toda la información de proveedores de la ciudad de "Nueva York".
Para ello, agregue las siguientes líneas a su código.
<GetSupplierByCity xmlns="http://www.webservicex.net/"> <City>New York</City> </GetSupplierByCity>
WSDL en la siguiente URL: http://www.webservicex.net/medicareSupplier.asmx?op=GetSupplierByCity
Paso 13: Al ejecutar la prueba, recibimos la siguiente respuesta.
Paso 14: Digamos que necesitamos validar todo el número de proveedor. No podemos usar XPath Assertion porque necesitamos tener cientos de XPath Assertion. Por tanto, el uso de XQuery es inevitable en este caso.
XQuery Assertion nos ayuda a validar un grupo de respuestas XML que son de naturaleza repetitiva.
Paso 15: Ahora haga clic en 'Agregar una afirmación',
- Seleccione la "Categoría de afirmación": Contenido de propiedad en este caso.
- Seleccione el tipo de afirmación como 'Aserción XQuery'
- Haga clic en 'Agregar'.
Paso 16: De manera similar a la afirmación XPath, necesitamos declarar el espacio de nombres.
-
Haga clic en el botón "Declarar" para permitir automáticamente que SOAP UI declare el espacio de nombres. Al hacer clic en el botón de declaración, se mostrará al usuario una ventana emergente con el mensaje "Declarar el espacio de nombres desde el esquema". Haga clic en "Sí" para continuar como se muestra a continuación.
Nota: Al presionar el "botón Declarar", es posible que termine con diferentes URL como declaración de espacio de nombres; sin embargo, el espacio de nombres de la ubicación real del servicio web es lo que se consideraría para la codificación.
- Para recuperar todo el número de proveedor, debemos escribir una consulta XPath y la colocaremos dentro de las etiquetas y .
- Haga clic en 'Seleccionar de la actual' que se ejecutará a partir de la respuesta actual.
- Al hacer clic en "Seleccionar del actual", se enumeran todos los números de proveedor.
- Clic en Guardar'.
// 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)} }
Paso 17: XQuery Assertion se ejecuta y muestra el resultado final en el panel 'Aserción' como se muestra a continuación. Ahora hemos agregado con éxito una aserción Xquery mediante la cual hemos validado toda la información del número del proveedor. Lo mismo se comparará con los datos reales cada vez que se envíe la solicitud al servidor web.
Nota: No se mostrarán los valores reales. Si todos los valores reales son iguales a los valores esperados, se mostrará "VÁLIDO"; de lo contrario, se mostrará "Error".
¿Cuándo utilizar la afirmación incorporada?
- Cuando una respuesta es corta y puede validarse utilizando una de esas afirmaciones incorporadas.
- También podemos utilizar la aserción incorporada si la respuesta enviada desde el servidor web es siempre de naturaleza estática. Si es dinámico, no podremos afirmarlo utilizando aserciones incorporadas.
- Cuando el uso de aserciones incorporadas, como aserciones de tiempo de espera y aserciones de seguridad, se vuelve inevitable.
- Las afirmaciones incorporadas son bastante buenas para un uso único en el que no es necesario repetir las pruebas.
Opciones de afirmaciones
Las aserciones creadas se pueden controlar mejor con la ayuda del panel de control que se destaca a continuación.
Las afirmaciones creadas permiten a los evaluadores configurar las siguientes cosas desde la caja de herramientas de afirmaciones.
Optión | Descripción |
---|---|
La Aserción seleccionada sube en el orden. | |
La afirmación seleccionada baja en el orden. | |
Elimina la afirmación seleccionada | |
Reconfigurar/editar la aserción seleccionada. |
- A continuación se muestran las funciones disponibles exclusivamente en la versión PRO de SOAP UI. La versión PRO también nos ayuda a agrupar aserciones para que podamos agregar una capa más de validación a las aserciones creadas.
- La versión Pro también permite Clonación de afirmaciones: Esta opción permite a los evaluadores copiar una aserción en un paso de prueba diferente en el mismo proyecto o en uno diferente.
- Deshabilitar/Habilitar aserciones: esta opción permite deshabilitar o habilitar cualquier aserción agrupada o no agrupada. Si una aserción está deshabilitada, aparece en gris y, cuando se ejecuta un caso de prueba, las aserciones deshabilitadas no se ejecutarán.
- Desagrupar aserciones: cualquier aserción agrupada se puede desagrupar si los evaluadores deciden hacerlo.
Y: Todas las aserciones se evalúan como aserción VÁLIDA, lo que dará como resultado una condición de grupo PASADA. O: Al menos una de las aserciones dentro del grupo debe ser VÁLIDA para poder afirmar una condición de grupo PASADA.
Lista completa de métodos disponibles en varios tipos de afirmaciones
Mecanismo de afirmación |
Descripción |
CONTENIDO DE LA PROPIEDAD | |
contiene | Busca la existencia de la cadena especificada. También admite expresiones regulares. |
no contiene | Busca la inexistencia de la cadena especificada. También admite expresiones regulares. |
Coincidencia XPath | Utiliza la expresión XPath para seleccionar el nodo de destino y sus valores. |
Coincidencia de XQuery | Utiliza una expresión Xquery para seleccionar contenido de la propiedad de destino. |
Cumplimiento, Estado, Estándares | |
HTTP Descargar todos los recursos | Valida el documento HTML después de la descarga y se mantiene válido para cualquier propiedad que contenga HTML. |
Códigos de estado HTTP no válidos | Verifica si la respuesta HTML contiene un código de estado que no está en la lista de códigos definidos. |
No es culpa de SOAP | Verifica si el último mensaje recibido no es una falla SOAP. Es muy obvio que solo se aplica a los pasos de prueba de SOAP. |
Cumplimiento del esquema | Verifica si el último mensaje recibido cumple con la definición de esquema estándar WSDL o WADL. Es válido para los pasos de prueba SOAP y REST. |
Fallo de jabón | Verifica si el último mensaje recibido es una falla SOAP. Es lo inverso de las afirmaciones de error "NO SOAP". |
Respuesta SOAP | Verifica si la última respuesta recibida es una respuesta SOAP válida y es válida únicamente para los pasos de solicitud de prueba SOAP. |
Códigos de estado HTTP válidos | Verifica si la respuesta HTML contiene un código de estado que esté en la lista de códigos definidos. Es lo inverso a la afirmación de "Códigos de estado HTTP no válidos". |
Solicitud de direccionamiento WS | Verifica si la última solicitud recibida contiene encabezados WS-Addressing adecuados. |
Respuesta de direccionamiento WS | Verifica si la última respuesta recibida contiene encabezados WS-Addressing adecuados. |
Estado de seguridad WS | Valida si el último mensaje recibido contiene encabezados WS-Security válidos y solo es válido para solicitudes SOAP. |
Guión | |
Afirmación de guión | Permite a los usuarios ejecutar un script personalizado para realizar validaciones definidas por el usuario. |
SLA | |
SLA de respuesta | Valida si el tiempo de respuesta de la última respuesta recibida estuvo dentro del límite definido. |
JMS | |
Estado JMS | Verifica si la solicitud JMS del paso de prueba se ha ejecutado correctamente y es válida para los pasos de prueba con un punto final JMS. |
Tiempo de espera JMS | Verifica si la respuesta JMS de un paso de prueba no tardó más que la duración especificada. |
Seguridad | |
Exposición de información confidencial | Verifica si el mensaje de respuesta no expone información confidencial sobre el sistema de destino. Podemos utilizar esta afirmación para los pasos de prueba REST, SOAP y HTTP. |
DESCARGUE EL PROYECTO SOAPUI QUE CONTIENE LAS Afirmaciones ANTERIORES
Errores comunes y solución de problemas
Utilice el espacio de nombres correcto. El espacio de nombre debe ser la URL donde se encuentra el servicio web.
Si se produce un error al desarrollar una aserción de secuencia de comandos, use 'log.info' para imprimir el contenido de las variables.
Si no ha obtenido el resultado deseado, verifique si se pasa una entrada válida en la solicitud.
Por ejemplo, en el conversor de moneda, si ingresa 'intA' como 'x' que no es un número entero, la salida arroja un código de error como 'SOAP-Client', lo que significa que el problema está en el parámetro que se pasa desde el lado del cliente.
Asegúrese de utilizar la sintaxis correcta al utilizar la aserción XPATH y XQuery. NO debe usar punto (.) en lugar de dos puntos (:) mientras usa la afirmación anterior. La sintaxis es //espaciodenombres:nombredeetiqueta y NO //espaciodenombres.nombredeetiqueta. Al hacerlo, es posible que termine recibiendo un mensaje que diga "NO coincide en la respuesta actual" aunque el nombre de la etiqueta sea correcto.