20120216

JMeter : peticiones HTTP basadas en consultas a Base de Datos

Esta tarde he estado realizando unas pequeñas pruebas de integración, para comprobar el funcionamiento de un pequeño proyecto en el trabajo. Ha sido a última hora, por lo que no he tenido tiempo de investigar a fondo, así que he decidido mirarlo en casa, sin que sirva de precedente, pero sin por ello dejar de aprender ; )

La prueba consiste en acceder al sistema mediante un token. Este token está almacenado en base de datos, y tenemos una consulta para saber qué tokens son válidos. Este token se pasa por la URL de forma que se valida y luego se puede acceder a la aplicación. No se requiere mayor seguridad, es algo simple.

Así que he montado un entorno similar en mi equipo en casa.

Descripción

Vamos a realizar una prueba en la que se haga una petición HTTP con un parámetro obtenido de la base de datos.

Qué necesitamos
  • JMeter. En mi caso he descargado la última versión de aquí
  • Base de datos : en mi caso MySQL
  • Driver de la BD : hay que tener el driver jdbc en el directorio \lib de la instalación de JMeter para que éste sea capaz de conectarse.

Preparativos previos
He accedido a MySQL, he creado un usuario y un esquema para las pruebas.
He insertado varios valores de prueba en una tabla simple.
Tenemos una tabla jmeter_test1 con varios valores:




Proyecto JMeter

Debemos configurar la conexión a la base de datos.
Para ello, incluimos un elemento "Configuración de la conexión JDBC":



Es importante el nombre de la variable, en este caso jmeter_test1_jdbc_connection, ya que se usará más adelante.

Una vez configurado, debemos obtener los datos de la tabla de ejemplo. Para ello, incluimos un elemento "Petición JDBC":



En este elemento indicamos la variable definida en la configuración de la conexión.
La variable resultado jdbc_result contiene los datos que se obtengan en la consulta, que como vemos es muy simple.

Los resultados obtenidos son:
jmeter_value1
value11
value21
value31
value41

Es importante ver que la primera columna de los datos obtenidos es el nombre de la columna.Teniendo esto en cuenta, debemos definir el extractor de los datos mediante expresion regular, para obtener el primer VALOR de la consulta:





Ver tutorial sobre ER
Simulador para probar tus ER

Como vemos, obtendremos el primer elemento del listado.
El valor en "Nombre de Referencia" indica el nombre que le damos a la variable que contiene el valor obtenido.
La expresión (.+) nos obtiene cada una de las lineas del texto resultado obtenido por el elemento de petición JDBC.
Indicamos la plantilla como $1$
La coincidencia es 2, ya que la primera coincidencia es el nombre de la columna (la primera linea obtenida)
El valor por defecto "FAIL" es indicativo para las pruebas y nos indicará que ha fallado la extracción del valor buscado.


Para ver el uso, lo vamos a utilizar para hacer una petición HTTP a localhost.
Incluimos un elemento "Peticion HTTP":



Una vez lanzamos la ejecución de la prueba JMeter, obtendremos los resultados de cada petición.
Para verlos, añadimos un receptor, por ejemplo "Ver Árbol de Resultados". Al ejecutar, tendremos los resultados ahí guardados.



Vemos en la obtención de los datos usando JDBC que se obtiene la lista de valores.



Vemos en la petición HTTP que se ha usado como parámetro el primer valor obtenido. No es importante que haya fallado, sino ver la url con el parámetro q=value11, que es el que hemos obtenido de la consulta a BD.




1 comentario:

Unknown dijo...

Existen tantas herramientas para hacer pruebas de carga , detección de cuellos de botella , pruebas de rendimiento y creación de guiones de carga que nos facilitan la vida en todo lo referente al testing.