Automatización de interfaces e introducción a bdd

Post on 26-May-2015

506 views 0 download

description

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

Transcript of Automatización de interfaces e introducción a bdd

Pruebas de interfaz automatizadas

e introducción a BDD

Santiago Rodríguez Sordo

@santiagorodsor

introducción a BDD

YAGNI

1/234

Aproximacióncumplir las especificacioneslenguaje coloquial

evalúan el código continuamente con las especificaciones

2/234

BDD

Proceso de desarrollo de software

Specification by Example.

Son casos reales3/234

BDD

¿¿¿ 3/234 ???

BDDRequisitos y comportamientos

Historia de usuario

Criterio de aceptación

BDD, ¿qué requisitos?

Historia de usuario Criterio de aceptación

Escenario

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

BDD, ¿cómo los expreso?

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

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.

BDD, ¿cómo los expreso?Gherkin

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

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

Tus features tu implementación guiar deben,

no esta reflejar.

¿funcionará?

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!

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.

Todo el procesoHistoria de usuario feature

Feature 1● Scenario1● Scenario2● Scenario3

Feature 2● Scenario1● Scenario2● Scenario3

Feature 3● Scenario1● Scenario2● Scenario3

… pero … … son muchos escenarios ...

… utiliza la fuerza ...

Automatización de interfaz

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

La fuerz… AUTOMATIZACIÓN

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

:( :(

AUTOMATIZACIÓNNativo

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

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.

AUTOMATIZACIÓNiOS

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

KiwiKIF

AUTOMATIZACIÓNCucumber

CalabashFrankiCuke

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

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

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

¿Cómo lo hacen?

Cucumberfeatures/myfeature.feature

features/steps/myfeature_step.rb

Cucumber

Cucumber

Step by step

Step by step

Make your own steps

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

Make your own steps

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.

Cucumber Wrap Up

Gherkin Steps

Frank

Calabash

iCuke

Si no lo veo no lo creo

Ya lo veo claro ...

Probaré ...

Ya lo veo claro ...

Probaré ...

Ya lo veo claro ...

Probaré ...

Ya lo veo claro ...

Probaré ...

Hasta el infinitoooo ...

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. ^_^

Entonces... ¡ Cucumber es BDD!

NO !!!!

Se usa Cucumber para BDD

En BDD se tienen las pruebas alineadas con los requerimientos.

Para ayudarnos usamos Cucumber.

Some tricks

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.

Punto de apoyo = identificadorUIAccessibilityIdentification

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

@property(nonatomic, copy) NSString *accessibilityIdentifier

Page Object Pattern

Page Object Pattern

Page Object Pattern

Page Object Pattern

Queries

Queries

Queries

Queries

wait

wait

wait

services

services

Wrap up:

http://www.testingwithfrank.com/

http://cukes.info/

https://cucumber.pro/

@santiagorodsor