lunes, 4 de abril de 2016

Desarrollo y pruebas de aplicaciones web con Cucumber - Un ejemplo


Imagen de: Sitio oficial de Cucumber

Las metodologías ágiles de desarrollo de software surgen como una respuesta a lo que era una tendencia creciente al fracaso en los proyectos. Uno de los aspectos primordiales que estas proponen es considerar las pruebas de software desde el principio.

En proyectos web debe hacerse la consideración que cada vez es mayor la exigencia de tiempos de desarrollo más cortos, y la modificación constante de la aplicación en sucesivas iteraciones.

Para lograr esto, existen métodos de trabajo como el Test Driven Development (TDD) y el Behaviour Driven Development (BDD), en los cuales primero se define la prueba y luego el software para que esta sea superada.

Estos métodos deben sustentarse en herramientas de automatización de desarrollo y pruebas de software, siendo Cucumber la más utilizada hoy en día para apoyar el desarrollo de aplicaciones web bajo BDD.

En este artículo te presentamos un ejemplo de cómo usar Cucumber en el desarrollo y pruebas de aplicaciones web bajo enfoque BDD.

Acerca del contenido del artículo

El contenido de esta página está basado en el artículo Web Testing with Cucumber publicado en SpriteCloud (Autor: Jens Finkhäuser).

Que es el Test Driven Development (TDD)

La palabra “Driven”, que en este contexto significa guiado o manejado, significa el hecho que primero se escriben pruebas de software automatizadas en un lenguaje de scripting, las cuales como es lógico resultan en error (porque aún no se ha desarrollado el fragmento de código o aplicación). Luego se escribe el software necesario para que la prueba pase.

Si buscas información detallada del TDD, te recomendamos leer nuestra serie de artículos.

> Desarrollo de software guiado por pruebas

TDD es un enfoque más orientado a desarrolladores y de bajo nivel (a nivel de código de programa).

Que es el Behaviour Driven Development (BDD)

En BDD, las pruebas se describen utilizando un lenguaje al que denominamos “natural”, lo cual hace que puedan ser accesibles por personas externas a los equipos de desarrollo y pruebas de aplicaciones web.

Te recomendamos leer nuestro artículo sobre BDD y Cucumber:

> Desarrollo de sistemas con Behaviour-Driven Development y Cucumber

Una prueba BDD puede describir una funcionalidad de software de la misma forma que lo hace una especificación funcional.

Para hacer la traducción de pruebas escrita en lenguaje funcional a código ejecutable por el computador necesitamos de una herramienta, es aquí donde Cucumber entra en juego.

Cucumber

Cucumber es una herramienta de automatización de pruebas para BDD basada en el lenguaje Ruby. Si buscas más información sobre Ruby aquí te compartimos un enlace:


La metodología de trabajo de Cucumber es la siguiente:

  • El usuario describe el comportamiento del sistema usando un lenguaje “natural”, que contiene palabras clave específicas.
  • Primero se crea un archivo de funcionalidad (Feature), en el cual se describe una característica del sistema y algunos escenarios de pruebas de software.
  • De por sí, Cucumber no sabe cómo interpretar estas funcionalidades. Por lo tanto, el siguiente paso es desarrollar las definiciones de pasos (Step Definitions) en Ruby.
  • Tiene mucha flexibilidad en la forma en que los pasos de prueba pueden ejecutarse. Por ejemplo, puede tomar definiciones de pasos de Webrat, una herramienta de pruebas de aceptación para Ruby, que puede simular un navegador (sin soporte a JavaScript).
  • También puede combinarse con una herramienta de automatización de pruebas como Watir, para implementar pruebas automatizadas basadas en web.


Más Información sobre Software Testing

Visita nuestra página de Recursos en Pruebas de Software

Ejemplo de desarrollo y pruebas de aplicaciones web con Cucumber

La Funcionalidad (Feature)

A continuación un ejemplo de una definición de funcionalidad tomada de un archivo de funcionalidad Cucumber (un Feature File):

Feature: Website Navigation

In order to navigate website pages

I need to be able to click on menu item


La funcionalidad es una descripción de algo que queremos lograr. Por sí sola no hace mucho, sin embargo, trabaja como una especificación del sistema y de la prueba de software.

Esta funcionalidad nos describe que: Para poder navegar aplicaciones web, debo poder hacer click en los elementos de menú.

El Escenario

Esta funcionalidad necesita ser probada en varios escenarios. Por ejemplo, el usuario puede estar en una página distinta al iniciar la prueba o el usuario pudiera hacer click en otro enlace.

Uno de estos escenarios se muestra a continuación, este describe la operación de hacer click en un elemento de menú de nuestro sitio web:

Scenario: Going to page Services

Given that I am on spriteCloud Home

When I click on link Services

Then the page title should be "spriteCloud - Services"


El escenario se titula “Ir a servicios de página” y consiste en: Dado que estoy en la página Home de spriteCloud, al hacer click en el enlace “link services”, entonces el título de la página debe ser "spriteCloud - Services".

Definiciones de pasos (Step definitions)
Esta es la parte que necesitamos explicarle a Cucumber para que sepa que hacer.

Para este ejemplo utilizaremos Watir con Watir-webdriver gem. 

Watir es una de las herramientas de automatización que te compartimos en nuestro artículo sobre 5 Herramientas de automatización de Software Testing

También usaremos RSpec gem para poder utilizar una operación “Should”.

Require ‘spec’

Require "watir-webdriver"


Luego definimos dos constantes, una para la dirección del sitio web y otra para hacer referencia al navegador. Aquí se muestra la sintaxis para iniciar una isntancia de Firefox con webdriver.

SITE = "www.spritecloud.com"

BROWSER = Watir::Browser.start ( SITE, :firefox )

PAGES = {

"spriteCloud Home" => "http://www.spritecloud.com/"

}


La instrucción PAGES realmente no es necesaria en este caso, pero puede ser útil si existen más datos y páginas involucradas. Se usa para buscar una URL, basándose en el nombre que tiene la página en los escenarios.

Esto cubre la parte de preparación, ahora se comienza con los pasos que están incluidos en el escenario. La palabra clave “Given” se encarga de preparar la prueba. Es necesario que nos encontremos en la página “home” al inicio de la prueba.

Given /^that I am on (.*) $ / do |page|

BROWSER.goto ( PAGES [page] )

end


Ahora analicemos esta expresión:

  • Comienza con la palabra clave “Given”, lo cual es obligatorio.
  • Sigue un espacio y al oración “that i am on” (que yo estoy en).
  • Otra expresión (.*), que se encarga de almacenar todo lo que este desde la palabra “on” hasta el final de la línea en la página de variables.

La expresión “.*” permite escribir el paso de forma más genérica, la página o escenario en el que nos encontramos no está definido en el paso sino en el escenario. Esto permite que una persona pueda escribir las pruebas de software sin tener conocimientos del lenguaje Ruby.

A continuación, la palabra clave “When” (Cuando) se refiere a la operación que se realizará sobre la página. En este caso necesitamos hacer click sobre un enlace. Un enlaces se puede encontrar por distintos métodos en Watir, aquí se usa el método “:text”, el cual simplemente hace click sobre el enlace que tenga el texto que especificamos en el escenario.

When /^I click on link (.*)$ / do | link |

BROWSER.link(:text, link).click

end

La última palabra clave en el ejemplo “Then” (Entonces) se refiere al resultado que estamos esperando. Para propósitos de este ejemplo, verificamos que el título de la página sea el correcto.

Then /^the page title should be "([^"]*)"$/ do |title|

BROWSER.title.eql?(title).should == true


end


Ejecución de pruebas (Test Execution)

Una de las características más llamativas de Cucumber, es el format que se le da a la salida (resultados de la ejecución de los pasos). Las pruebas exitosas se colorean en verde y las fallidas de color rojo.mbp-2:features marko$ cucumber .

Feature: Website Navigation
In order to navigate website pages
I need to be able to click on navigation

Scenario: Going to page Services
Given that I am on spriteCloud Home
When I click on link Services
Then the page title should be "spriteCloud - Services"

1 scenario (1 passed)
3 steps (3 passed)
0m1.261s


En resumen

Este artículo presenta solo de forma general lo que se puede lograr con Watir y Cucumber, ambos son herramientas de pruebas poderosas, que pueden usarse individualmente o de forma combinada para implementar la automatización de pruebas de aplicaciones web, según las necesidades de tu proyecto.

¿Y qué opinas tú?

¿Desarrollas aplicaciones web? ¿Has probado aplicar un enfoque guiado por pruebas (TDD) o comportamienti (BDD)? ¿Que opinas de Cucumber? Te invitamos a dejarnos comentarios en la Web de La Oficina de Proyectos de Informática (pmoinformatica) (Si lo deseas, puedes firmar tu comentario con la dirección de tu web).

¿Buscas más información de desarrollo y pruebas de software?

¿Quieres obtener completamente gratis y directamente en tu correo electrónico plantillas, artículos y otros recursos de metodologías de desarrollo y pruebas de software?, entonces presiona "suscríbete" a continuación.

Suscríbete a la lista de correo electrónico:


Vía FeedBurner, se abrirá una nueva ventana

También puedes seguirnos vía Twitter, Facebook o Linkedin:

  

No hay comentarios :

Publicar un comentario

Pmoinformatica.com," La Oficina de Proyectos de Informática ", es un participante en el Programa de Servicios de Amazon Associates LLC, un programa de publicidad de afiliación diseñado para proporcionar un medio para que sitios web puedan ganar honorarios por la publicidad y enlaces a amazon.com y amazon.es.