Corey Goldberg, autor de la herramienta para pruebas de rendimiento Pylot, anunciaba a mediados del mes de febrero de este año que estaba trabajando en un nuevo framework para este mismo tipo de pruebas, al que denominó Multi-Mechanize. Pero parece lógico preguntarse: ¿por qué otra herramienta?, Corey argumentaba que el diseño de Pylot está bastante limitado debido al hecho que los casos de pruebas deben establecerse en forma declarativa, vía XML, llegando a la conclusión que era necesario un lenguaje de scripting para la definición de los casos de pruebas, además, la mejora en la concurrencia de las mismas.
Multi-Mechanize es un framework orientado a pruebas de rendimiento y carga en sitios Web. Este framework permite la ejecución simultánea de scripts en Python por medio de un motor multi-proceso, multi-hilo para reproducir secuencias de comandos y generar usuarios virtuales de manera concurrente, todo esto con el fin de establecer carga en contra de un sitio o servicio Web.
Una de las grandes ventajas de Multi-Mechanize es que ofrece la posibilidad de incluir en los scripts el poderoso módulo mechanize (derivado de WWW::Mechanize en Perl) junto con el lenguaje de programación Python. Permitiendo crear scripts de pruebas que simulan la actividad de usuarios virtuales de manera rápida y sencilla, estos scripts generarán peticiones HTTP para navegar o enviar solicitudes de forma inteligente un sitio o servicio Web.
Los resultados se almacenan en formato CSV o en una base de datos, junto con el informe en formato HTML que contiene las estadísticas y gráficos.
Un ejemplo de la capacidad de reportes que ofrece Multi-Mechanize puede verla en http://code.google.com/p/multi-mechanize/
Requisitos
Multi-Mechanize requiere Python 2.x (2.6 o 2.7), si desea generar gráficos a partir de las pruebas, debe instalar Matplotib y sus dependencias, mayor información vea la página de Preguntas de Uso Frecuente
De manera adicional necesitará el módulo mechanize.
La instalación de los requisitos en Debian GNU/Linux y derivados es tal como se describe a continuación:
# aptitude install python-mechanize python-matplotlib
Almacenamiento de datos de prueba y resultados en Bases de Datos
Opcionalmente, los resultados pueden ser almacenados en una base de datos. Para ello debe agregar la opción results_database en el fichero de configuración config.cfg, el cual define la cadena de conexión a la base de datos.
El almacenamiento en base de datos requiere tener instalado previamente SQLAlchemy
Algunos ejemplos de conexión a bases de datos son los siguientes:
| SQLite | sqlite:///dbname |
| MySQL | mysql://user:password@localhost/dbname |
| PostgreSQL | postgresql://user:password@host:port/dbname |
| MS SQL Server | mssql://mydsn |
Tenga en cuenta que el soporte de SQLite es nativo en Python. Por lo tanto, no es necesario su instalación y configuración.
Para mayor información sobre el soporte a base de datos vea Database Storage
Instalando Multi-Mechanize
Puede descargar el proyecto Multi-Mechanize desde http://code.google.com/p/multi-mechanize/downloads/list
Una vez descargado el proyecto Multi-Mechanize, descomprima y vaya a la raíz del proyecto y ejecute desde la línea de comandos:
$ python multi-mechanize.py default_project
Este comando ejecutará el proyecto de prueba incluido en la distribución de Multi-Mechanize, el proyecto de prueba generará datos aleatorios.
NOTA: Se le recomienda analizar los scripts incluidos en projects/default_project/test_scripts/
Comenzando con Multi-Mechanize
Para iniciar, usted puede usar el directorio default_project que incluye la distribución de Multi-Mechanize. Si usted necesita manejar múltiples proyectos, solo cree un directorio al mismo nivel de default_project para cada uno de los proyectos, se le recomienda mantener la misma estructura del proyecto por omisión. Recuerde que se necesita especificar el proyecto que ejecutará desde la línea de comandos.
Cada proyecto debe contener lo siguiente:
config.cfg- Fichero de configuración, establezca sus opciones de prueba.
test_scripts- Directorio de almacenamiento de scripts de sus usuarios virtuales.
results- Directorio para el almacenamiento de los resultados. Acá encontrará subdirectorios cuyos nombres son una estampa de tiempo y son creados por cada ejecución de las pruebas y contiene datos en formato CSV, un sumario en formato HTML e imágenes en formato PNG.
Formato del fichero de configuración
Cada proyecto contiene un fichero config.cfg donde debe definir la configuración para una prueba.
A continuación se le muestra un fichero de configuración que muestra todas las opciones posibles de configuración:
[global] run_time: 300 rampup: 300 console_logging: off results_ts_interval: 30 results_database: sqlite:///projects/default_project/results.db post_run_script: python projects/default_project/foo.py [user_group-1] threads: 30 script: example_mock.py [user_group-2] threads: 30 script: example_mock.py
Opciones globales
run_time- Duración de la prueba en segundos
rampup- Duración en segundos de la rampa de usuarios (hilos)
console_logging- Activar/Desactivar el registro a la salida estándar
results_ts_interval- Intervalos de las series de tiempo para el análisis de los resultados expresadas en segundos.
results_database- Cadena de conexión a base de datos (opcional)
post_run_script- script que será invocado después de la culminación de la prueba (opcional)
Grupos de usuarios
threads- Número de hilos/usuarios virtuales
script- Script del usuario virtual a ejecutar.
Para mayor información sobre el formato del fichero de configuración consulte: Config File.
En la segunda parte de este artículo mostraré algunos ejemplos con casos de pruebas que se ejecutarán sobre una instalación de Trac.
