¡Hola a todos de nuevo! Soy Natalia Carretero y aquí os presento el cuarto post de la saga de BDD que espero que os guste. Como te explicaba en el post anterior (te aconsejo que lo leas si no lo has hecho ya, aquí te dejo el link), Cucumber es la herramienta más popular para utilizar BDD (pero hay muchas más), por lo que en este post explicaré cómo instalar Cucumber dependiendo del sistema operativo que tengas y un ejemplo para que aprendas los elementos básicos que tiene Cucumber con Gherkin, en el lenguaje Ruby y con el sistema operativo Windows (pero es similar para Linux).
Instalación en Windows
Desde la página de Ruby http://rubyinstaller.org/downloads/, descarga e instala una versión de Ruby. En el proceso de instalación, marca la casilla “Add Ruby executables to your PATH.”
A continuación, descarga e instala “Ruby Development Kit” desde la misma página en la que descargues Ruby, con la versión que corresponda en relación a la versión de Ruby instalada. Ejecuta el .exe y guárdalo en una carpeta del sistema. Desde la consola de Windows posiciónate en esa capeta y ejecuta ruby dk.rb init para generar el fichero config.yml, después ejecuta ruby dk.rb install para instalarlo.
Una vez que tengas esto, ya puedes descargar la gem de Cucumber. Desde la línea de comandos ejecuta gem install cucumber y una vez instalado, cucumber –help para confirmar que se instaló correctamente.
Instalación en Linux o Mac
Necesitas tener instalado Ruby. Si haces las pruebas en el mac, no te va a servir el Ruby que viene por defecto, por ello actualiza la versión y utiliza el rvm, cambia el path y usa tu instalación de Ruby.
Vete a la consola y pon: $gem install cucumber
Aunque sea obvio decirlo, si te salta un “You don’t have write permissions” pon un “sudo” delante del gem (y mete el password de administrador, es decir $sudo gem install cucumber).
Hecho lo anterior, ejecuta ahora: $cucumber –help y comprueba que funciona.
Probando Cucumber con un ejemplo
Para hacer un ejemplo sencillito que ayude a entender Cucumber, vamos a implementar la multiplicación de una calculadora. Lo primero que haremos es crear un directorio con el nombre que quieras, y ahí guardaremos las características (es decir, los archivos .features) y el programa. En este caso lo vamos a llamar calculadora, y entramos en la carpeta. En la consola lo haríamos con mkdir calculadora y a continuación cd calculadora. Si en ese momento ejecutamos el comando cucumber, da fallo y dice que debemos crear un directorio llamado feature:
Esto es porque cuando ejecutamos cucumber sin argumentos, coge como directorio por defecto a uno llamado “features” y como no lo encuentra, Cucumber avisa. Para solucionarlo, creamos dentro de la carpeta calculadora, un directorio llamado features. Y si ejecutamos Cucumber otra vez, obtenemos la siguiente salida:
Esa salida indica que Cucumber ahora sí que encontró el directorio features, pero no encontró ningún escenario que pudiera ejecutar. Para crear una prueba, creamos un documento con la extensión .feature dentro del directorio features, con el nombre multiplicación.feature. La estructura de un fichero .feature básica es:
Característica: descripción de la prueba
Para lograr un beneficio
Como rol
Quiero realizar una funcionalidad
Escenario: descripción del caso de prueba
Dado un contexto inicial
Cuando ocurre un evento
Entonces asegurar que se obtiene
Analizando esta estructura podéis ver que una parte de ella tiene la forma de historia de usuario. Que Cucumber permita describir la historia de usuario junto con la prueba aporta un gran beneficio para los desarrolladores y ayudará a documentar el código.
En el fichero multiplicacion.feature escribimos:
Cuando ejecutamos Cucumber, la salida que nos muestra es:
Con esta salida, en primer lugar podemos ver que Cucumber ha buscado en la carpeta “features” los archivos con extensión .feature y los ha ejecutado, ya que muestra el contenido del archivo. Ahora, la salida 0 scenario ha cambiado por 1 scenario (1 undefined). Esto quiere decir que Cucumber ha encontrado un escenario pero no sabe cómo debe ejecutarlo. También ha cambiado la salida 0 steps por 3 steps (3 undefined), porque ni el dado, ni el cuando, ni el entonces están definidos. Después de esto, Cucumber muestra una anotación, dando un ejemplo de la estructura que debemos utilizar para crear casos de prueba en Ruby. Para crear esos casos de prueba, primero creamos una carpeta llamada “step_definitions” dentro de la carpeta features que hemos creado anteriormente.
Para crear un caso de prueba, en esa carpeta creamos un archivo con extensión “.rb”, al que llamaremos calculadora_steps.rb. En el archivo, copiamos el ejemplo del caso de prueba que había mostrado en pantalla Cucumber anteriormente.
Al ejecutar Cucumber el escenario ha cambiado de undefined a pending. Esto significa que Cucumber ha ejecutado el primer caso de prueba, pero como aún no está implementado, lo marca como pendiente. Además, Cucumber ha cambiado los 3 steps (3 undefined) a 3 steps (2 skipped, 1 pending). Para entender esto, hay que tener en cuenta que Cucumber cuando ejecuta un escenario, ejecuta los casos de prueba y si alguno de ellos da fallo interrumpe la ejecución y los siguientes los omite y se los salta.
- Implementar un caso de prueba
Ahora implementaremos el primer caso de prueba que habíamos definido en el archivo features/step_definitions/calculadora_step.rb. Cucumber dice que debe tener esta apariencia:
Podemos ver que dado, do y end son palabras clave que deben aparecer en todos los casos de prueba. Después del dado, aparecen unos paréntesis donde muestra algo parecido a lo que habíamos escrito en el escenario, solo que cambia el “5*5” por “(.*?)”. Después del do, indica los argumentos que recibe y que podemos utilizar en el caso de prueba, y a continuación pone pending para indicar que es ahí donde debemos definir el caso de prueba.
El dado representa la entrada, por lo que en primer lugar definiremos un argumento llamado “entrada”. En Ruby, un identificador que comienza con @ es una variable de instancia y asignamos un valor a la misma en tiempo de ejecución, por lo que donde ponía pending, por ahora lo sustituimos por:
Y lo que ocurre si ejecutamos Cucumber es:
¡Ya hemos pasado el primer caso de prueba! Ya marca en verde el primer caso de prueba, que es la forma de indicar que lo hemos pasado.
Para implementar el siguiente caso de prueba, volvemos a editar el archivo features/step_definitions/calculadora_step.rb y ponemos:
¡Ya pasamos el segundo caso de prueba también! ¡Ya solo queda uno más! Vamos a por él. Abrimos el archivo features/step_definitions/calculadora_step.rb para realizar el caso de prueba que queda y lo modificamos por:
Donde nos creamos una variable llamada salida_esperada de la misma forma que hicimos con la variable entrada y comparamos ese valor a la variable de instancia @salida.
Y hasta aquí llegamos en este post, espero que os haya gustado y ¡que todo os salga tan verde como un buen cucumber o gherkin! 😉
- Debes crear apps sin saber programar (no hay que saber nada) + Crea Test con IA + Scrum es el nuevo Excel - 12 septiembre, 2024
- Las 6 técnicas prompting + 1ª Ley del Manager Oscuro + Mantenlo sencillo, estúpido - 5 septiembre, 2024
- Guía de Métricas Ágiles (versión agosto 2024) - 22 agosto, 2024
El link hacia el post anterior falla.
Gracias, creo que ya está solucionado.
Interesante!, gracias Natalia por tu dedicación y por ampliar nuestros conocimientos. 🙂
Interesante!, gracias Natalia por tu dedicación y por ampliar nuestros conocimientos. 🙂
buenas
¿alguien ha seguido las instrucciones de instalación?
el último paso me falla
c:\Users\lenovox201\Downloads\RubyDevKit>ruby dk.rb init
[INFO] found RubyInstaller v2.2.5 at C:/Ruby22
Initialization complete! Please review and modify the auto-generated
‘config.yml’ file to ensure it contains the root directories to all
of the installed Rubies you want enhanced by the DevKit.
c:\Users\lenovox201\Downloads\RubyDevKit>ruby dk.rb install
[INFO] Updating convenience notice gem override for ‘C:/Ruby22’
[INFO] Installing ‘C:/Ruby22/lib/ruby/site_ruby/devkit.rb’
c:\Users\lenovox201\Downloads\RubyDevKit>gem install cucumber
ERROR: Could not find a valid gem ‘cucumber’ (>= 0), here is why:
Unable to download data from https://rubygems.org/ – SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
cuando ejecuto cucumber me da Parser errors
Me pareció muy buen post, seria bueno algún ejemplo para android o iOS