71
Pruebas de interfaz automatizadas e introducción a BDD Santiago Rodríguez Sordo @santiagorodsor

Automatización de interfaces e introducción a bdd

Embed Size (px)

DESCRIPTION

Experiencias y ejemplos sobre la automatización de pruebas de interfaces de usuario, incluyendo una introducción a BDD.

Citation preview

Page 1: Automatización de interfaces e introducción a bdd

Pruebas de interfaz automatizadas

e introducción a BDD

Santiago Rodríguez Sordo

@santiagorodsor

Page 2: Automatización de interfaces e introducción a bdd

introducción a BDD

Page 3: Automatización de interfaces e introducción a bdd

YAGNI

1/234

Page 4: Automatización de interfaces e introducción a bdd

Aproximacióncumplir las especificacioneslenguaje coloquial

evalúan el código continuamente con las especificaciones

2/234

Page 5: Automatización de interfaces e introducción a bdd

BDD

Proceso de desarrollo de software

Specification by Example.

Son casos reales3/234

Page 6: Automatización de interfaces e introducción a bdd

BDD

¿¿¿ 3/234 ???

Page 7: Automatización de interfaces e introducción a bdd

BDDRequisitos y comportamientos

Historia de usuario

Criterio de aceptación

Page 8: Automatización de interfaces e introducción a bdd

BDD, ¿qué requisitos?

Historia de usuario Criterio de aceptación

Escenario

Page 9: Automatización de interfaces e introducción a bdd

BDD, ¿cómo los expreso?

Escenario: Veré mi nombre al entrar en la app.

Como usuario

Quiero entrar en la aplicación

De manera que vea mi nombre

Page 10: Automatización de interfaces e introducción a bdd

BDD, ¿cómo los expreso?

Escenario: <Descripción de la historia>Como <rol>Quiero <acción>De manera que <suceda algo>

Page 11: Automatización de interfaces e introducción a bdd

BDD, ¿cómo los expreso?Escenario: Un usuario ve todos los mensajes nuevos

Cómo usuario de la aplicación llego a la pantalla de notificaciones

Dado que veo que tengo 3 notificaciones de mensaje.

Cuando entro en la página de mensajes.

Observo que hay 3 mensajes nuevos.

Dado que entro en cada uno de ellos.

Entonces veo que no tengo ningún mensaje.

Page 12: Automatización de interfaces e introducción a bdd

BDD, ¿cómo los expreso?Gherkin

Page 13: Automatización de interfaces e introducción a bdd

GherkinFeatureBackground:Scenario: Some determinable business situation Given some precondition And some other precondition When some action by the actor And some other action And yet another action Then some testable outcome is achieved And something else we can check happens too

Page 14: Automatización de interfaces e introducción a bdd

Cheatsheet

Given (“dado”), llevará al sistema a un estado conocido

When (“cuando”), describe la acción clave

Then (“entonces”), describe salidas observables

And (“ y ”) But (“ pero “)

https://github.com/cucumber/cucumber/wiki/Given-When-Then

Page 15: Automatización de interfaces e introducción a bdd

Tus features tu implementación guiar deben,

no esta reflejar.

Page 16: Automatización de interfaces e introducción a bdd

¿funcionará?

Page 17: Automatización de interfaces e introducción a bdd

Proceso

1. Se elige un escenario.2. Se implementa el código 3. ¿Pasa la prueba?

No -> Vuelve al paso 24. Cuando pase el test se da por bueno.5. Escenario Done!

Page 18: Automatización de interfaces e introducción a bdd

Evolutivo1. 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 y

vuelvo a evaluar.C: Si la especificación a cambiado, desecho la prueba.

Page 19: Automatización de interfaces e introducción a bdd

Todo el procesoHistoria de usuario feature

Feature 1● Scenario1● Scenario2● Scenario3

Feature 2● Scenario1● Scenario2● Scenario3

Feature 3● Scenario1● Scenario2● Scenario3

Page 20: Automatización de interfaces e introducción a bdd

… pero … … son muchos escenarios ...

… utiliza la fuerza ...

Page 21: Automatización de interfaces e introducción a bdd

Automatización de interfaz

Page 22: Automatización de interfaces e introducción a bdd

Disponemos de máquinas, que hagan el trabajo repetitivo.

La fuerz… AUTOMATIZACIÓN

Page 23: Automatización de interfaces e introducción a bdd

La solución única no existeScenario:

As a Mobile Developer BDD-lover quiero adelantar trabajo.

Given no hay manera buena de desarrollar para Android e iOS a la vez.

When busco una prueba única Android e iOS

Then encuentro una manera buena de automatizar Android e iOS a la vez. FAIL

PASS

PASS

:( :(

Page 24: Automatización de interfaces e introducción a bdd

AUTOMATIZACIÓNNativo

Instruments - UIAutomation ”.js”UIAutomator (Android) “.java”Appium - Webdriver (iOS, Android).js, ( lento :( y poco fiable)

Page 25: Automatización de interfaces e introducción a bdd

Apply: Appium http://appium.io/

PROs:- Utiliza las herramientas nativas de cada plataforma.- La interfaz es común (Android e iOS)

CONTRAs:- Lento.- Poco fiable.- No tiene waits bien soportados.

Page 26: Automatización de interfaces e introducción a bdd

AUTOMATIZACIÓNiOS

Cedar http://pivotallabs.com/test-driven-iphone-development-with-cedar/

KiwiKIF

Page 27: Automatización de interfaces e introducción a bdd

AUTOMATIZACIÓNCucumber

CalabashFrankiCuke

Page 28: Automatización de interfaces e introducción a bdd

Apply: Calabash http://calaba.sh/

PROs:- tiene muchos gestos soportados- utiliza una interfaz “común” para iOS y Android.- hay referencias de que se usa

CONTRAs:- intrusivo en iOS Projects- utiliza comandos de muy bajo nivel para muchas cosas

Page 29: Automatización de interfaces e introducción a bdd

Apply: iCuke https://github.com/unboxed/icuke

PROs:- acceso directo al runtime de la app vía HTTP- acciones inside iOS APIS- podría integrarse con calabash o cucumber

CONTRAs:- parece anticuado (2010)- demasiado incompleto

Page 30: Automatización de interfaces e introducción a bdd

Apply: Frank http://www.testingwithfrank.com/

PROs:- fácil de cargar entorno- “buena” experiencia simulator/idevice- no “intrusivo” en iOS projects- symbiote

CONTRAs:- mejorables gestos- utiliza comandos de muy bajo nivel para muchas cosas

Page 31: Automatización de interfaces e introducción a bdd

¿Cómo lo hacen?

Page 32: Automatización de interfaces e introducción a bdd

Cucumberfeatures/myfeature.feature

features/steps/myfeature_step.rb

Page 33: Automatización de interfaces e introducción a bdd

Cucumber

Page 34: Automatización de interfaces e introducción a bdd

Cucumber

Page 35: Automatización de interfaces e introducción a bdd

Step by step

Page 36: Automatización de interfaces e introducción a bdd

Step by step

Page 37: Automatización de interfaces e introducción a bdd

Make your own steps

Page 38: Automatización de interfaces e introducción a bdd

1. gem server2. browser, localhost:88083. frank-cucumber4.

Make your own steps

Page 39: Automatización de interfaces e introducción a bdd

selector + comando + parámetro

- (Array) frankly_map(selector, method_name, *method_args)

Ask Frank to execute an arbitrary Objective-C method on each view which matches the specified selector.

Page 40: Automatización de interfaces e introducción a bdd

Cucumber Wrap Up

Gherkin Steps

Frank

Calabash

iCuke

Page 41: Automatización de interfaces e introducción a bdd
Page 42: Automatización de interfaces e introducción a bdd

Si no lo veo no lo creo

Page 43: Automatización de interfaces e introducción a bdd

Ya lo veo claro ...

Probaré ...

Page 44: Automatización de interfaces e introducción a bdd

Ya lo veo claro ...

Probaré ...

Page 45: Automatización de interfaces e introducción a bdd

Ya lo veo claro ...

Probaré ...

Page 46: Automatización de interfaces e introducción a bdd

Ya lo veo claro ...

Probaré ...

Hasta el infinitoooo ...

Page 47: Automatización de interfaces e introducción a bdd
Page 48: Automatización de interfaces e introducción a bdd

No perdamos la especificación

Aplíquese:- no sólo como automatización- no en todas las combinaciones- con criterio- en el desarrollo- sin pensar que va a hacerte el código. ^_^

Page 49: Automatización de interfaces e introducción a bdd

Entonces... ¡ Cucumber es BDD!

NO !!!!

Page 50: Automatización de interfaces e introducción a bdd

Se usa Cucumber para BDD

En BDD se tienen las pruebas alineadas con los requerimientos.

Para ayudarnos usamos Cucumber.

Page 51: Automatización de interfaces e introducción a bdd

Some tricks

Page 52: Automatización de interfaces e introducción a bdd

Cuidado, pruebas automatizadas

El desarrollo cambia a menudo los puntos en los que se apoyan,hay que fijarlos en el desarrollo y todo el equipo debe responsabilizarse.

Page 53: Automatización de interfaces e introducción a bdd

Punto de apoyo = identificadorUIAccessibilityIdentification

“protocol used to associate a unique identifier with elements in your user interface”

@property(nonatomic, copy) NSString *accessibilityIdentifier

Page 54: Automatización de interfaces e introducción a bdd

Page Object Pattern

Page 55: Automatización de interfaces e introducción a bdd

Page Object Pattern

Page 56: Automatización de interfaces e introducción a bdd

Page Object Pattern

Page 57: Automatización de interfaces e introducción a bdd

Page Object Pattern

Page 58: Automatización de interfaces e introducción a bdd

Queries

Page 59: Automatización de interfaces e introducción a bdd

Queries

Page 60: Automatización de interfaces e introducción a bdd

Queries

Page 61: Automatización de interfaces e introducción a bdd

Queries

Page 62: Automatización de interfaces e introducción a bdd

wait

Page 63: Automatización de interfaces e introducción a bdd

wait

Page 64: Automatización de interfaces e introducción a bdd

wait

Page 65: Automatización de interfaces e introducción a bdd

services

Page 66: Automatización de interfaces e introducción a bdd

services

Page 67: Automatización de interfaces e introducción a bdd

Wrap up:

Page 68: Automatización de interfaces e introducción a bdd
Page 69: Automatización de interfaces e introducción a bdd
Page 70: Automatización de interfaces e introducción a bdd
Page 71: Automatización de interfaces e introducción a bdd

http://www.testingwithfrank.com/

http://cukes.info/

https://cucumber.pro/

@santiagorodsor