QUE ES SOAP
SOAP define un mecanismo simple y liviano (en contraposición a sofisticado) para la
comunicación, en un entorno distribuido o descentralizado, entre componentes de
software o aplicaciones. La comunicación se realiza mediante mensajes codificados en
XML y transportados por un protocolo de transporte. En definitiva SOAP define un
mecanismo para el intercambio de información, estructurada y tipeada, entre pares de
aplicaciones en un entorno distribuido, teniendo como objetivos de diseño la simplicidad y
la extensibilidad.
SOAP no define por sí mismo la semántica de las aplicaciones, como ser un modelo de
programación o algún tipo de semántica específica de una implementación, sino que
provee un mecanismo simple para expresar la semántica de las aplicaciones, mediante un
modelo modular de empaquetado de mensajes y la definición de como codificar los datos
de las aplicaciones en dichos módulos.
Como se hace uso del SOAP
• Como un mecanismo para invocar métodos en servidores, servicios, o
componentes, para lo cual se define en la especificación una metodología para
encapsular e intercambiar invocaciones RPC( Remote Procedure Call) , en los
mensajes, usando la extensibilidad y flexibilidad que proporciona XML.
• Como un protocolo para intercambio de mensajes (sincrónicos o asincronicos).
• Como un formato para intercambio de documentos XML.
Que es un Mensaje SOAP
La especificación de SOAP define el formato de los mensajes para comunicar
aplicaciones, normalmente dichos mensajes son una forma de comunicación de una única
vía entre un emisor y un receptor (mensajes asincrónicos), sin embargo pueden ser
combinados de manera de implementar patrones de request/response (mensajes
sincrónicos).
La especificación SOAP no establece un protocolo de transporte particular pero si
especifica como se realiza el transporte en caso de usar HTTP
El implementar patrones de request/response es sumamente natural si se utiliza HTTP
como protocolo de transporte dado que en este caso los mensajes SOAP siguen el
modelo requerimiento/respuesta de los mensajes HTTP, enviando el requerimiento en un
request HTTP y la respuesta SOAP en un HTTP response.
.
La especificación de SOAP establece que los mensajes sean codificados en XML. El uso
de XML tiene las siguientes ventajas:
• XML es un protocolo para representar datos independientemente de plataformas y
lenguajes
• Está disponible en todas las plataformas.
• Es adecuado para manipular datos estructurados y tipeados
• Es fácil de analizar (parsing) y entender (tanto para máquinas como por personas)
por ser texto.
Resumiendo, el protocolo SOAP es una alternativa sumamente útil para comunicar
aplicaciones heterogéneas (interoperabilidad), fundamentalmente por el uso de XML que
es un estándard basado en texto e independiente de plataformas y lenguajes y por el uso
de HTTP como transporte, el cual normalmente atraviesa los firewalls dado que estos no
bloquean el puerto HTTP. Además al no ser un protocolo sofisticado y al no definir
modelos de programación permite que las aplicaciones tengan un bajo acoplamiento, lo
cual es ideal en el entorno de internet.
Estructura de un Mensaje SOAP
En los mensaje SOAP, tanto los mensajes REQUEST como RESPONSE consisten en
mensajes HTTP, pero es de hacer notar que en caso de usar cualquier otro protocolo de
transporte no cambia el contenido del mensaje, el cual está codificado en XML
Los mensajes SOAP están codificados en XML y consisten de una sección denominada
ENVELOPE (obligatoria), la cual está compuesta de una sección denominada HEADER
(opcional) y de una sección denominada BODY (obligatoria).
SOAP Envelope
Esta construcción sintáctica de nombre ENVELOPE contiene el resto del documento XML
y debe estar presente siempre y ser primer sección del mensaje. Define los distintos
NAMESPACES que son usados en el resto del mensaje
Los NAMESPACES se utilizan para garantizar la unicidad de los elementos y evitar
ambiguedades.
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
</SOAP-ENV:Envelope>
SOAP Header
Esta construcción sintáctica de nombre HEADER es opcional y es un mecanismo
genérico para extender las características de los mensajes SOAP de una manera
descentralizada y sin un acuerdo previo entre las partes que se comunican. En caso de
estar presente debe ser el primer hijo de la construcción ENVELOPE.
A modo de ejemplo algunas extensiones que pueden ser implementadas mediante esta
construcción son transportar información auxiliar para la autenticación, manejo de
transacciones, etc.
<SOAP-ENV:Header>
<User Information>
</SOAP-ENV:Header>
<SOAP-ENV:Header>
<Transaction Information>
</SOAP-ENV:Header>
SOAP Body
Es una construcción sintáctica de nombre BODY que actúa como contenedor para la
información que se envía al receptor del mensaje. Esta construcción debe estar presente
siempre en los mensajes SOAP y debe estar a continución del HEADER, si está presente,
o ser el primer hijo de ENVELPE si el HEADER no está presente.
Los usos típicos de esta construcción son proveer un mecanismo simple de intercambiar
información con el receptor del mensaje SOAP. En esta parte del mensaje es donde se
encuentran las invocaciones RPC o bien el resultado de la invocación.
Multiples Mensajes
Cada una de las construcciones sintácticas HEADER y BODY pueden ser organizadas
en bloques, es decir unidades sintácticas usadas para delimitar información que
lógicamente constituye una unidad computacional para un emisor o receptor.
Software SOAPUI
SoapUI es una herramienta de gran alcance diseñada para ayudar en la prueba y el
desarrollo de aplicaciones. Permite efectuar el testeo de la web, con docenas de
características, incluyendo una interfaz simple, fácil e intuitiva. Permite la utilización de
métodos de captura y repetición, siendo una herramienta de gran ayuda en la realización
de pruebas de carga de gran alcance, informes detallados, gráficos, etc...
SoapUI trae embebido el navegador Internet Explorer de Microsoft, permitiendo la
monitorización y el control de las acciones que en él se producen.
Esto permite:
Realizar capturas de los parámetros del cgi, las páginas y los framesets solicitados.
Modificar capturas y poder volverlas a ejecutar en cualquier momento sin necesidad de
volver a ejecutarlas.
Grabar las capturas como scripts y poderlas compartir dentro del entorno de trabajo.
Capturar la estadística del funcionamiento mientras se ejecuta una prueba.
Realiar pruebas de regresión de áreas enteras de sitios web complejos en un solo clic.
Se va a descargar un trial por dos semanas
http://smartbear.com/product/soapui/soapui-ng/free-trial/
Vaya a su correo
Abrir en Mis Documentos
Vaya a la siguiente URL
http://support.smartbear.com/downloads/readyapi/
MOMENTO INSTALACIÓN MySQL Server
Hacer uso del Taller Como instalar MySQL Server 5.5 para instalar el MySQL Server si
en la maquina no ha sido instalado este servidor.
Haciendo uso de MySQL command Line
Es una interfaz de línea de comandos para los usuarios finales gestionar los objetos de
datos de usuario. “Mysql” tiene las siguientes características principales:
“Mysql” es la interfaz de línea de comandos. No se trata de una interfaz gráfica de
usuario (GUI).
“Mysql” soporta todos los estándares SQL Data Definition Language (DDL) para el
servidor de comandos para ejecutar.
“Mysql” apoya todos los estándares SQL Lenguaje de manipulación de datos
(DML) instrucciones al servidor a ejecutar.
“Mysql” apoya muchas de no SQL comandos “mysql” se ejecutará por sí mismo.
“Mysql” proporciona acceso al sistema de ayuda del lado del servidor.
“Mysql” permite que los archivos de comandos que se ejecuta en un modo por
lotes.
“Mysql” permite salida de la consulta para tener el formato de las tablas HTML.
“Mysql” permite salida de la consulta para tener el formato de elementos XML.
Se ejecuta de la siguiente manera:
Pasaporte root
Se inicia sesión.
DROP DATABASE IF EXISTS `facturar`;
CREATE DATABASE `facturar`;
USE `facturar`;
CREATE TABLE cliente
(
idcliente BIGINT( 10 ) NOT NULL DEFAULT 1 ,
nomcliente VARCHAR( 30 ) NOT NULL ,
telcliente BIGINT( 10 ) NOT NULL ,
domcliente VARCHAR( 30 ) NOT NULL ,
PRIMARY KEY ( idcliente ) ) ENGINE = InnoDB ;
CREATE TABLE factura
(
idfactura BIGINT( 6 ) NOT NULL,
idcliente BIGINT( 10) NOT NULL,
cantidad BIGINT( 6 ),
PRIMARY KEY(idfactura),
INDEX (idcliente),
FOREIGN KEY (idcliente) REFERENCES cliente(idcliente))
ENGINE = InnoDB ;
select * from cliente;
SHOW VARIABLES WHERE Variable_name IN ('hostname','port');
describe factura;
select * from factura;
Copiar y pegar este codigo
Inserte un registro en cliente:
MOMENTO DESCARGA DE MYSQL CONECTOR
Ir a la direccion http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.26
Guardar el conector en mis documentos
MOMENTO REGISTRO DEL SERVIDOR MySQL
Ejecute NetBeans
Botón Derecho del Ratón sobre Databases. Seleccione New Connection
Seleccione MySQL(Connector/J driver). Pulse boton next
Diligenciar los campos:
Host: localhost
Puerto:3307
Base de Datos: facturar
User: root
Password: root
Pulsar el Botón Finish
Aparece la conexión MySQL
MOMENTO CONEXIÓN A LAS BASE DE DATOS MySQL
Seleccionar la opción
Botón Derecho del Ratón. Seleccione la opción Connect (si está habilitada)
Password: root. Pulsar el Botón OK
Botón Derecho del Ratón. Seleccione la opción properties(propiedades)
Aparecen las propiedades, definidas en el pool de conexión. Pulsar botón close (cerrar)
MOMENTO CREACION DE APLICACIÓN SERVIDOR (FACTURAWEB)
1. New Project
2. Java Web>>Web Application>>Boton Next
3. Nombre del Proyecto: FacturaWeb. Se pulsa el Boton Next
4.
Se pulsa el Boton Finish. Se ha seleccionado por defecto un contenedor o servidor
GlassFish
ADICIONAR ECLIPSELINK (JPA2.1)
Sobre el paquete libreries pulsar el botón derecho del mouse >>Add Library
Un clic sobre EclipseLink (JPA2.1) y se pulsa el botón Add Library
Aparecen los paquetes asociados a la librería
CREACION DE PAQUETE DE CLASES
Se debe crear un paquete con el mismo nombre del proyecto.
Sobre Source Packages>>New>>Java Package
Nombre Paquete: FacturaWeb. Pulsar Finish
ESTABLECER LA CONEXIÓN DESDE RECURSOS Y CONEXIONES JDBC
Nodo Web Pages>>Mouse Derecho >>New>>Other>>Glasfish>>JDBC Connection Pool
Pulsar Boton Next
Nombre de la Conexión: facturar
Extracción desde la conexión existente:
Se pulsa botón Next
Se verifica la informacion. Botón Finish
Nodo Web Pages>>Mouse Derecho>>New>>Other>>Glasfish>>JDBC Resource
Botón Next
Conexión Pool:: facturar
Nombre JNDI: jdbc/facturaweb
Botón Finish
Seleccionar y abrir sun-resources.xml del Nodo Server Resources
Se especifica que existe un jndi (jndi-name="jdbc/facturaweb") llamado jdbc/facturaweb a
partir de una conexión(pool-name="facturar") llamada facturar
ACTUALIZAR web.xml
Abrir el archivo web.xml de la carpeta WEB-INF
Sino existe entonces sobre WEB-INF>>New>>
Si la opcion no ha sido adicionada entonces
sobre WEB-INF pulsar boton derecho del mouse>>New>>Other>>Web>>
Pulsar el boton Finish
De clic sobre web.xml
Colocar la siguiente referencia de ambiente:
<resource-env-ref>
<description>Object factory JPA</description>
<resource-env-ref-name>UserTransaction</resource-env-ref-name>
<resource-env-ref-type>javax.transaction.UserTransaction</resource-env-ref-type>
</resource-env-ref>
Sobre el proyecto FacturaWeb>>Mouse derecho>>Deploy
CREACIÓN DE LA ENTIDAD CLIENTE
La entidad debe representar la tabla cliente:
Mouse derecho sobre Paquete FacturaWeb>>New>>Entity Classes from Database
Seleccione la tabla cliente y despues
El asistente se ocupo de crear la clase entidad Cliente capaz de realizar el mapeo objeto-
relacional en la base de datos Facturar
Se verifica la carpeta Configuration Files aparece el archivo persistencia.xml
Desmarcar
Pulsar
persistence-unit, atributo name: define una unidad de persistencia, es obligatorio darle un
nombre, para poder crear un EntityManager. El EntityManager es el encargado de
manejar la persistencia de los datos.
provider: aquí indicamos si se desea usar Hibernate o no como implementación de JPA.
En esta practica se selecciona el proveedor eclipse
jta-data-source; fuente de datos. Debe existir una etiqueta jta-data-source por cada clase
que queramos persistir, es decir, una por cada entidad que formará nuestra unidad de
persistencia.
CREACION DEL CONTROLADOR DE CLIENTE
Sobre el paquete FacturaWeb>>New>>Other>>Persistence>>JPA Controller From Entity
Classes. Boton Next
SEGUNDO DEPLOY O CREAR UNA ESTRUCTURA BASE
Sobre el proyecto FacturaWeb>>Mouse derecho>>Deploy
CREACION DEL LISTENER DEL SERVIDOR
Sobre el paquete FacturaWeb>>Mouse Derecho>>Other>>Web>>Web Application
Listener, Boton Next
Nombre de Clase: FacturaListenerWeb. Paquete: FacturaWeb.Chequear todas las
interfaces a implementar
Boton Finish
Hacer click sobre web.xml
Reemplazar este archivo (Facturaweb) por el siguiente codigo:
package FacturaWeb;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class FacturaListenerWeb implements ServletContextListener,
ServletContextAttributeListener, HttpSessionListener, HttpSessionAttributeListener,
ServletRequestListener, ServletRequestAttributeListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("Contexto Inicializado");
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("Contexto Eliminado");
}
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
System.out.println("Atributo Adicionado");
}
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
System.out.println("Atributo Eliminado");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent arg0) {
System.out.println("Atributo Reemplazada");
}
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("Sesion Creada");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("Sesion Eliminada");
}
@Override
public void attributeAdded(HttpSessionBindingEvent event) {
System.out.println("Atributo Adicionada");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
System.out.println("Atributo Borrado");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
System.out.println("Atributo Reemplazado");
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("Request Eliminado");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("Request Inicializado");
}
@Override
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("Atributo Adicionado en Request");
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("Atributo Eliminado en Request");
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("Atributo Reemplazado en Request");
}
}
CREACION WEB SERVICES
Ahora, se procede a crear el Web Service
Sobre el Nombre de la aplicación (FacturaWeb) pulse el boton derecho del mouse
>>new>>web service
Nombre de Servicio Web: FacturaWS y Package:FacturaWeb. Se pulsa la tecla Finish.
Se cheque Se pulsa boton Finish.
Aparece dentro del Arbol del proyecto la hoja o estructura del Web Service. Se ha creado
entonces exitosamente el Web Services.
Se hace click sobre Web Services y luego otro click sobre Boton Design
Seleccione la operación hello y pulse el boton Remove Operation .
Pulsar el Boton Yes
Se debe tener en cuenta para las operaciones crud los atributos de la entidad Cliente
Pulsar el boton
Colocar en las respectivas casillas:
Name: consulta
Return Type: java.lang.String
Ahora, pulsar el boton Add en la pestaña Parameters para la adicion de un
parametro. En el caso de la practica es necesario crear un parametro cedula de tipo Long
Pulsar el Boton OK
Se ha creado el Servicio Web con la operación consulta.
Entonces, aparece en el arbol de la aplicación la operación consulta:String como Web
Services FacturaWS.
Pulse el Boton
Name: adicion
Boton en parameter
Pulsar Boton OK
Ahora, seleccionamos el Tab Source
Se adiciona los siguientes import:
import javax.transaction.UserTransaction;
import javax.ejb.SessionContext;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.persistence.*;
import javax.persistence.EntityManagerFactory;
Entre public class FacturaWS y @WebMethod(operationName = "consulta") coloque:
ClienteJpaController ayuda;
UserTransaction usuario;
Cliente cliente=null;
SessionContext contexto;
Reemplace los metodos CRUD por:
@WebMethod(operationName = "consulta")
public String consulta(@WebParam(name = "cedula") long cedula) {
inicio();
cliente=ayuda.findCliente(cedula);
if(cliente==null)
return "No Existe cedula";
else
{
String cadena=" ";
cadena=cadena+"Cedula:"+cliente.getIdcliente()+",";
cadena=cadena+"Nombre:"+cliente.getNomcliente()+",";
cadena=cadena+"Domicilio:"+cliente.getDomcliente()+",";
cadena=cadena+"Telefono:"+cliente.getTelcliente()+";";
return cadena;
}
}
@WebMethod(operationName = "adicion")
public String adicion(@WebParam(name = "cedula") long cedula, @WebParam(name =
"nombre") String nombre, @WebParam(name = "telefono") long telefono,
@WebParam(name = "domicilio") String domicilio) {
inicio();
cliente=ayuda.findCliente(cedula);
if(cliente!=null)
return "Existe cedula";
else
{
try
{
cliente=new Cliente(cedula,nombre,telefono,domicilio);
ayuda.create(cliente);
}
catch(Exception e){}
return "Exito en adicion";
}
}
void inicio()
{
try {
InitialContext ic = new InitialContext();
contexto =(SessionContext) ic.lookup("java:comp/env/sessionContext");
usuario=contexto.getUserTransaction();
}
catch(NamingException | IllegalStateException e){}
EntityManagerFactory factoria;
factoria = Persistence.createEntityManagerFactory("FacturaWebPU");
ayuda = new ClienteJpaController(usuario,factoria);
}
El servicio el siguiente:
Operaciones crud(adicion, consulta) en la tabla cliente
El codigo completo es el siguiente;
package FacturaWeb;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.ejb.Stateless;
import javax.transaction.UserTransaction;
import javax.ejb.SessionContext;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.persistence.*;
import javax.persistence.EntityManagerFactory;
@WebService(serviceName = "FacturaWS")
@Stateless()
public class FacturaWS {
ClienteJpaController ayuda;
UserTransaction usuario;
Cliente cliente=null;
SessionContext contexto;
@WebMethod(operationName = "consulta")
public String consulta(@WebParam(name = "cedula") long cedula) {
inicio();
cliente=ayuda.findCliente(cedula);
if(cliente==null)
return "No Existe cedula";
else
{
String cadena=" ";
cadena=cadena+"Cedula:"+cliente.getIdcliente()+",";
cadena=cadena+"Nombre:"+cliente.getNomcliente()+",";
cadena=cadena+"Domicilio:"+cliente.getDomcliente()+",";
cadena=cadena+"Telefono:"+cliente.getTelcliente()+";";
return cadena;
}
}
@WebMethod(operationName = "adicion")
public String adicion(@WebParam(name = "cedula") long cedula, @WebParam(name =
"nombre") String nombre, @WebParam(name = "telefono") long telefono,
@WebParam(name = "domicilio") String domicilio) {
inicio();
cliente=ayuda.findCliente(cedula);
if(cliente!=null)
return "Existe cedula";
else
{
try
{
cliente=new Cliente(cedula,nombre,telefono,domicilio);
ayuda.create(cliente);
}
catch(Exception e){}
return "Exito en adicion";
}
}
void inicio()
{
try {
InitialContext ic = new InitialContext();
contexto =(SessionContext) ic.lookup("java:comp/env/sessionContext");
usuario=contexto.getUserTransaction();
}
catch(NamingException | IllegalStateException e){}
EntityManagerFactory factoria;
factoria = Persistence.createEntityManagerFactory("FacturaWebPU");
ayuda = new ClienteJpaController(usuario,factoria);
}
}
TESTEAR SI CUMPLE EL WEB SERVICE
Restart el Glass Fish
Sobre el proyecto FacturaWeb>>Mouse derecho>>Deploy
De un click sobre el servicio FacturaWS y pulse el boton derecho. Seleccione Test Web
Service.
Adicionar a:1212, James Rodriguez,1212,Madrid
En el servicio consulta se coloca: 1818
Ejecutar Servidor
Run para ejecutar la aplicación servidor
SOAPUI
Principales funcionalidades
Las principales funcionalidades que aporta la herramienta soapUI son:
Incorpora un monitor SOAP para capturar y analizar el tráfico.
Inspecciona Web Services WSDL y REST (tanto WADL como WADLess) y los visualiza
jerárquicamente.
Genera automáticamente los tests y las peticiones SOAP de las operaciones definidas en
el descriptor WSDL o WADL.
Permite verificar la conformidad de un WSDL según los estándares WS-I*.
Opcionalmente, puede utilizarse el scripting de Groovy para que el comportamiento de los
tests sea dinámico.
Soporta varios métodos de autentificación: Basic, Digest, WS-Security y NTLM Web
Service.
Soporta diferentes tecnologías de ficheros adjuntos: MTOM, SOAP con Attachments,
ficheros Inline para WSDL y MIME Attachments para REST.
Verificación del contenido de mensajes con Xpath y Xquery.
Versatilidad en la configuración del test de carga, pudiendo indicar el límite (en tiempo o
peticiones), el número de threads de ataque, el método HTTP de la petición (POST,
GET ...).
Permite exponer Web Services de simulación (o mocking) con el contenido de respuesta
personalizable.
Pruebas Funcionales
SoapUI soporta pruebas funcionales de Servicios Web suministrando un caso de prueba
con un número de pasos que pueden ser ejecutados en secuencia. En la actualidad, hay
seis tipos de pasos que proporcionan muchas posibilidades de prueba. Los casos de
prueba están organizados en un grupo de pruebas y, en un mismo proyecto, se pueden
crear varios grupos de pruebas.
Las pruebas funcionales, en soapUI, se pueden usar para una variedad de propósitos:
Unidad de prueba: valida que cada operación del Servicio Web funciona como se indica.
Pruebas de compatibilidad: valida que el resultado devuelto por el Servicio Web es
compatible con su definición.
Prueba de procesos: valida que una secuencia de invocaciones de Servicios Web ejecuta
un proceso de negocio requerido.
Pruebas guiadas por datos: valida que cualquiera de los anteriores funciona como
requerimiento de datos de entrada procedentes de fuentes externas (por ejemplo, una
base de datos u otro servicio Web)
Buenas prácticas y recomendaciones de uso
Es fácil y rápido crear, ejecutar y guardar los casos de prueba funcional requeridos. Se
pueden adaptar y expandir en cualquier momento.
Es fácil hacer aserciones. También con expresiones regulares.
Permite usar mocks para simular el comportamiento de los WebSerivces que aún no
estén construidos.
Es de licencia opensource y por lo tanto gratuito.
Puede ser integrado con herramientas de diversa utilidad.
Pulse Si
Crear un nuevo proyecto SoapUI para el proyecto a probar, configurando la url que
contiene el WSDL del proyecto.
Nombre de Proyecto: FacturaWeb
Initial WSDL: http://localhost:8080/FacturaWS/FacturaWS?WSDL
Pulsar
Pulsar
Seleccionar metodo adicion>>request. Cambiar todos los valores por:
Pulsar el boton de ejecucion
Ahora, Consulta>>Request 1>>1818
Pulsar para
adicionar un test.
Esta herramienta maneja el concepto de TestSuite, TestCase, TestStep, como lo manejan
JUnit, JMeter, etc. Un TestSuite sirve para contener un número arbitrario de casos de
prueba (TestCases) que pueden ejecutarse secuencialmente o en paralelo. Los TestSteps
sirven para ejecutar TestCases secuencialmente. Una vez creadas las peticiones, es
posible generar una TestSuite y así automatizar las pruebas funcionales, con el valor
agregado de tener pruebas de regresión.
Pulse
Pulsar cuyo objetivo es adicionar verificaciones. Este verificacion de un texto consulta
response
Se abre las Assertion
Pulsar
Leonel Messi reside en Barcelona más no en Madrid
Por cada TestCase es posible hacer validaciones automáticas de los resultados.
Entonces, por cada petición, se verifica si la respuesta es un fallo, o no lo es, o contiene
un determinado valor, o no lo contiene. Es una buena práctica, en el manejo de web
services, que los errores inesperado del sistema (Runtime Exception) viajen en un tag
“fault” distinto a una respuesta normal del servicio.
Se va realizar un test de propiedades en el metodo adicion.
Habra la aplicación Microsoft excel
Diligencie
Los nombres de los campos alfabeticamente
Guarde como clientes.xls en Mis Documentos
Sobre adicion TestCase>>Mouse Derecho>>Add Step>>Properties
Adicion Propiedad
Pulse y despues
Pulse Si
Diligencie asi y pulse Ejecucion
De doble click sobre adicion
Completa con Get Data
Hacer doble click
Hacer doble click sobre
Sobre adicion TestCase>>Mouse Derecho>>Add Step>>Property Transfer
Pulse para adicionar propiedad
Adicione las propiedades:
nombre
telefono
domicilio
Cambiar
Pulsar Ejecucion . De click sobre Undock
Pulsar Ejecucion
Pulsar Ejecucion
Pulsar Ejecucion
Sobre adicion TestCase>>Mouse Derecho>>Show Test Case Editor
. Ejecucion