Testeando Web Services SOAP y REST
TEST Servicio Web SOAP utilizando WCF Test Client
En esta ocasion probaremos el servicio “Clientes” que desarrollamos en nuestro primer tema (Servicio Web SOAP), para lo cual utilizaremos el WCF Test Client.
Utilizando el explorador de Windows ubiquemos la ruta donde se encuentra instalado el Microsoft Visual Studio y sigamos la ruta que se indica en la siguiente imagen:
Dar doble clic en WcfTestClient, en la ventana que aparece, seleccionar el menú “Archivo” y escoger la opción “Agregar Servicio”, tal como se muestra en la figura adjunta.
Luego colocar la ruta del servicio que queremos probar y dar clic en “Aceptar”.
Nos aparecerá una ventana como se puede apreciar en la figura a continuación, donde se nos presentan los métodos que tiene disponibles el servicio.
Para empezar a probar cada uno de ellos daremos doble clic sobre el método a probar, y en la parte superior derecha aparecerán los datos de entrada (Solicitud), luego dar clic en el botón “Invocar”.
La respuesta a nuestra solicitud se mostrara en la parte inferior derecha.
De igual manera haremos con los demás métodos.
Podemos ver la respuesta en formato XML haciendo clic en la pestaña XML ubicada en la parte inferior.
TEST Servicio Web SOAP utilizando soapUI
Otra forma de probar nuestro servicio SOAP es utilizando SoapUI, el cual podemos descargarlo desde
aquí.
La instalación es sencilla, solo seguir los siguientes pasos, tal como se muestra en las siguientes imágenes:
Seleccionar el menú “File” y escoger la opción “New soapUI Project”, tal como se muestra en la figura adjunta.
Luego colocar la ruta del servicio que queremos probar y dar clic en “OK”.
Seleccionar el método a probar y dar doble clic en “Request 1”, luego al lado derecho aparecerá una ventana como se muestra en la imagen.
Colocar los datos que queremos ingresar y dar clic en el icono de “play” color verde ubicado en la parte superior.
Realizando Pruebas Unitarias para probar Servicio Web SOAP
También podemos realizar nuestras propias pruebas unitarias para probar un Servicio Web SOAP.
Siguiendo el ejemplo de “MiTienda”, agregaremos un proyecto “Prueba” (TEST) a la solución que tenemos.
Ahora agregaremos la referencia al servicio. Dar clic derecho en el proyecto “ClienteTEST” y escoger la opción “Agregar referencia de servicio”.
Colocar la dirección del servicio, dar clic en el botón “IR” y seleccionar el contrato.
Luego colocar un nombre y dar clic en “Aceptar”.
Agregar a nuestro proyecto “ClientesTEST” la clase “Cliente.cs”, con el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ClientesTEST
{
public class Cliente
{
public int Co_Cliente { get; set; }
public string No_Cliente { get; set; }
public string Nu_Documento { get; set; }
public string Tx_Direccion { get; set; }
public Distrito Distrito { get; set; }
}
}
Agregar a nuestro proyecto “ClientesTEST” la clase “Distrito.cs”, con el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ClientesTEST
{
public class Distrito
{
public int Co_Distrito { get; set; }
public string No_Distrito { get; set; }
}
}
Cambiar de nombre al archivo “UnitTest1.cs” por “ClientesTEST.cs”.
Editar y colocar el siguiente código:
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace ClientesTEST
{
[TestClass]
public class ClientesTest
{
[TestMethod]
public void TestCrearCliente()
{
// 1. Instanciar el objeto a probar
ClientesWS.ClientesClient proxy = new ClientesWS.ClientesClient();
string No_Cliente = "Jorge Risco";
string Nu_Documento = "70478704";
string Tx_Direccion = "Av. Primavera 4578";
Distrito Distrito = new Distrito()
{
Co_Distrito = 1,
No_Distrito = "Santiago de Surco"
};
// 2. Invocar el metodo a probar del objeto
ClientesWS.Cliente clienteCreado = proxy.CrearCliente(No_Cliente, Nu_Documento, Tx_Direccion, Distrito.Co_Distrito);
// 3. Validacion del resultado esperado
Assert.AreEqual(clienteCreado.No_Cliente, "Jorge Risco");
Assert.AreEqual(clienteCreado.Nu_Documento, "70478704");
Assert.AreEqual(clienteCreado.Tx_Direccion, "Av. Primavera 4578");
Assert.AreEqual(clienteCreado.Distrito.Co_Distrito, 1);
}
[TestMethod]
public void TestObtenerCliente()
{
// 1. Instanciar el objeto a probar
ClientesWS.ClientesClient proxy = new ClientesWS.ClientesClient();
// 2. Invocar el metodo a probar del objeto
ClientesWS.Cliente clienteObtenido = proxy.ObtenerCliente(3);
// 3. Validacion del resultado esperado
Assert.AreEqual(clienteObtenido.No_Cliente, "Jorge Risco");
Assert.AreEqual(clienteObtenido.Nu_Documento, "70478704");
Assert.AreEqual(clienteObtenido.Tx_Direccion, "Av. Primavera 4578");
Assert.AreEqual(clienteObtenido.Distrito.Co_Distrito, 1);
}
[TestMethod]
public void TestModificarCliente()
{
// 1. Instanciar el objeto a probar
ClientesWS.ClientesClient proxy = new ClientesWS.ClientesClient();
int Co_Cliente = 3;
string No_Cliente = "Jorge Risco Ganoza";
string Nu_Documento = "70112233";
string Tx_Direccion = "Av. Caminos del Inca 2544";
Distrito Distrito = new Distrito()
{
Co_Distrito = 1,
No_Distrito = "Santiago de Surco"
};
// 2. Invocar el metodo a probar del objeto
ClientesWS.Cliente clienteModificado = proxy.ModificarCliente(Co_Cliente, No_Cliente, Nu_Documento, Tx_Direccion, Distrito.Co_Distrito);
// 3. Validacion del resultado esperado
Assert.AreEqual(clienteModificado.Co_Cliente, 3);
Assert.AreEqual(clienteModificado.No_Cliente, "Jorge Risco Ganoza");
Assert.AreEqual(clienteModificado.Nu_Documento, "70112233");
Assert.AreEqual(clienteModificado.Tx_Direccion, "Av. Caminos del Inca 2544");
Assert.AreEqual(clienteModificado.Distrito.Co_Distrito, 1);
}
[TestMethod]
public void TestEliminarCliente()
{
// 1. Instanciar el objeto a probar
ClientesWS.ClientesClient proxy = new ClientesWS.ClientesClient();
// 2. Invocar el metodo a probar del objeto
ClientesWS.Cliente clienteAEliminar = proxy.ObtenerCliente(1);
proxy.EliminarCliente(clienteAEliminar.Co_Cliente);
// 3. Validacion del resultado esperado
ClientesWS.Cliente clienteEliminado = proxy.ObtenerCliente(1);
Assert.IsNull(clienteEliminado);
}
[TestMethod]
public void TestListarClientes()
{
// 1. Instanciar el objeto a probar
ClientesWS.ClientesClient proxy = new ClientesWS.ClientesClient();
// 2. Invocar el metodo a probar del objeto
ICollection<ClientesWS.Cliente> listaClientes = proxy.ListarClientes();
// 3. Validacion del resultado esperado
Assert.AreEqual(listaClientes.Count, 2);
}
}
}
Para ejecutar todas las pruebas dar clic derecho sobre el nombre de la clase y escoger la opción “Ejecutar pruebas”.
En la parte inferior nos aparecerá el resultado de las pruebas, donde podremos verificar que las operaciones de nuestro servicio funcionan correctamente.
Realizando Pruebas Unitarias para probar Servicio Web REST
Siguiendo el ejemplo de “MiTienda”, agregaremos un nuevo proyecto “Prueba” (TEST) a la solución que tenemos para probar el servicio “Productos” que desarrollamos anteriormente.
Agregar a nuestro proyecto “ProductosTEST” la clase “Producto.cs”.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ProductosTEST
{
public class Producto
{
public string Co_Producto { get; set; }
public string No_Producto { get; set; }
public decimal Ss_Precio { get; set; }
public int Qt_Stock { get; set; }
}
}
Luego, dentro del proyecto “ProductosTEST”, dar clic derecho en “References” y escoger la opción “Agregar referencia”.
Elegir la opción que se muestra en la siguiente imagen:
Ahora, cambiar de nombre al archivo “UnitTest1.cs” por “ProductosTEST.cs”.
Editar y colocar el siguiente código:
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
namespace ProductosTEST
{
[TestClass]
public class ProductosTest
{
[TestMethod]
public void TestCrearProducto()
{
// Prueba de creacion de producto via HTTP POST
string postdata = "{\"No_Producto\":\"LAPTOP HP PAVILION\",\"Ss_Precio\":\"2599.99\",\"Qt_Stock\":\"150\"}";
byte[] data = Encoding.UTF8.GetBytes(postdata);
HttpWebRequest req = (HttpWebRequest)WebRequest
.Create("http://localhost:32641/Productos.svc/Productos");
req.Method = "POST";
req.ContentLength = data.Length;
req.ContentType = "application/json";
var reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
var res = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(res.GetResponseStream());
string productoJson = reader.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
Producto productoCreado = js.Deserialize<Producto>(productoJson);
Assert.AreEqual("LAPTOP HP PAVILION", productoCreado.No_Producto);
Assert.AreEqual(2599.99m, productoCreado.Ss_Precio);
Assert.AreEqual(150, productoCreado.Qt_Stock);
}
[TestMethod]
public void TestObtenerProducto()
{
// Prueba de obtencion de producto via HTTP GET
HttpWebRequest req = (HttpWebRequest)WebRequest
.Create("http://localhost:32641/Productos.svc/Productos/1");
req.Method = "GET";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(res.GetResponseStream());
string productoJson = reader.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
Producto productoObtenido = js.Deserialize<Producto>(productoJson);
Assert.AreEqual("TV LCD 32 PULG.", productoObtenido.No_Producto);
Assert.AreEqual(1199.99m, productoObtenido.Ss_Precio);
Assert.AreEqual(100, productoObtenido.Qt_Stock);
}
[TestMethod]
public void TestModificarProducto()
{
// Prueba de modificacion de producto via HTTP PUT
string postdata = "{\"Co_Producto\":\"1\",\"No_Producto\":\"TV LCD 40 PULG.\",\"Ss_Precio\":\"2699.99\",\"Qt_Stock\":\"250\"}";
byte[] data = Encoding.UTF8.GetBytes(postdata);
HttpWebRequest req = (HttpWebRequest)WebRequest
.Create("http://localhost:32641/Productos.svc/Productos");
req.Method = "PUT";
req.ContentLength = data.Length;
req.ContentType = "application/json";
var reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
var res = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(res.GetResponseStream());
string productoJson = reader.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
Producto productoModificado = js.Deserialize<Producto>(productoJson);
Assert.AreEqual("TV LCD 40 PULG.", productoModificado.No_Producto);
Assert.AreEqual(2699.99m, productoModificado.Ss_Precio);
Assert.AreEqual(250, productoModificado.Qt_Stock);
}
[TestMethod]
public void TestEliminarProducto()
{
// Prueba de eliminacion de producto via HTTP GET
HttpWebRequest req = (HttpWebRequest)WebRequest
.Create("http://localhost:32641/Productos.svc/Productos/2");
req.Method = "DELETE";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
// Prueba de obtencion de producto via HTTP GET
HttpWebRequest req2 = (HttpWebRequest)WebRequest
.Create("http://localhost:32641/Productos.svc/Productos/2");
req2.Method = "GET";
HttpWebResponse res2 = (HttpWebResponse)req2.GetResponse();
StreamReader reader2 = new StreamReader(res2.GetResponseStream());
string productoJson2 = reader2.ReadToEnd();
JavaScriptSerializer js2 = new JavaScriptSerializer();
Producto productoEliminado = js2.Deserialize<Producto>(productoJson2);
Assert.IsNull(productoEliminado);
}
[TestMethod]
public void TestListarProductos()
{
// Prueba de obtencion de producto via HTTP LIST
HttpWebRequest req = (HttpWebRequest)WebRequest
.Create("http://localhost:32641/Productos.svc/Productos");
req.Method = "GET";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(res.GetResponseStream());
string productosJson = reader.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
List<Producto> productosObtenidos = js.Deserialize<List<Producto>>(productosJson);
Assert.AreEqual(2, productosObtenidos.Count);
}
}
}
Finalmente ejecutar todas las pruebas para verificar que todas las operaciones de nuestro servicio “Productos” funcionen correctamente.
Eso es todo por ahora, espero les haya servido el tema de hoy.
Gracias !!!