DD Santander- Behat

Anuncio
BDD y Behat
Ricardo Sanz
@sanzante
tunic en d.o
[email protected]
@metadrop
Behavior Driven Development
•
Basado originalmente en TDD
•
Permite escribir tests en lenguaje natural
comprensible por desarrolladores y usuarios
•
Centrado en historias de usuario
Historias de usuario
•
Describen el comportamiento esperado
•
Compuestas por título, descripción y
escenarios.
•
Los escenarios son cada caso particular,
compuestos por precondiciones, eventos y
resultados esperados
Behat
•
Permite trabajar con BDD en entornos PHP
•
Inspirado en Cucumber, BDD para Ruby
•
Requiere PHP 5.3.1
Componentes básicos de Behat
•
Los tests (historias de usuario) se escriben
usando Gherkin
•
Usa Mink para simular el navegador
atacando a la aplicación web
Behat es pegamento: lee
Gherkin y ejecuta los pasos
de los escenarios usando
Mink.
Gherkin
•
Lenguaje para definir tests
•
Las historias de usuario las llama features
•
Cada fichero .feature contiene una historia
de usuario, que contendrá uno o más
escenarios
•
Los escenarios se componen de pasos
(steps)
Una feature
Título
Feature: Users login
In order to have users in my web app
Descripción
As a user
I must be able to be recognized by web app.
Scenario: Normal login
Given I am an anonymous user
Escenario 1
When I go to login URL
And I fill username with 'username'
And I fill password with 'password'
And I press 'Login!'
Then I must be a logged user
And I must be at user page
Escenario 2
Scenario: One access link login
...
Steps
Steps
•
Given: describen precondiciones
Ponen el sistema en un estado conocido
•
When: indican una acción o evento
•
Given: describen estados esperados
Realizan una transición del estado actual
Examinan la salida del sistema y confirman
resultados esperados
And y But: legiblidad
El escenario:
Scenario: Multiple Givens
Given one thing
Given another thing
Given another one thing more
When I do something
Then I should see something
Then I should see some other thing
Puede ser escrito como:
Scenario: Multiple Givens
Given one thing
And another thing
And another one thing more
When I do something
Then I should see something
But I should see some other thing
Steps
•
Behat no distingue entre tipos de steps
•
Cada step se mapea a una función PHP
•
El contenido de la función es lo que
determina realmente si el step es
precondición, acción o postcondición
•
Given, When, Then, But y And sirven para
que sea legible por humanos
Gherkin: otras características
•
Definir escenarios mediante una plantilla variando solo
los datos (Scenario Outline)
•
Contextos para los escenarios de una feature;
precondiciones a establecerse antes de cada escenario
(Backgrounds)
•
Permite pasar tablas de datos como argumentos a
steps (más cómodo)
•
Marcar escenarios con etiquetas (útil para organizar y
con ciertas implicaciones técnicas)
Behat + Gherkin: mapeado de
funciones
Behat usa expresiones regulares para asociar
steps con funciones PHP:
...
When I click "My account"
...
Behat + Gherkin: sugerencia
implementación de step
Si no se encuentra una función acorde para un
step Behat sugiere el código para añadirla:
...
And I should be in the "shop" web section
...
Behat + Web
Frosty Morning Web
Mink
•
Framework de tests de aceptación para
aplicaciones web
•
PHP 5.3
•
Algunos emuladores: Goutte, Selenium,
Sahi
•
Incluye muchos steps definidos relacionados
con testing de aplicaciones web
Headless browser emulators
•
Envían peticiones HTTP y parsean el
resultado
•
Rápidos, sencillos y no necesitan un
navegador real ni servidor gráfico
•
Sin soporte JS/AJAX
Browsers controllers
•
Controlan un navegador real
•
Simulan interacción del usuario con el
navegador
•
Soporte completo para JS/AJAX (y todo lo
que ofrezca un navegador real)
•
Requieren un navegador instalado,
configuración y son más lentos
Mink
•
Mink abstrae las diferencias entre los
emuladores de navegadores disponibles
mediante drivers para cada uno
•
Facilita el control del navegador (real o
emulado), el análisis de la página o la
manipulación de elementos
Mink Drivers
•
GoutteDriver: headless browser
•
SahiDriver: controlador de navegador
compatible con todos los navegadores
•
ZombieDriver headless browser escrito en
node.js y permite interacciones JS
•
SeleniumDriver y Selenium2Driver:
controlador de navegador
Etiquetas de escenario
•
Ciertas etiquetas afectan al driver usado.
•
La etiqueta @javascript dispara un driver
con soporte para JS (por defecto Selenium)
Las etiquetas se colocan antes de cada escenario
Drupal Extension
•
Parece ser el módulo más prometedor
•
Compatible con Drupal 6, 7, y 8 (salvo bugs)
•
Ofrece steps propios de Drupal como clear
cache, log out, comprobaciones sobre
regiones y otros
•
Detecta e incorpora otros steps provistos por
otros módulos
Drupal Extension Steps
Drupal Extension Drivers
Escribir steps propios
•
Crear subclase de DrupalContext
•
Añadir métodos con su expresión regular
•
Añadir Behat hooks
Enlaces
•
http://behat.org/
•
http://mink.behat.org/
•
https://portland2013.drupal.org/session/behat-behavior
al-driven-development-and-selenium-drupal
•
https://groups.drupal.org/behat
•
http://drupalwatchdog.com/2/2/behat-mink
•
http://dspeak.com/drupalextension/
¿Preguntas?
Descargar