lunes, 5 de noviembre de 2012

JMeter: Creando un plan de pruebas para un servicio web (WebService/SOAP).




Cada vez que escribimos una porción de código fuente, deberíamos escribir pruebas unitarias para por lo menos asegurar un correcto funcionamiento independiente de dicho código (ó al menos tratar de  intentarlo :-]). Bueno, pero el fin de esta pequeña y rápida en entrada, esta pensada para comentar un poco sobre una herramienta que nos permite hacer varios tipos de pruebas, como unitarias, funcionales, incluso simulación de carga y mucho más: JMeter.

Siempre he quediro escribir sobre JMeter, la cual, para los que nos dedicamos al desarrrollo de software (y algunas otras áreas relacionadas), es una gran herramienta para hacer esas pruebas funcionales o incluso para hacer pruebas de estres de servidores, entre otras cosas.

Para dar un ejemplo, vamos a ver como sería el plan de pruebas para un servicio web.

Vamos a identificar este plan como "MisPruebas", así que lo modificamos en el campo Nombre,



después se debería crear:

1.- Grupo de hilos.
Para cualquier plan de pruebas debemos iniciar creando un grupo de hilos, "MisPruebas > Añadir > Hilos (Usuarios) > Grupo de Hilos". Como su nombre lo indica, aquí se configura lo relacionado con la ejecución de los hilos:

  • Número de hilos a ejecutar.
  • Periodo de subida. Esto indica cuanto es el tiempo máximo en el cual se deben ejecutar todos los hilos configurados.
  • El tiempo de inicio y fin de ejecución. En este ejemplo, no se habilita.

2.- Controlador simple.
Para poder envíar peticiones a un servidor, debemos agregar un "Controlador Simple", el cual esperará por la respuesta, "Grupo de Hilos > Añadir > Controlador Lógico > Controlador Simple". Con el se pueden hacer peticiones de:

  • FTP Request
  • HTTP Request
  • JDBC Request
  • Java object request
  • LDAP Request
  • SOAP/XML-RPC Request
  • WebService (SOAP) Request

Se puede agregar los controladores que sean necesarios.



3.- Muestreador.
Este elemento es en sí, es el que ejecuta la petición. Para crearlo se debe dar primero click derecho sobre el nodo "Controlador Simple > Añadir, > Muestreador > Petición WebsService(SOAP)". Dentro de este nodo veremos todos los parámetros que podemos pasar al servicio para configurar la petición.




Antes nos aseguramos de que el webservices este disponible:


Después, se copia su URL y se pega en el campo "URL del WSDL" que esta dentro de la sección de "WSDL Helper"


luego damos click en el botón "Cargar WSDL". Si todo funcionó correctamente, en el combo box de "Web Methods", veremos todas las operaciones disponibles del servicio. Continuamos con un click en el botón de "Configurar", esto rellenará los campos del "Protocolo,  Nombre del Servidor o IP,  Puerto y la Ruta".


Por último, pegamos en el área de texto los parámetros del mensaje, que habrá de enviarse al servicio, si no estas seguro de como construir esta parte, una opción es tener a la mano "SoapUI" , el cual cuando cargan un WSDL, crea automaticamente la estructura del mensaje, para introducir directamente los parámetros. Abajo se muestra un ejemplo de un mensaje.



4.- Captura de resultados.
Para este punto podemos hacer la petición, pero no veriamos ningún resultado, al ejecutarlo parecería que no hace nada, por lo tanto, hay que agregar un "Recpetor (Listener)", el cual va a recibir todas las respuestas del servicio. Hay varios tipos ó formas de presentar la información de respuesta, en este ejemplo, solo usamos el "Árbol de Resultados", en el cual podremos ver dentro de todo, información como:

  • Datos de la respuesta.
  • Tiempo que tardo en llegar la respuesta.
  • Algunos códigos de errores.
  • Tamaño en bytes de la respuesta.
  • Información de la petición.

Hay varias formas en la cual se puede presentar la información:

  • HTML
  • HTML (download resources)
  • JSON
  • Regexp Tester
  • Text
  • XML
para agregar el árbol vamos a "MisPruebas > Añadir > Receptor > Ver Árbol de Resultados".




por defualt esta como texto, de esta forma veremos la información un poco revuelta o sin sentido:


ahora, si lo cambiamos a XML en el combo box que esta abajo por la mitadad, veremos la información con un estilo de árbol.



5.- Configuración de Data Set (Leyendo multiples valores).
Hasta el paso anterior, podemos ejecutar la prueba, y podemos configurar que se haga muchas veces la misma prueba, solo que aún existe un detalle, el cual es, que solo podemos hacer la prueba con los mismos parámetros, en este caso, seria el mismo usuario, password y las dos fechas.

Entonces para hacerlo más interesante, crearemos un nuevo elemento de configuración, el cual nos permitira leer los parámetros de manera dinámica desde un archivo, con esto obetendremos que en cada petición los parámetros sean distintos. Para crearlo, damos click derecho sobre "Petición WebService(SOAP) > Añadir > Elemento de Configuración > Configuración del CSV Data Set", 


dentro de este elemento, debemos indicar:

  • donde esta el archivo que va a leer
  • decirle como se van a llamar las variables, debemos tomar en cuanta que el número de variables debe ser igual al número de columnas que se forma en una fila, en este caso, hay cuatro variables ("login, password, fecha_inicial, fecha_final"). 
  • indicar cual es el separador de los valores dentro del archivo, en este caso se respeta la coma.


Para que esto funcione, debemos cambiar los valores del mensaje, por estos parámetros, quedando de la siguiente forma:


Con esto ya tenemos un plan de ejecución para una prueba funcional y/o de estres :-].

Descarga el plan de pruebas, aquí.
Descarga el excel aqui.

jueves, 10 de mayo de 2012

Conexión vía SSH sin password/passphrase

La intención es mostrar como acceder a los servidores sin introducir el passphrase para copia de archivos de respaldo, sincronizar repositorios de código fuente (como es mi caso con mercurial), en general, para realizar alguna tarea administrativa de manera remota.

Lo primero que se tiene que realizar es, generar un par de llaves RSA, una pública y una privada en el equipo que usaremos para conectarnos, esto se logra usando ssh-keygen.
Al momento que solicite el passphrase solo daremos "enter", para dejarlo en blanco.

$ ssh-keygen -t rsa
  Generating public/private rsa key pair.
  Enter file in which to save the key (/Users/user/.ssh/id_rsa): 
  Enter passphrase (empty for no passphrase): 
  Enter same passphrase again: 
  Your identification has been saved in /Users/user/.ssh/id_rsa.
  Your public key has been saved in /Users/user/.ssh/id_rsa.pub.
  The key fingerprint is:
  cf:8a:5c:67:1a:2a:99:82:21:3d:2e:bd:3d:13:bc:d4 user@equipo.local
  The key's randomart image is:
  +--[ RSA 2048]----+
  |                 |
  |                 |
  |                 |
  |                 |
  | . . .  S        |
  |o o + E  o       |
  |.= o =  o =      |
  |o +.B. + *       |
  | ..o.++ o        |
  +-----------------+

Las llaves son almacenadas en /Users/user/.ssh/, la publica es id_rsa.pub y la privada id_rsa.

Como segundo paso debemos copiar el contenido de la llave pública que hemos creado en el equipo local y agregarla en el archivo ~/.ssh/authorized_keys del usuario en el servidor a donde nos estaremos conectando.

sábado, 11 de febrero de 2012

QuickStart: Spring MVC


Este tutorial, pretende mostrar lo fácil que es el uso de Spring MVC.

Requerimientos:
  • Netbeans
  • Maven 3
  • Spring 3.x
  • Glassfish Server 3.x

Creación del proyecto.

Creamos un nuevo proyecto web con maven.




Agregamos las dependencias de Spring al archivo de configuración (pom.xml) de maven , con una propiedad para manejar la versión.

        ${project.build.directory}/endorsed
        UTF-8
        3.1.0.RELEASE
    

      
        
            org.springframework
            spring-core
            ${spring.version}
        
 
        
            org.springframework
            spring-webmvc
            ${spring.version}
        
 
        
            javax
            javaee-web-api
            6.0
            provided
        
    
    ...
Con la propiedad agregada para la versión de las dependencias de Spring se puede modificar fácilmente cuando se quiera actualizar a una más nueva.

Configuración de Spring.
  • Crearemos un archivo llamado spring-mvc-servlet.xml dentro de src/main/webapp/WEB-INF, para esto, agregamos primero la carpeta WEB-INF y dentro creamos dicho archivo.
  • Indicaremos en que paquete Spring buscará los controladores.
  • Indicaremos como se deben resolver las vistas, para asociarlas a los controladores.
Creación de la carpeta.

Después de crear la carpeta WEB-INF, dentro creamos el archivo spring-mvc-servlet.xml.


En la linea <context:component-scan base-package="net.jurasec.examples.quickstart" />, indicamos que dentro de ese paquete estarán nuestros controladores.

El bean "viewResolver", resuelve las llamadas a las vistas desde los controladores de la siguiente forma: prefijo + "nombre_vista" + sufijo.

Integrando Spring a la aplicación web.

  • Creamos el archivo de configuración de la aplicación web (web.xml) dentro de src/main/webapp/WEB-INF.

    
        contextConfigLocation
        /WEB-INF/spring-mvc-servlet.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    
    
        spring-mvc
        org.springframework.web.servlet.DispatcherServlet
        1
    
    
        spring-mvc
        /
    
    
        
            30
        
    
    
        index.jsp
    


Creamos la carpeta jsp, para crear dentro las vistas.
  • Creamos una carpeta llamada jsp dentro de WEB-INF y creamos un archivo *.jsp llamado welcome.jsp

La "variable" ${mensaje}, será sustituida por el valor que sea asignado al modelo, desde el controlador.


El controlador y la configuración de la vista.


package net.jurasec.examples.quickstart;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/start")
public class MainController {

    @RequestMapping(method = RequestMethod.GET)
    public String start(ModelMap model) {

        model.addAttribute("mensaje", "Iniciando con Spring 3 MVC...");
        return "welcome";

    }
}

Recordemos que en el archivo de configuración de Spring, indicamos que el paquete "net.jurasec.examples.quickstart" será analizado para buscar clases "anotadas" como controladores, para hacerlo agregamos @Controller. Después de decirle a Spring que esta clase es un controlador, debemos indicar cual será la URL a la cual responderá, esto se hace con @RequestMappin con la cual le decimos que cuando sea invocada la url "http://www.miurl.net/contexto/start" Spring recibirá la petición y la despachará hacia esta clase y dependiendo del tipo de metodo de la petición, la clase reaccionara. Aqui vemos que solo respondera a las peticiones de tipo GET, por medio del metodo start. El metodo start agrega un atributo(mensaje) al modelo, el cual será leido en la vista, finalmente regresa el nombre de la vista, que según la configuración del bean InternalResourceViewResolver será en /WEB-INF/jsp/welcome.jsp

El resultado final es:



Descarga el proyecto de Netbeans.

Ebooks y tutoriales gratis de Java.

Sabemos que la mejor manera de aprender algo, es leer un buen libro, aunque aveces necesitamos algún ejemplo rápido y lo buscamos en foros, blogs y demás. 

Si eres de los que esta buscando la opción del libro, puede que alguno de estos te sirva:

Thinking in Java, 3rd Edition.



Descargar

Excelente libro, con ejemplos incluidos.
Autor : Bruce Eckel

Introduction to Programming Using Java 6th. Edition.



Este libro se dirige principalmente a los programadores principiantes, aunque también podría ser útil para los programadores experimentados que quieren aprender algo de Java. Ciertamente no es la intención de proporcionar una cobertura completa del lenguaje Java.
Autor: David J. Eck

The Java Language Specification, Third Edition.



Es la referencia técnica definitiva para el lenguaje de programación Java. Si quieres saber el significado preciso de las construcciones del lenguaje, esta es la fuente para usted.
El libro ofrece una cobertura completa, exacta y detallada del lenguaje de programación Java. 
Autores: Los inventores de esta tecnología

The Java Tutorial 4th Edition.



Los tutoriales de Java son guías prácticas para los programadores que deseen utilizar el lenguaje de programación Java para crear aplicaciones. Ellos incluyen a cientos de completos,ejemplos de trabajo, y decenas de lecciones.
Autores: Sharon Zakhour, Scott Hommel, Jacob Royal, Isaac Rabinovitch, Tom Risser, Mark Hoeber

Blue Pelican Java.



Es un libro de ciencias de la computación un tanto inusual. La mayoría de los textos de ciencias de la computación se iniciará con una sección sobre la historia de las computadoras y sigue con una serie de definiciones que son sólo "muchas palabras" para el estudiante promedio. El enfoque aquí es dar primero al estudiante un poco de experiencia para manejar las definiciones que vienen después. La práctica habitual de la introducción de clases y objetos se difiere hasta que el estudiante tiene una sólida comprensión de los fundamentos (bucles, estructuras de decisión, etc.) De este modo, el estudiante que comienza, no se siente abrumado por la introducción simultánea de los conceptos de Programación Orientada a Objetos y sus fundamentos. El libro incluye un montón de ejercicios, proyectos y un apéndice enorme.
Autor : Charles E. Cook

Core Servlets and JavaServer Pages, Second Edition.



Una visión genera de Servlets y de la tecnología JSP.
Autores: Marty Hall y Larry Brown


How to Think Like a Computer Scientist.




Descargar

Es una introducción a la programación en Java para los principiantes. Es apto para cualquier persona que quiera aprender Java.
Autor: Allen B. Downey