Entendiendo qué es BDD (Behavior-Driven Development) (V). CAPYBARA

¡¡Hola a todos!! Soy Natalia Carretero y aquí os presento el quinto post de la saga de BDD que en esta ocasión trata sobre Capybara. En los post anteriores vimos como instalar Cucumber y cómo poder utilizarlo (te dejo el link anterior por si quieres verlo). Pero nos podemos preguntar, ¿y si tengo una aplicación web, como puedo utilizar las ideas de BDD y cómo puedo realizar las pruebas?
Pues bien, necesitamos de algo que nos dé un vocabulario especifico para realizar las pruebas en la web, alguna herramienta que interactúe con el sitio web de la forma en la que lo haría un humano. Esta herramienta es Capybara y se utiliza, como decía, para emular el flujo de un usuario en un sitio web.
Además, Capybara va a permitir ocultar los detalles del navegador para que se puedan realizar las pruebas de una forma más sencilla. Para ello, utiliza un driver, un controlador, alguien que se comunique con el navegador web. Existen varios drivers muy conocidos que se pueden utilizar con Capybara, aquí te pongo algunos con sus pros y contras:

  • Rack-test: es el driver que Capybara utiliza por defecto. Con este driver es rápido realizar las pruebas, pero tiene algunas limitaciones, ya que no soporta JavaScript, no está disponible para acceder a recursos HTTP fuera de la aplicación Rack y solo se puede utilizar con aplicaciones escritas en Ruby.
  • Selenium: Utiliza la ventana real del navegador y se puede ver la prueba en la realidad, viendo como se hace la prueba en cada momento (el texto que está introduciendo, cuando da a los botones, etc) y utiliza el motor JavaScript real del navegador. Esto hace que sea muy visual pero si se tiene una aplicación muy grande o se realizan muchas pruebas, puede llevarte mucho tiempo para pasarlas todas, ya que es muy lento.
  • Poltergeist: es un driver para Capybara que nos permite la conexión entre Capybara y un navegador sin interfaz gráfica. El navegador sin interfaz gráfica está basado en WebKit. Gracias a esto, se pueden lanzar scripts que carguen páginas e interactúen con ellas. Que permita utilizar un navegador sin interfaz gráfica va a permitir que las pruebas sean mucho más rápidas de ejecutar.

El lenguaje de dominio específico

Se puede utilizar el método visit para navegar entre las diferentes páginas:
IMAGEN1
Se puede hacer click en botones y enlaces:
IMAGEN2
También podemos interactuar con los elementos de un formulario, por ejemplo con lo que aparece en la siguiente imagen busca un área de texto con  nombre, id o texto con la etiqueta ‘Nombre’ y lo rellena con «Natalia»:
IMAGEN3
Se pueden consultar más métodos en la documentación oficial de Capybara.

Instalando Capybara y el driver

Para instalar Capybara, es necesario tener instalado Ruby 1.9.3 o posterior y poner por línea de comando gem install ‘capybara’. Además, si se va a utilizar el driver Poltergeist es necesario instalárselo con gem install ‘poltergeist’o si se va a utilizar el de Selenium se instala poniendo el comando gem install ‘selenium-webdriver

Configurando Capybara con el driver

En el fichero de la prueba hay que añadir que se va a utilizar la librería capybara poniendo require ‘capybara’.
Si se quiere cambiar el driver por defecto Rack-test que utiliza Capybara por otro driver en TODA la aplicación se debe poner en el fichero de configuración capybara.default_driver = :selenium o si se quiere utilizar Poltergueist cambiaría a capybara.default_driver = :poltergeist.
Pero también se puede dar el caso de que queramos ejecutar todas las pruebas con el driver por defecto rack-test y solo algunas de ellas con otro driver. Entonces lo que pondríamos sería:
 
before(:all) do
Capybara.current_driver = :selenium
end
 
Y después de lo que se quiera ejecutar habría que poner
 
after(:all) do
Capybara.use_default_driver
end

Ejemplo con Cucumber y Capybara utilizando el driver Selenium.

Veamos un ejemplo de cómo poder utilizar todo esto. En este caso vamos a hacer un ejemplo sencillo entrando en google y buscando “cucumber”. Entonces una vez hecho esto, debemos poder entrar en la página oficial de Cucumber y buscar su documentación.
En primer lugar, vamos a crearnos la estructura de las carpetas con sus archivos correspondientes:
1. Nos creamos una carpeta llamada “capybara”
2. Dentro de ella, nos creamos una carpeta llamada “features” para guardar nuestras características, por lo que en ella nos creamos un fichero llamado “busqueda.feature”
3. Dentro de «features» nos creamos dos carpetas: una llamada “step_definitions” y otra llamada “support”
4. Dentro de “step_definitions” nos creamos un fichero llamado “step_busqueda.rb”
5. Dentro de “support” nos creamos un archivo llamado «env.rb» donde vamos a decirle a Cucumber qué librerías tiene que cargar y cuál va a ser la configuración que vamos a utilizar con Capybara, poniendo lo siguiente:
IMAGEN4
A continuación expresamos el caso de prueba con Gherkin en el fichero .feature para que Cucumber lo pueda utilizar:
IMAGEN5
Por último, empezaremos a escribir el código que pase esos casos de prueba.
1. El caso de prueba del dado se encarga de entrar en Google utilizando el método visit.
IMAGEN62. El caso de prueba del cuando se encarga de buscar lo que se le pase. Utilizamos el método fill_in para buscar el campo de texto donde poder introducir nuestra consulta.
IMAGEN73. En el caso de prueba del entonces buscamos todos los resultados obtenidos y vemos si está la web que se le pasa como argumento. En ese caso no dará fallo y lo visitamos.
IMAGEN84. Y si todo fue bien deberíamos poder buscar la documentación, haciendo click en el link “Docs”.
IMAGEN9
Si ejecutamos, vemos como Capybara con Selenium lanza el navegador,  pone Cucumber en el buscador, accede a la página oficial de Cucumber y por último, accede al apartado Docs del menú.
El DSL de Capybara nos ha proporcionado ese vocabulario para que podamos especificar las pruebas en la web y simplemente indicándole qué driver queremos que utilice, el driver se encargará de comunicarse con el navegador para que podamos realizar las pruebas en la web.
¡¡Y acabamos de realizar una prueba con Cucumber y Capybara!! Espero que os haya servido para que os hagáis una idea de cómo funcionan 🙂
 

Javier Garzás

0 comentarios en “Entendiendo qué es BDD (Behavior-Driven Development) (V). CAPYBARA”

  1. Pingback: Comparativa de marcos para la automatización de pruebas para aplicaciones móviles: Calabash vs Appium - Javier Garzás | Javier Garzás

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Ir arriba