Saltar al contenido

Categoría: Planetas

Automatización de pruebas funcionales con Selenium en Yii usando Netbeans

El título de esta entrada es un poco largo, pero intentaré de explicarles de una manera sencilla como podemos hacer pruebas funcionales en nuestras aplicaciones hechas con el framework de PHP Yii, usando Selenium y Netbeans. Para quienes no conocen las pruebas funcionales, son aquellas para comprobar la correcta ejecución de cada una de las funcionalidades del sistema, muchas veces hacemos este proceso manualmente: entrando al sitio, escribiendo a mano (o usando un plugin del navegador) cada campo, haciendo clic en los botones y así sucesivamente. Pero cuando el sistema se hace muy grande o estamos en agregando funcionalidades, se puede perder mucho tiempo en realizar este proceso, si se deja para el final (como en las metodologías antiguas) puede ser muy tarde y si se omite tendremos un software con potenciales fallas.
La idea es automatizar este proceso, para que con un solo clic se ejecuten muchas pruebas y asegurarnos el correcto funcionamiento del programa a lo largo del desarrollo y mantenimiento del mismo.

 

Configuración en Netbeans

Para esta guía deben tener ya instalado y configurado los siguientes programas: Netbeans, PHP Unit, un programa hecho con Yii framework, Selenium Server, Firefox (Debe ser igual para otro navegador pero no lo probé), Linux (No sé si este proceso es igual para Windows).

Primero lo que vamos a hacer es instalar un plugin de Netbeans para manipular el servidor de Selenium desde el IDE, este paso es opcional pero me parece mas fácil iniciarlo / detenerlo con un clic que a través de comandos. Para ello vamos a:

  1. Entrar en Netbeans.
  2. Luego en el menú «Tools -> Plugins -> Available Plugins«.
  3. Allí buscamos el que tenga el nombre de «Selenium Module for PHP» le damos clic en Install.
  4. Una vez finalizada la instalación, en la pestaña de Servicios en la parte de Servidores tendremos el de Selenium.
Servidor Selenium
Servidor Selenium

Antes de iniciar las pruebas, debemos arrancar el servidor de Selenium con clic derecho y luego en «Start». Luego procedemos a configurar el proyecto actual (el realizado en Yii) para indicar a Netbeans donde se encuentran las pruebas y PHP Unit:

  1. Hacemos click derecho en el proyecto y luego en «Properties».
  2. En la sección «Sources» existe una caja llamada «Test Folder», en ella vamos a colocar la ruta absoluta a la carpeta /protected/tests del proyecto (en caso de no funcionar, entonces a /protected/tests/unit).
  3. Luego en la misma ventana, cambiamos la sección «PHPUnit» y activamos donde dice «Use Bootstrap» donde rellenamos la caja de texto a la ruta absoluta de /protected/tests/bootstrap.php
  4. Luego activamos la opción «Use XML Configuration» y rellenamos en la caja la ruta absoluta de /protected/tests/phpunit.xml.

Con esto ya esta configurado Netbeans, sin embargo, en mi caso no funcionó de una vez hasta hacer unos pequeños ajustes:

  1. En mi caso no quería detectar al navegador Firefox, para hacerlo funcionar en el archivo de configuración (phpunit.xml) tuve que eliminar todo el contenido dentro de las etiquetas <selenium></selenium> dejándolas como las acabo de escribir.
  2. En el archivo WebTestCase.php,en la función setUp() necesité colocar $this->setBrowser(‘*firefox’); para indicar el navegador por defecto.
  3. Como estaba usando Bootstrap para el frontend, Selenium debe esperar un poco hasta que algunos eventos de Javascript terminen de mejorar la apariencia visual, para ello en el archivo /protected/config/main.php se agrega enla sección de preload lo siguiente (asumiendo la carga de log como se encuentra por defecto):
'preload' => array('log',
  php_sapi_name() !== 'cli' ? 'bootstrap' : '',
),

Listo, ya con presionar Alt + F6 empezará a ejecutar todas las pruebas, si solo quieren para la clase actual deben presionar Shift + F6.

Consejos para las pruebas

A continuación les doy unos consejos y extractos de código, pues al principio me costó encontrar como realizar las siguientes tareas en Selenium.

Iniciar sesión en cada prueba

Para ello deben crear en WebTestCase.php (la clase principal para las pruebas) un método para el login que comience con _ (piso), pues éstos no se ejecutarán en las pruebas, aquí mi les dejo código y luego en cada prueba hacen un $this->_login() donde requieran identificarse.

protected function _login() {
	$this->windowMaximize();
	$this->open("site/login");
	$this->type("LoginForm_username", "skatox"); //Donde LoginForm_username es el id del usuario
	$this->type("LoginForm_password", "contrasena");
	$this->click("LoginForm_rememberMe"); //Permite recordar y no estar autenticando cada rato
	$this->click("name=yt0");
	$this->waitForPageToLoad(self::PAGE_LOAD_WAIT_TIME); //constante que declaré para esperar un tiempo
}

Interactuar con la ventana de confirmación al eliminar un elemento del grid

En este caso se me complicó porque se debe interactuar con una ventana de javascript, el siguiente código también está en WebTestCase.php porque lo utilizo a lo largo de todas las pruebas, los parámetros son: $confirmMsg que es el mensaje de confirmación que aparece en la ventana y $nonFoundMsg, mensaje de cuando se ha borrado el elemento.

protected function _testDelete($confirmMsg, $nonFoundMsg){
  sleep(self::WAIT_JS_TIME); //tiempo para esperar la ventana de javascript
  $this->chooseCancelOnNextConfirmation(); //Selecciona el boton cancelar para probar este paso
  $this->click($this->firstDeleteXpath); //Hace clic en el boton de eliminar del grid (Xpath)
  $this->assertConfirmationPresent($confirmMsg); //Se asegura que esta bien el mensaje
  $this->getConfirmation();
  sleep(self::WAIT_JS_TIME);
  $this->chooseOkOnNextConfirmation(); //Escoge aceptar
  $this->click($this->firstDeleteXpath);
  $this->assertConfirmationPresent($confirmMsg);
  $this->getConfirmation();
  $this->waitForTextPresent($nonFoundMsg); //Espera que no hayan resultados porque los borró
}

Ya con estos pasos pueden empezar a realizar las pruebas funcionales de forma automática, si quieren conocer como se vé, les dejo un vídeo de unas pruebas de un módulo de una aplicación que estoy realizando:

Pruebas funcionales de Yii usando Netbeans
15 comentarios

2012: Un gran año para Linux

Hace unos días la Linux Foundation publicó un video en youtube sobre los acontecimientos ocurrido entorno a Linux durante el 2012 y realmente me pareció excelente como este proyecto ha avanzado enormemente. Ya llevo usando Linux por 9 años, recordando como era en aquel entonces y como es ahora, veo lo enorme que ha avanzado el proyecto, principalmente pasó de ser un sistema operativo para Geeks o sistemas de gran cómputo, a ser el sistema operativo usar por la mayoría de dispositivos de la vida diaria.

Y en el 2012, sucedieron muchas cosas que muestra el video, como podemos nombrar:

  • Linus gana el premio de Millenium Technology.
  • Redhat logra obtener un beneficio de mil millones de dolares en el año.
  • Android se vuelve en el dispositivo de consumo mas usado.
  • Mas del 90% de las super-computadoras usan Linux.
  • Las distintas convenciones  realizadas alrededor del mundo.
  • Y mas..
2012: What a Year for Linux

Si les gustó el video, compartan la información u opinen.

 

Deja un comentario

Crudgen: Generador CRUD para PostgreSQL usando phppgadmin

Crudgen fue mi proyecto de tesis de grado que culminé a medidados del 2009, el mismo consiste en un generador de páginas para realizar operaciones CRUD (Create, Report, Update y Delete) en una base de datos Postgres a través de phppgadmin, el mejor gestor web para administrar este tipo de base de datos. Para ese entonces modifiqué el código fuente de varias partes de la aplicación, dificultando su integración en el programa, al año siguiente (2010) decidí reescribirlo y modificar su uso siguiendo las sugerencias del equipo, sin embargo, por falta de tiempo lo abandoné. En agosto de 2011, se agregó soporte para complementos por parte de Leonardo Sápiras al participar en el Google Summer of Code, permitiendo escribir un plugin con esta funcionalidad sin modificar el código fuente del programa.En el último año, cuando tenía tiempo libre me puse a rescribir (por tercera vez) el programa y hasta hace poco logré finalizarlo.

El plugin permite a través de pocos pasos, generar páginas web para realizar operaciones sobre las tablas seleccionadas de una base de datos. El código generadoson funciones PHP para realizar las acciones, las cuales son llamadas desde una plantilla HTML, esta plantilla, puede ser programada fácilmente o fácil de adaptar desde un diseño un existente, permitiendo obtener resultados con diseños personalizados (a diferencia de las otras soluciones donde todos los resultados tienen la misma apariencia).

Respecto al código del lado del servidor, soporta las bibliotecas PGSQL o PDO_PGSL brindando posibilidad al usuario de elegir la que mas le convezca (debería usarse siemper PDO para mayor seguridad), posee seguridad respecto a ataques de inyección SQL, usa PHP5 de fácil lectura y con flexibilidad para adaptarla a los requisitos del programador. Centraliza funciones comunes entre las páginas y mucho mas.

Si les interesa, les invito a ver este vídeo en inglés (me di cuenta que necesito prácticar) donde explico todo el funcionamiento del programa, sino entienden el idioma, no importa, pueden ver todo el proceso y ver lo que genera el plugin.

Espero que lo utilicen, compartan esta información, reporten bugs, se unan al proyecto y aporten código al mismo.

Para utilizarlo pueden descargarlo desde la página de Crudgen en Github.

Deja un comentario

¿Por qué usar Cyanogenmod en mi teléfono Android?

Ya a estas alturas todos deberíamos conocer sobre Android, en mi opinión, su popularidad ha sido gracias a su licencia abierta pues permite tanto a empresas como a la comunidad realizar modificaciones al sistema operativo para: adaptarlo a ciertos sectores del mercado, diferenciarse de otras compañías inversoras en esta tecnología, realizar ciertas optimizaciones, tener mayor control del software y hardware, por mencionar algunos.

Cuando compras un teléfono el sistema Android que incluye por defecto fue desarrollado por la compañía fabricante (Samsung, HTC, Motorola, entre otros). Éste sistema tuvo que pasar por una serie de pruebas o certificaciones realizadas por Google y la compañía mencionada para garantizar el buen funcionamiento y estabilidad con el fin de mantener una buena imagen de Android, por ello, muchas modificaciones o funcionalidades deseadas no se encuentran presentes porque pueden sacrificar el rendimiento y/o estabilidad, afectando la imagen de ambas compañías. También por la misma razón, las compañías no suele actualizar la versión de android de los teléfonos por el tiempo que lleva: desarrollar los cambios, probarlos, certificar el resultado por Google y el dinero que consume realizar todo este proceso.

Cyanogenmod es una firmware realizado por la comunidad y soportado en una gran cantidad de dispositivos, la ventaja de este firmware son: inclusión de características y mejoras no soportadas por el resto de firmwares, permite a tu teléfono la última versión de Android a pesar de que no existan planes o versiones oficiales (si la compañía fabricante dice que no va a actualizar tu teléfono a la última versión gracias a Cyanogen puedes), incrementa  el tiempo de duración de la batería gracias a la activación de control de la frecuencia del CPU, inclusión de buenas aplicaciones extra como el navegador de archivos y reproductor multimedia, soporte de temas, mas opciones de personalización y mas.

Mi experiencia con Cyanogenmod la he disfrutado en 3 teléfonos:

  • Motorola Milestone: Cyanogen 6 y 7 no oficial porque Motorola no actualizó el teléfono a las últimas versiones de Android.
  • Samsung Spica: Cyanogen 7 no oficial  porque era la única ROM con Android 2.3 que funcionaba para ese teléfono.
  • Nexus S: Cyanogen oficial 7.0,7.1, 9, 9.1 y 10.

Si observan, son teléfonos distintos y dice algo de versiones oficiales, resulta que la comunidad de Cyanogenmod da soporte una gran lista de teléfonos, pero aquellos no incluidos allí, pueden tener un firmware adaptado por un tercero permitiendo disfrutar del firmware (El caso del Motorola Milestone y Samsung Spica). El problema de las versiones no oficiales de Cyanogenmod, es la poca estabilidad del sistema, bien sea por: problemas de migración, drivers cerrados e incompatibles con otra versión, limitaciones, etc.

En el caso de Nexus S, he podido disfrutar las versiones oficiales tanto de Google como de Cyanogenmod. La ventaja de usar las oficiales de Google es la estabilidad del sistema, Android 4 (Ice Cream Sandwish) la use como por 8 meses y tuve como 1 reinicio y mas nada, además las actualizaciones al realizarse por OTA, no tuve que perder datos ni instalar aplicaciones al actualizar pero tiene las limitaciones mejoradas anteriormente.

Ventajas

Al instalar Cyanogen estable, pude darme cuenta la diferencia, se siente como un teléfono nuevo. El rendimiento es ligeramente superior (la mayoría de los usuarios no se darán cuenta), agrega mas opciones de personalización como temas, mas métodos de desbloqueo, permite editar parámetros avanzados como: velocidad de procesador, modo de rendimiento (en demanda, rendimiento, entre otros), manejo de la memoria, notificaciones a través de la iluminación del teclado y una característica llamada Deep Idle, éste último duerme todos los servicios y baja el consumo del procesador al mínimo cuando se apaga la pantalla, incrementado enormemente el uso de la batería (en mi caso un 70% aproximado de mas tiempo).  También si utilizan su dispositivo para escuchar música mientras estas en el carro o mientras hacen ejercicio,  podrán notar lo difícil de estar mirando cada vez que desean cambiar la canción, con este firmware pueden utilizar los controles de volumen para cambiar entre pistas. También su launcher tiene ligeras modificaciones, como controles en la barra de notificaciones para activar y/o desactivar servicios, notificaciones mejoradas: permite usar las de Jelly Bean en versiones anteriores y algunas cosas extras como responder un SMS desde esta pantalla.

Desventajas

Las desventajas son pocas, la principal es el hecho que para instalarla se debe tener conocimientos de: obtener root en tu teléfono, modificar el bootloader (en algunos casos), instalar recoverys personalizados, respaldos NAND y otros. Cosas que no conocer el usuario promedio de Android y en los casos donde lo haces mal borras todo el contenido del teléfono. Sin embargo, existen guías explicando paso a paso para evitar este tipo de situaciones. Respecto a la estabilidad depende principal de 2 motivos: si la ROM es oficial del proyecto Cyanogenmod y de si existen los drivers del dispositivos para esa versión de Android. Si las dos se cumplen, te aseguro que correrá sin problemas, tal vez un reinicio rara vez pero es muy usable, de lo contrario puedes tener reinicios constantes o algún dispositivo del teléfono que no funcione.

Conclusiones

Realmente les recomiendo instalar Cyanogenmod si existe para su teléfono, la experiencia es superior a la ROM oficial de Google (no he usado las de HTC o Samsung), si tienen conocimientos de Linux, pueden jugar con la sección de «Rendimiento» y modificar los valores para obtener mayor tiempo de duración de la pila, ademas las mejoras visuales y de accesibilidad son muy buenas.

Para conocer del proyecto, visiten su sitio oficial: https://www.cyanogenmod.org/

Edición al 24/01/2017: El proyecto original ha cerrado y ahora se le conoce como LineageOS

33 comentarios