BDD y Test automatizados
1
Universidad Pontificia de Salamanca
Máster Universitario en Informática Móvil
Sofía Swidarowicz Andrade
17 de Abril de 2015
2
Sofía Swidarowicz Andrade
iOS Developer en Medianet Software
www.phyline.com
Pinitos con BDD
Información: ¡Quiero compartirla!
¿De qué hablaremos hoy?
3
Historia del desarrollo ágil
- Scrum
- Kanban
- Programación Extrema
- TDD
Behaviour Driven Development
- Estructura proyecto
Historia del Desarrollo Ágil
Edward Deming
Calidad Total
Organización Procesos
Cíclo producción
Esfuerzo en Equipo
4
5
1950 - Ciclo PDCA (Plan, Do, Check,
Act). Walter A, Shewhart
Historia del Desarrollo Ágil
Kent Beck
Patrones de diseño de software
Smalltalk
Desarrollo guiado por pruebas
6
Software de programación extrema o
eXtreme Programming
Metodología Ágil
• Reconoce las distintas interacciones y cambios que
ocurren en todo desarrollo de software
• Desarrollar software no es un proceso que involucra
sólo al desarrollador (pica código) sino a todos los
participantes del ciclo
7
1995 - Scrum
Product Backlog Sprint Planning Sprint Backlog
N Weeks
Sprint
Retrospective
Finished Work
8
Stakeholders
Product Owner
Scrum Master
Team Members
9
1997 - Desarrollo guiado por
funcionalidades / Feature Driven
Development (FDD)
TDD - Test Driven Development
Primero
desarrollamos el
test,
y luego la aplicación
Realizar pruebas
unitarias
para el código que
debemos construir
10
1999 - Programación Extrema /
Extreme Programming (XP)
Historias de Usuario y
Planificación de
Releases
11
1999 - Programación Extrema /
Extreme Programming (XP)
- JUnit
- TDD
- Refactor
Integración
continua
12
2007 - Kanban para el desarrollo de software
Roles y
Procesos
13
Desarrollo guiado por comportamiento /
Behaviour Driven Development by Dan North
implementar una aplicación, o parte de
ella, mediante la descripción de su
comportamiento desde la perspectiva del
cliente
+
14
BDD - Behaviour Driven Development
Comunicación
Se usan ejemplos para ilustrar comportamientos
“The Business, Developers,
Testers,
Analysts and Managers”
15
16
Imagina que eres parte del equipo técnico (Desarrollador y
Testers) y tienes la tarea de colaborar con el equipo de
negocio (Business owners y Business Analysts).
Tienes que recabar los requerimientos de tu proyecto; estos
requerimientos serán los que el equipo de desarrollo
implementarán y los que el equipo de testing probarán.
Un ejemplo:
17
Un ejemplo:
18
Deberás añadir una característica nueva de búsqueda en tu
plataforma de E-Commerce móvil, que permitirá a los usuarios
hacer búsquedas de un producto en tu aplicación.
Esa búsqueda deberá mostrar los productos relacionados con el
patrón dado por el cliente.
1. Requisitos Funcionales
1.1 Funcionalidad de búsqueda
1.1.1 El usuario debe ser capaz de buscar un
producto.
1.1.2 Sólo los productos relacionados al string de
búsqueda deben ser mostrados.
Terminamos con:
19
BDD - Behaviour Driven Development
BDD - Behaviour Driven Development
¡Lo tenemos claro!
20
BDD - Behaviour Driven Development
Pero….
No especifican el comportamiento concreto del
sistema
Diseccionemos el primer punto:
1.1.1 El usuario debe ser capaz de buscar un producto.
21
BDD - Behaviour Driven Development
- ¿Cuál es la máxima longitud de la cadena en la
búsqueda?
Pero no especifica…
22
- ¿Cuál debería ser el resultado de la búsqueda
para un producto inválido?
- ¿Cuáles son los caracteres válidos que pueden
ser usados para la búsqueda?
BDD - Behaviour Driven Development
- Respuesta del Business Owner : La búsqueda
de productos no válidos deberían mostrar el
siguiente mensaje en el área de búsqueda:
Producto no encontrado.
Terminamos preguntando…de nuevo
23
- Pregunta al Business Owner : ¿Cuáles deberían
ser los resultados de la búsqueda si el usuario
busca un producto inválido?
BDD - Behaviour Driven Development
Interpretaciones múltiples o dudas
Problemas…
Algunos considerarán que un producto inválido
es aquel que no está presente en el inventario y
otros podrían considerarlo como un error en la
cadena de búsqueda
¿Qué es un producto inválido?
24
BDD - Behaviour Driven Development
No ofrecen más explicaciones de comportamiento
Problemas…
“Producto no encontrado”
25
¿se mostrará una nueva opción de
búsqueda al usuario?.
¿deberían mostrarse búsquedas similares/relacionadas?
BDD - Behaviour Driven Development
¿Qué concluimos?
1.- Los equipos de negocio y técnico se comunican
en dos niveles diferentes, el primero da requisitos
vagos y el segundo intenta ser muy preciso. Y ambos
obtienen resultados ambiguos.
26
2.- No se le da suficiente información al equipo de
negocio, así que no pueden generar nuevos escenarios.
Algunos detalles del proyecto se pierden en emails y
conversaciones telefónicas.
BDD - Behaviour Driven Development
¿Cómo podemos mejorar los requerimientos?
27
BDD - Behaviour Driven Development
“Cuándo el usuario busque, sin fallos de ortografía, el nombre
de un producto presente en el inventario. Todos los productos
con nombre similar deberán ser mostrados”.
Escribimos…Historias de Usuario
28
BDD - Behaviour Driven Development
Escribimos…Historias de Usuario
29
“Cuándo el usuario busque, sin fallos de ortografía, por el
nombre de un producto presente en el inventario. Los
resultados de la búsqueda deberían mostrar los
coincidentes primero y segundo los similares.”
BDD - Behaviour Driven Development
30
BDD - Behaviour Driven Development
Escribiremos los requisitos empleando
lenguaje natural (Human reading) en
inglés
Es necesario emplear un lenguaje que todo
el equipo pueda entender y exprese los
requisitos que se deben cumplir.
31
¡¡¡Entonces!!!
Requisitos
BDD - Behaviour Driven Development
criterio de
aceptación
Historias de
Usuario
32
BDD - Behaviour Driven Development
¿Cómo escribimos las Historias de Usuario?
As a [role] I want to [do] [something], so that I
[receive business benefit].
Tal que [rol] quiero [hacer] [algo], de tal forma
que [recibo beneficios].
33
BDD - Behaviour Driven Development
De manera que <suceda algo>
Escenario: <Descripción de la historia>
Como <rol>

Quiero <acción>

¿Cómo escribimos las Historias de Usuario?
34
BDD - Behaviour Driven Development
Given (Dado)
When (Cuando)
Then (Entonces)
And (Y), But (Pero)
Llevará al sistema a un estado conocido
antes de interactuar con el usuario
https://github.com/cucumber/cucumber/wiki/Given-When-Then
Describe la acción clave que
realiza el usuario
Salida resultados observables
relacionados al valor o beneficio
del negocio
Para separar cuando se tienen
muchos Givens o Then
35
BDD - Behaviour Driven Development
Gherkin
When some action by the actor
Feature
Background:
Scenario: Some determinable business situation
Given some precondition
And some other precondition
And some other action
And something else we can check happens too
And yet another action
Then some testable outcome is achieved
36
BDD - Behaviour Driven Development
Feature: Search for items in our mobile app
This feature is very important because it will allow users to
filter products
Scenario: When a user searches, without spelling mistake,
for a product name present in inventory. All the products
with equal name should be displayed first and second the
similar
37
BDD - Behaviour Driven Development
38
Given User is on the main page of our app
When User goes to the search bar
And searches for iPhones
Then search page should be updated with the lists of iPhone first
And show the similar next
BDD - Behaviour Driven Development
Historias de
Usuario
Escenario
+
criterio de
aceptación
39
El código debe evaluarse continuamente para asegurar
que se realizan las especificaciones del cliente
BDD - Behaviour Driven Development
¿Cómo compruebo que el proyecto avanza
de acuerdo a las especificaciones?
40
BDD - Behaviour Driven Development
…¿Y Ahora? ¿cómo implemento todo esto?
41
BDD - Behaviour Driven Development
1.- Se elige un escenario.
2.- Se implementa el código
3.- ¿Pasa la prueba?
No —> Vuelve al paso 2
4.- Cuando pase el test se da por bueno
5.- Done con este escenario
42
BDD - Behaviour Driven Development
y vuelvo a evaluar.
Evolutivo
1.- Se hace una modificación.
2. Se pasa un test: ERROR
A: Si escenario correcto, he metido un bug.
B: Si la prueba no se ajusta al código, modifico la prueba
C: Si la especificación a cambiado, desecho la prueba
43
BDD - Behaviour Driven Development
1.- Se elige un escenario.
2.- Se implementa el código
3.- ¿Pasa la prueba?
No —> Vuelve al paso 2
4.- Cuando pase el test se da por bueno
5.- Done con este escenario
1.- Se elige un escenario.
2.- Se implementa el código
3.- ¿Pasa la prueba?
No —> Vuelve al paso 2
4.- Cuando pase el test se da por bueno
5.- Done con este escenario
1.- Se elige un escenario.
2.- Se implementa el código
3.- ¿Pasa la prueba?
No —> Vuelve al paso 2
4.- Cuando pase el test se da por bueno
5.- Done con este escenario
44
BDD - Behaviour Driven Development
Automatización
45
BDD - Behaviour Driven Development
Gherkin
+
46
BDD - Behaviour Driven Development
47
¿Cómo se comunica Cucumber con las diferentes
plataformas?
Cedar
48
iCuke
Kiwi
KIF
Robospock
Robotium
49
¿Cómo se comunica Cucumber con las diferentes
plataformas?
Espresso
(iOS-Android)
(Android)
Selenium
(Android)
50
¿Cómo se comunica Cucumber con las diferentes
plataformas?
¿Cómo se comunica Cucumber con las diferentes
plataformas?
Gestos: tocar, swipes, escribir
Aserciones: comprobar que el elemento existe
o posee cierta información
Screenshots: captura de pantalla del estado del
dispositivo
52
¿Cómo se comunica Cucumber con las diferentes
plataformas?
Conjunto de librerías que permiten probar la
funcionalidad de aplicaciones nativas o híbridas
iOS
Client Computer
Calabash ruby client
library
Calabash
http Server
Device / Simulator
UIAutomator
Your App
Calabash
Framework
Features
http://blog.lesspainful.com/2012/03/07/Calabash/
53
¿Cómo se comunica Calabash con las diferentes
plataformas?
Android
Client Computer
Calabash ruby client
library
Calabash
http Server
Device / Simulator
Instrumentation
Features
http://blog.lesspainful.com/2012/03/07/Calabash/
Your App
54
¿Cómo se comunica Calabash con las diferentes
plataformas?
iOS
AccessibilityIdentifier
UI Elements
¿Cómo identifico a los elementos con los que voy a
interactuar?
55
Android
id UI elements
56
¿Cómo identifico a los elementos con los que voy a
interactuar?
Web
css elements
id elements
57
¿Cómo identifico a los elementos con los que voy a
interactuar?
BDD - Behaviour Driven Development
Escenarios
Feature: Login
@invalid

Scenario: Add site - Invalid login
Given I am about to login
When I enter invalid credentials
Then I am presented with an error message to correct credentials
@valid

Scenario: Add site
Given I am about to login
When I enter valid credentials
Then I am successfully authenticated
And I can see posts for the site
Tags
Tags
58
BDD - Behaviour Driven Development
Given(/^I am about to login$/) do
@current_page = page(LoginPage).wait_for_element(timeout: 30)
@current_page.self_hosted_site
end
When(/^I enter invalid credentials$/) do
user = CREDENTIALS[:invalid_user]
@current_page = @current_page.login(user[:username], user[:password],
CREDENTIALS[:site])
end
Then(/^I am presented with an error message to correct credentials$/) do
#TODO
end
Steps
59
BDD - Behaviour Driven Development
Page Objects / Screen Objects
class LoginPage
elementLabel : {
:iOS => (“UILabel id:’labelTitle’ ”);
:android => (“com.myapp.label id:’labelTitle’ ”)
}
elementButton : {
:iOS => (“UIButton id:’btnLogin’ ”);
:android => (“com.myapp.buttonLogin id:’btnLogin’ ”)
}
elementUser : {
:iOS => (“UITextField id:’txtUser’ ”);
:android => (“com.myapp.textField id:’txtPassword’ ”)
}
def wait_for_element(timeout)
wait(elementLabel, timeout: 30)
end
def login(user, password)
fill(elementUser, user)
fill(elementUser, password)
touch(elementButton)
end
end
60
BDD - Behaviour Driven Development
Estructura de un proyecto en Cucumber
config
├ features <- Dónde irán las features

│ ├ android <- Definiciones concretas para Android
│ │ ├ pages <- Screen Objects para Android

│ │ ├ support <- Soporte para Android

│ ├ ios

│ │ ├ pages <- Definiciones concretas para iOS

│ │ ├ support <- Screen Objects para iOS

│ ├ step_definitions <- Definición de los steps

│ ├ support <- Soporte genérico

├ apps <- Guardaremos los binarios de las apps
61
<- Guardaremos la config genérica

BDD - Behaviour Driven Development
VAMOS A PRACTICARRRRRR!!!!!
62
BDD - Behaviour Driven Development
63
Debo ser un usuario con credenciales válidas
Quiero realizar una app que liste a mis superheroes
favoritos
¿Qué haremos?
Debo poder registrarme
Debo poder ver el detalle de mis superheroes
ETC, vamos a crear nuevos escenarios
BDD - Behaviour Driven Development
64
Given I am in login screen
Then I’m inside my application
Scenario: I want to access Superheroes app
When I fill valid“username” and “password” information
And try to log in successfully
Imperativo
And I see my superheroes list
BDD - Behaviour Driven Development
65
Given I am an unauthenticated guest
And I have a valid user account
When I log in
Then I’m inside my application
Scenario: I want to access Superheroes app
When I try to access restricted area
Declarativo
And I see my superheroes list
BDD - Behaviour Driven Development
66
https://github.com/phynet/BDD-CALABASH-Example
Descargar:
https://github.com/phynet/Heroes-iOS-Calabash-Example
https://github.com/phynet/Heroes-Android-Calabash-Example
Proyecto BDD:
Binary iOS:
Binary Android:
Enlaces de interés
https://groups.google.com/forum/#!forum/calabash-ios
67
Calabash-ios groups foro
https://groups.google.com/forum/#!forum/calabash-
android
Calabash-android groups foro
Enlaces de interés
http://developer.xamarin.com/guides/testcloud/calabash/
68
Xamarin calabash
http://developer.xamarin.com/guides/testcloud/calabash/
calabash-query-syntax/#Touching
Xamarin query
Enlaces de interés
https://github.com/calabash/calabash-ios
69
Calabash-ios github
https://github.com/calabash/calabash-android
Calabash-android github

BDD y tests automatizados

  • 1.
    BDD y Testautomatizados 1 Universidad Pontificia de Salamanca Máster Universitario en Informática Móvil Sofía Swidarowicz Andrade 17 de Abril de 2015
  • 2.
    2 Sofía Swidarowicz Andrade iOSDeveloper en Medianet Software www.phyline.com Pinitos con BDD Información: ¡Quiero compartirla!
  • 3.
    ¿De qué hablaremoshoy? 3 Historia del desarrollo ágil - Scrum - Kanban - Programación Extrema - TDD Behaviour Driven Development - Estructura proyecto
  • 4.
    Historia del DesarrolloÁgil Edward Deming Calidad Total Organización Procesos Cíclo producción Esfuerzo en Equipo 4
  • 5.
    5 1950 - CicloPDCA (Plan, Do, Check, Act). Walter A, Shewhart
  • 6.
    Historia del DesarrolloÁgil Kent Beck Patrones de diseño de software Smalltalk Desarrollo guiado por pruebas 6 Software de programación extrema o eXtreme Programming
  • 7.
    Metodología Ágil • Reconocelas distintas interacciones y cambios que ocurren en todo desarrollo de software • Desarrollar software no es un proceso que involucra sólo al desarrollador (pica código) sino a todos los participantes del ciclo 7
  • 8.
    1995 - Scrum ProductBacklog Sprint Planning Sprint Backlog N Weeks Sprint Retrospective Finished Work 8 Stakeholders Product Owner Scrum Master Team Members
  • 9.
    9 1997 - Desarrolloguiado por funcionalidades / Feature Driven Development (FDD)
  • 10.
    TDD - TestDriven Development Primero desarrollamos el test, y luego la aplicación Realizar pruebas unitarias para el código que debemos construir 10
  • 11.
    1999 - ProgramaciónExtrema / Extreme Programming (XP) Historias de Usuario y Planificación de Releases 11
  • 12.
    1999 - ProgramaciónExtrema / Extreme Programming (XP) - JUnit - TDD - Refactor Integración continua 12
  • 13.
    2007 - Kanbanpara el desarrollo de software Roles y Procesos 13
  • 14.
    Desarrollo guiado porcomportamiento / Behaviour Driven Development by Dan North implementar una aplicación, o parte de ella, mediante la descripción de su comportamiento desde la perspectiva del cliente + 14
  • 15.
    BDD - BehaviourDriven Development Comunicación Se usan ejemplos para ilustrar comportamientos “The Business, Developers, Testers, Analysts and Managers” 15
  • 16.
  • 17.
    Imagina que eresparte del equipo técnico (Desarrollador y Testers) y tienes la tarea de colaborar con el equipo de negocio (Business owners y Business Analysts). Tienes que recabar los requerimientos de tu proyecto; estos requerimientos serán los que el equipo de desarrollo implementarán y los que el equipo de testing probarán. Un ejemplo: 17
  • 18.
    Un ejemplo: 18 Deberás añadiruna característica nueva de búsqueda en tu plataforma de E-Commerce móvil, que permitirá a los usuarios hacer búsquedas de un producto en tu aplicación. Esa búsqueda deberá mostrar los productos relacionados con el patrón dado por el cliente.
  • 19.
    1. Requisitos Funcionales 1.1Funcionalidad de búsqueda 1.1.1 El usuario debe ser capaz de buscar un producto. 1.1.2 Sólo los productos relacionados al string de búsqueda deben ser mostrados. Terminamos con: 19 BDD - Behaviour Driven Development
  • 20.
    BDD - BehaviourDriven Development ¡Lo tenemos claro! 20
  • 21.
    BDD - BehaviourDriven Development Pero…. No especifican el comportamiento concreto del sistema Diseccionemos el primer punto: 1.1.1 El usuario debe ser capaz de buscar un producto. 21
  • 22.
    BDD - BehaviourDriven Development - ¿Cuál es la máxima longitud de la cadena en la búsqueda? Pero no especifica… 22 - ¿Cuál debería ser el resultado de la búsqueda para un producto inválido? - ¿Cuáles son los caracteres válidos que pueden ser usados para la búsqueda?
  • 23.
    BDD - BehaviourDriven Development - Respuesta del Business Owner : La búsqueda de productos no válidos deberían mostrar el siguiente mensaje en el área de búsqueda: Producto no encontrado. Terminamos preguntando…de nuevo 23 - Pregunta al Business Owner : ¿Cuáles deberían ser los resultados de la búsqueda si el usuario busca un producto inválido?
  • 24.
    BDD - BehaviourDriven Development Interpretaciones múltiples o dudas Problemas… Algunos considerarán que un producto inválido es aquel que no está presente en el inventario y otros podrían considerarlo como un error en la cadena de búsqueda ¿Qué es un producto inválido? 24
  • 25.
    BDD - BehaviourDriven Development No ofrecen más explicaciones de comportamiento Problemas… “Producto no encontrado” 25 ¿se mostrará una nueva opción de búsqueda al usuario?. ¿deberían mostrarse búsquedas similares/relacionadas?
  • 26.
    BDD - BehaviourDriven Development ¿Qué concluimos? 1.- Los equipos de negocio y técnico se comunican en dos niveles diferentes, el primero da requisitos vagos y el segundo intenta ser muy preciso. Y ambos obtienen resultados ambiguos. 26 2.- No se le da suficiente información al equipo de negocio, así que no pueden generar nuevos escenarios. Algunos detalles del proyecto se pierden en emails y conversaciones telefónicas.
  • 27.
    BDD - BehaviourDriven Development ¿Cómo podemos mejorar los requerimientos? 27
  • 28.
    BDD - BehaviourDriven Development “Cuándo el usuario busque, sin fallos de ortografía, el nombre de un producto presente en el inventario. Todos los productos con nombre similar deberán ser mostrados”. Escribimos…Historias de Usuario 28
  • 29.
    BDD - BehaviourDriven Development Escribimos…Historias de Usuario 29 “Cuándo el usuario busque, sin fallos de ortografía, por el nombre de un producto presente en el inventario. Los resultados de la búsqueda deberían mostrar los coincidentes primero y segundo los similares.”
  • 30.
    BDD - BehaviourDriven Development 30
  • 31.
    BDD - BehaviourDriven Development Escribiremos los requisitos empleando lenguaje natural (Human reading) en inglés Es necesario emplear un lenguaje que todo el equipo pueda entender y exprese los requisitos que se deben cumplir. 31 ¡¡¡Entonces!!!
  • 32.
    Requisitos BDD - BehaviourDriven Development criterio de aceptación Historias de Usuario 32
  • 33.
    BDD - BehaviourDriven Development ¿Cómo escribimos las Historias de Usuario? As a [role] I want to [do] [something], so that I [receive business benefit]. Tal que [rol] quiero [hacer] [algo], de tal forma que [recibo beneficios]. 33
  • 34.
    BDD - BehaviourDriven Development De manera que <suceda algo> Escenario: <Descripción de la historia> Como <rol>
 Quiero <acción>
 ¿Cómo escribimos las Historias de Usuario? 34
  • 35.
    BDD - BehaviourDriven Development Given (Dado) When (Cuando) Then (Entonces) And (Y), But (Pero) Llevará al sistema a un estado conocido antes de interactuar con el usuario https://github.com/cucumber/cucumber/wiki/Given-When-Then Describe la acción clave que realiza el usuario Salida resultados observables relacionados al valor o beneficio del negocio Para separar cuando se tienen muchos Givens o Then 35
  • 36.
    BDD - BehaviourDriven Development Gherkin When some action by the actor Feature Background: Scenario: Some determinable business situation Given some precondition And some other precondition And some other action And something else we can check happens too And yet another action Then some testable outcome is achieved 36
  • 37.
    BDD - BehaviourDriven Development Feature: Search for items in our mobile app This feature is very important because it will allow users to filter products Scenario: When a user searches, without spelling mistake, for a product name present in inventory. All the products with equal name should be displayed first and second the similar 37
  • 38.
    BDD - BehaviourDriven Development 38 Given User is on the main page of our app When User goes to the search bar And searches for iPhones Then search page should be updated with the lists of iPhone first And show the similar next
  • 39.
    BDD - BehaviourDriven Development Historias de Usuario Escenario + criterio de aceptación 39
  • 40.
    El código debeevaluarse continuamente para asegurar que se realizan las especificaciones del cliente BDD - Behaviour Driven Development ¿Cómo compruebo que el proyecto avanza de acuerdo a las especificaciones? 40
  • 41.
    BDD - BehaviourDriven Development …¿Y Ahora? ¿cómo implemento todo esto? 41
  • 42.
    BDD - BehaviourDriven Development 1.- Se elige un escenario. 2.- Se implementa el código 3.- ¿Pasa la prueba? No —> Vuelve al paso 2 4.- Cuando pase el test se da por bueno 5.- Done con este escenario 42
  • 43.
    BDD - BehaviourDriven Development y vuelvo a evaluar. Evolutivo 1.- Se hace una modificación. 2. Se pasa un test: ERROR A: Si escenario correcto, he metido un bug. B: Si la prueba no se ajusta al código, modifico la prueba C: Si la especificación a cambiado, desecho la prueba 43
  • 44.
    BDD - BehaviourDriven Development 1.- Se elige un escenario. 2.- Se implementa el código 3.- ¿Pasa la prueba? No —> Vuelve al paso 2 4.- Cuando pase el test se da por bueno 5.- Done con este escenario 1.- Se elige un escenario. 2.- Se implementa el código 3.- ¿Pasa la prueba? No —> Vuelve al paso 2 4.- Cuando pase el test se da por bueno 5.- Done con este escenario 1.- Se elige un escenario. 2.- Se implementa el código 3.- ¿Pasa la prueba? No —> Vuelve al paso 2 4.- Cuando pase el test se da por bueno 5.- Done con este escenario 44
  • 45.
    BDD - BehaviourDriven Development Automatización 45
  • 46.
    BDD - BehaviourDriven Development Gherkin + 46
  • 47.
    BDD - BehaviourDriven Development 47
  • 48.
    ¿Cómo se comunicaCucumber con las diferentes plataformas? Cedar 48 iCuke Kiwi KIF
  • 49.
    Robospock Robotium 49 ¿Cómo se comunicaCucumber con las diferentes plataformas? Espresso
  • 50.
  • 51.
    ¿Cómo se comunicaCucumber con las diferentes plataformas?
  • 52.
    Gestos: tocar, swipes,escribir Aserciones: comprobar que el elemento existe o posee cierta información Screenshots: captura de pantalla del estado del dispositivo 52 ¿Cómo se comunica Cucumber con las diferentes plataformas? Conjunto de librerías que permiten probar la funcionalidad de aplicaciones nativas o híbridas
  • 53.
    iOS Client Computer Calabash rubyclient library Calabash http Server Device / Simulator UIAutomator Your App Calabash Framework Features http://blog.lesspainful.com/2012/03/07/Calabash/ 53 ¿Cómo se comunica Calabash con las diferentes plataformas?
  • 54.
    Android Client Computer Calabash rubyclient library Calabash http Server Device / Simulator Instrumentation Features http://blog.lesspainful.com/2012/03/07/Calabash/ Your App 54 ¿Cómo se comunica Calabash con las diferentes plataformas?
  • 55.
    iOS AccessibilityIdentifier UI Elements ¿Cómo identificoa los elementos con los que voy a interactuar? 55
  • 56.
    Android id UI elements 56 ¿Cómoidentifico a los elementos con los que voy a interactuar?
  • 57.
    Web css elements id elements 57 ¿Cómoidentifico a los elementos con los que voy a interactuar?
  • 58.
    BDD - BehaviourDriven Development Escenarios Feature: Login @invalid
 Scenario: Add site - Invalid login Given I am about to login When I enter invalid credentials Then I am presented with an error message to correct credentials @valid
 Scenario: Add site Given I am about to login When I enter valid credentials Then I am successfully authenticated And I can see posts for the site Tags Tags 58
  • 59.
    BDD - BehaviourDriven Development Given(/^I am about to login$/) do @current_page = page(LoginPage).wait_for_element(timeout: 30) @current_page.self_hosted_site end When(/^I enter invalid credentials$/) do user = CREDENTIALS[:invalid_user] @current_page = @current_page.login(user[:username], user[:password], CREDENTIALS[:site]) end Then(/^I am presented with an error message to correct credentials$/) do #TODO end Steps 59
  • 60.
    BDD - BehaviourDriven Development Page Objects / Screen Objects class LoginPage elementLabel : { :iOS => (“UILabel id:’labelTitle’ ”); :android => (“com.myapp.label id:’labelTitle’ ”) } elementButton : { :iOS => (“UIButton id:’btnLogin’ ”); :android => (“com.myapp.buttonLogin id:’btnLogin’ ”) } elementUser : { :iOS => (“UITextField id:’txtUser’ ”); :android => (“com.myapp.textField id:’txtPassword’ ”) } def wait_for_element(timeout) wait(elementLabel, timeout: 30) end def login(user, password) fill(elementUser, user) fill(elementUser, password) touch(elementButton) end end 60
  • 61.
    BDD - BehaviourDriven Development Estructura de un proyecto en Cucumber config ├ features <- Dónde irán las features
 │ ├ android <- Definiciones concretas para Android │ │ ├ pages <- Screen Objects para Android
 │ │ ├ support <- Soporte para Android
 │ ├ ios
 │ │ ├ pages <- Definiciones concretas para iOS
 │ │ ├ support <- Screen Objects para iOS
 │ ├ step_definitions <- Definición de los steps
 │ ├ support <- Soporte genérico
 ├ apps <- Guardaremos los binarios de las apps 61 <- Guardaremos la config genérica

  • 62.
    BDD - BehaviourDriven Development VAMOS A PRACTICARRRRRR!!!!! 62
  • 63.
    BDD - BehaviourDriven Development 63 Debo ser un usuario con credenciales válidas Quiero realizar una app que liste a mis superheroes favoritos ¿Qué haremos? Debo poder registrarme Debo poder ver el detalle de mis superheroes ETC, vamos a crear nuevos escenarios
  • 64.
    BDD - BehaviourDriven Development 64 Given I am in login screen Then I’m inside my application Scenario: I want to access Superheroes app When I fill valid“username” and “password” information And try to log in successfully Imperativo And I see my superheroes list
  • 65.
    BDD - BehaviourDriven Development 65 Given I am an unauthenticated guest And I have a valid user account When I log in Then I’m inside my application Scenario: I want to access Superheroes app When I try to access restricted area Declarativo And I see my superheroes list
  • 66.
    BDD - BehaviourDriven Development 66 https://github.com/phynet/BDD-CALABASH-Example Descargar: https://github.com/phynet/Heroes-iOS-Calabash-Example https://github.com/phynet/Heroes-Android-Calabash-Example Proyecto BDD: Binary iOS: Binary Android:
  • 67.
    Enlaces de interés https://groups.google.com/forum/#!forum/calabash-ios 67 Calabash-iosgroups foro https://groups.google.com/forum/#!forum/calabash- android Calabash-android groups foro
  • 68.
    Enlaces de interés http://developer.xamarin.com/guides/testcloud/calabash/ 68 Xamarincalabash http://developer.xamarin.com/guides/testcloud/calabash/ calabash-query-syntax/#Touching Xamarin query
  • 69.
    Enlaces de interés https://github.com/calabash/calabash-ios 69 Calabash-iosgithub https://github.com/calabash/calabash-android Calabash-android github