Pruebas funcionales con Parasol

EVELYN CUSI LOPEZ
5 min readApr 25, 2019

En cualquier proyecto de desarrollo de software “los tests no son opcionales”, debido a que hacer tests es la forma en la que nos aseguramos de que nuestro programa haga lo que queremos y lo haga sin errores.

Es por ello que el éxito de los tests impacta directamente en la calidad final del producto que desarrollemos y forma una parte fundamental en la evolución y mantenimiento del mismo.

Pero… ¿qué hacemos cuando queremos hacer testing a una pagina web en el navegador?, sin tener que estar nosotros tras todos los navegadores posibles, emulando ser muchos usuarios a la vez, etc.

Es aquí donde puedes usar Parasol, un framework de Smalltalk que automatiza los navegadores web para hacer pruebas sobre sitios Web y comprueba de una manera sencilla que todo el conjunto del sitio o aplicación funciona correctamente.

Este framework nos sirve para testear websites desde el lado del cliente, simulando determinados usos de sitios en el navegador, tal como lo realizarían nuestros propios usuarios, de modo de que podamos comprobar como se comporta nuestra aplicación o sitio web en diferentes casos, todo esto sin que tengamos que realizarlo manualmente.

¿Cómo puedo usarlo?

Primero debes contar con los siguientes requerimientos:

  • Una imagen de Pharo, si aun no la tienes es muy fácil crearla con PharoLauncher.
  • Instalar Parasol en tu imagen, para ello debes abrir un espacio de trabajo y evaluar:
Metacello new
baseline: ‘Parasol’;
repository: ‘github://SeasideSt/Parasol/repository’;
load: ‘tests’.
(Smalltalk at: #ZnZincServerAdaptor) startOn: 8080.
  • Tener instalado un navegador Chrome.
  • Contar con el archivo JAR de Selenium standalone server (recomiendo usar la version 3.14.0 esta version hasta ahora no me dio problemas :D)
  • Y por ultimo tener el Chromedriver para tu sistema operativo.

Una vez cuentes con todo, debes extraer el archivo ZIP de Chromedriver en el directorio donde colocaste el archivo JAR del servidor Selenium.

Ahora tenemos todo listo para hacer las pruebas funcionales con Parasol.

Creando un test simple con Parasol

Para realizar nuestros tests primero crearemos una subclase de TestCase llamada FunctionalTests.

TestCase subclass: #FunctionalTests
instanceVariableNames: ‘’
classVariableNames: ‘’
package: ‘FT-Parasol’

Una vez creada nuestra clase debemos contar con un controlador para el navegador, por lo que debemos agregar una variable de instancia llamada driver.

TestCase subclass: #FunctionalTests
instanceVariableNames: ‘driver’
classVariableNames: ‘’
package: ‘FT-Parasol’

Antes de continuar con nuestro test debemos considerar que cuando realizamos tests debemos preparar el estado inicial antes de que se ejecuten los tests y realizar una limpieza después de completarlos, eso se conoce como configuración (setUp) y desmontaje (tearDown). Por lo tanto inicializaremos nuestro controlador (driver) en el método setUp y lo cerraremos con el método tearDown.

FunctionalTests >>> setUp
super setUp.
driver := BPRemoteWebDriver withCapabilities: BPDesiredCapabilities chrome.
FunctionalTests >>> tearDown
super tearDown.
driver quit

Pero aún no tenemos definido que URL testearemos, esto se realiza con el método get: anUrl del controlador, así que ahora podemos agregar este método a nuestro método setUp (para nuestras pruebas usaremos la siguiente pagina la cual es una pagina falsa para enseñar a automatizar).

FunctionalTests >>> setUp
super setUp.
driver := BPRemoteWebDriver withCapabilities: BPDesiredCapabilities chrome.
driver get: 'http://newtours.demoaut.com/'

Para nuestro primer test haremos un simple registro en la pagina, ingresaremos un nombre de usuario y una contraseña y pulsaremos en el botón de registro, esperando que esto nos redireccione a otra pagina.

Para hacer esto necesitamos conocer la estructura de la pagina por lo que a continuación les mostrare lo que contienen las etiquetas de todos los elementos con los que queremos interactuar.

User Name: <input type=”text” name=”userName” size=”10">

Password: <input type=”password” name=”password” size=”10">

Sign-in: <input type=”image” name=”login” value=”Login” src=”/images/btn_signin.gif” width=”58" height=”17" alt=”Sign-In” border=”0">.

Ahora ya contamos con lo necesario para hacer nuestro primer test.

Primero debemos encontrar los campos y el botón para poder registrarnos automáticamente, afortunadamente Parasol cuenta con casi todos los métodos de Selenium, por lo que contamos con un método que encuentra elementos de la pagina por su atributo name (findElementByName: aString), entonces ahora solo nos queda seleccionar todos los elementos que necesitamos:

FunctionalTests >>> testSignIn
|userName password signIn|
userName := driver findElementByName: ‘userName’.
password := driver findElementByName: ‘password’.
signIn := driver findElementByName: 'login'.

Ahora ya tenemos almacenados en variables cada elemento, pero aun no hacemos nada con estos elementos, primero llenaremos los campos userName y password, para llenar un campo existe un método del elemento llamado sendKeys: aString, conociendo esto ya podemos llenar estos campos.

FunctionalTests >>> testSignIn
|userName password signIn|
userName := driver findElementByName: ‘userName’.
password := driver findElementByName: ‘password’.
signIn := driver findElementByName: 'login'.
userName sendKeys: ‘User‘.
password sendKeys: ‘Password‘.

Bien ya tenemos los campos llenados, ahora solo nos queda hacer click en el botón de registro, para esto existe el siguiente método click.

FunctionalTests >>> testSignIn
|userName password signIn|
userName := driver findElementByName: ‘userName’.
password := driver findElementByName: ‘password’.
signIn := driver findElementByName: 'login'.
userName sendKeys: ‘User‘.
password sendKeys: ‘Password‘.
signIn click.

Ahora el registro esta automatizado pero ¿cómo verificamos que hace lo que queremos? bueno una simple forma seria verificar que al realizar esta acción nos redireccione a otra pagina, y en efecto al presionar el botón nos redirecciona a esta pagina

entonces para terminar nuestro test solo debemos verificar que ingresamos aquí exitosamente, haremos esto encontrando el link con el texto registration form usando el método findElementByPartialLinkText: aString, nuestro test pasara si encuentra este elemento en caso de que no lo encuentre no lo hara.

FunctionalTests >>> testSignIn
|userName password signIn|
userName := driver findElementByName: ‘userName’.
password := driver findElementByName: ‘password’.
signIn := driver findElementByName: 'login'.
userName sendKeys: ‘User‘.
password sendKeys: ‘Password‘.
signIn click. self shouldnt: [driver findElementByPartialLinkText: ‘registration’] raise: BPNoSuchElementException

Ahora ya tenemos nuestro primer test automatizado con Parasol :D, pero antes de ejecutarlo aun nos falta hacer un paso, debemos ejecutar el servidor de Selenium, para hacer esto solo ejecuta la siguiente línea de comando en tu terminal:

java -Dwebdriver.chrome.driver=chromedriver -jar selenium-server-standalone-3.14.0.jar

Y estamos listos para ejecutar nuestro primer test :D

Si todo salió bien obtendrán un lindo color verde en la ejecución de tu test.

Si les gusto la automatización con Parasol pueden encontrar muchos mas ejemplos en el paquete ‘Parasol-Tests’.

Continuaremos con más de Parasol en un artículo futuro. Manténganse al tanto…

--

--