SlideShare una empresa de Scribd logo
1 de 74
Descargar para leer sin conexión
Frameworks para
testing móvil
Calabash vs Appium
¡Hola !
Enrique Sánchez
Tester & Automation Engineer
¿Quién soy?
• Head of QA
• Más de 5 años de experiencia en testing en empresas como
• Profesor en el grado de Ingeniería en Desarrollo de
Contenidos Digitales
• Co-organizador de #MADQA
¿PorquéesteSeminario?
Os voy a contar una historia…
Hace un par de años, tuve un proyecto en el que
me pidieron que automatizara pruebas para
una aplicación móvil multiplataforma…
Por multiplataforma era: HTML, iOS y Android.
Por supuesto cada una de las versiones las había
hecho una empresa diferente usando un
lenguaje diferente
(o eso me decían porque yo no veía el código ni el repositorio)
Si no hubiera sido una persona perezosa
hubiera tenido que hacer muchas cosas:
Aprender a programar en Objective-C
Aprender a programar tests para Android
Y hacerlo usando BDD
Por suerte soy una persona perezosa
Ya hay gente que se había peleado con esto y que
había planteado soluciones multiplataformas:
¿Dequévaentonceseste
seminario?
Conocer mejor cómo funcionan Calabash y
Appium y ver cómo podríamos trabajar de
forma eficiente con ellas.
Sin volvernos locos…
vaya…salióios8.3…ylosinstrumentshan
dejadodefuncionar
Sin tener que instalar o conocer miles de
tecnologías y lenguajes diferentes…
¡¡¡y sin creer que esto es magia!!!
Calabash
Calabash enables you to write and execute
automated acceptance tests of mobile apps.
Calabash is cross-platform, supporting Android
and iOS native apps.
Multiplataforma
Lenguaje
Test Framework
Approach
Embeber un server al que
enviar instrucciones
Instala Ruby (Usa RVM -> http://rvm.io/)
Instala las gemas necesarias
$>  gem  install  cucumber  
$>  gem  install  calabash-­‐cucumber      
$>  gem  install  calabash-­‐android
ANDROID
Comprueba que tienes una variable de entorno ANDROID_HOME
$>  echo  $ANDROID_HOME  
(Si no lo tenemos, exportarlo dentro de ~/.bahsrc o ~/.bash_profile)
$>  export  ANDROID_HOME=path/to/sdk  
Más info: https://github.com/calabash/calabash-­‐android
IOS
Instala la última versión de Xcode
Instala las Command Line Tools (http://osxdaily.com/2014/02/12/install-
command-line-tools-mac-os-x/)
Más info: https://github.com/calabash/calabash-­‐ios
Vamos a jugar un poco con un código de
prueba:
https://github.com/calabash/x-­‐platform-­‐example  
Donde dejaremos nuestras features
El código específico para Android
El código específico para iOS
La definición de los steps
El código de soporte
¿Cómo funciona Cucumber?
1º Carga todo lo que está en /support
2º Carga todo lo que está en /feature/
steps_definition
(Salvo que le digas otra cosa)
Cuando añadimos más código de simple de un
directorio features y un directorio
step_definition debemos de indicarle a
Cucumber cómo tiene que cargarlo
Aquí deberá de estar nuestra
configuración
¿Cómo sabe si tiene que usar iOS o Android?
Se lo dices por parámetro cuando ejecutas
Cucumber desde linea de comandos:
$>  cucumber  -­‐p  ios
¿Cómo carga la librería que tiene que cargar?
Dentro del fichero env.rb
¿Con eso vale?
No. ¿Os acordáis del cucumber.yml? Pues tienes
que decidir qué directorio es el que va a cargar
Dentro de estos directorios tienes que poner
código en una carpeta /support que permita
lanzar el dispositivo correspondiente
¿Noesmucha
configuración?
Sí
Por eso es necesario tener claro qué es lo que
hace y cómo funciona.
¿Cómo se ejecuta?
Android:
$> bundle  exec  calabash-­‐android  run  apps/
Workshop.apk  -­‐p  android  
iOS:
$> DEVICE_TARGET='iPhone  6  (8.1  Simulator)'  
APP_BUNDLE_PATH='apps/Workshop-­‐cal.app'  
bundle  exec  cucumber  -­‐p  ios  
Appium
Appium is an open source test automation
framework for use with native, hybrid and mobile
web apps.
It drives iOS and Android apps using the
WebDriver protocol.
Multiplataforma
Lenguaje
Test Framework
Agnóstico. Es una herramienta
de automatización no sólo de
testing
Approach
Usar los instrumentos nativos
del sistema operativo
Instala el cliente de Appium:
$>  npm  install  -­‐g  appium  
o descárgate el cliente para escritorio:
http://appium.io/downloads.html  
Instala las gemas necesarias
$>  sudo  gem  install  appium_lib
Vamos a jugar un poco con un código de
prueba:
https://github.com/appium/sample-­‐code
El archivo de configuración
La configuración específica
para Appium
La definición de los steps
El código de soporte
¿Cómo funciona Appium?
1º Utiliza la misma configuración que vimos para
Calabash
2º Emplea un fichero appium.txt que sirve como
configuración
¿Qué es appium.txt?
https://github.com/appium/appium/blob/master/docs/en/writing-­‐running-­‐appium/caps.md
¿Cómo sabe si tiene que usar iOS o Android?
Se lo dices por parámetro cuando ejecutas
Cucumber desde linea de comandos:
$> cucumber -p ios
¿Cómo carga la librería que tiene que cargar?
Sólo tienes una librería que te vale para todo:
appium_lib
¿Con eso vale?
No. ¿Os acordáis del cucumber.yml? Pues tienes
que decidir qué directorio es el que va a cargar
¿Como se ejecuta?
Android:
$> bundle  exec  cucumber  -­‐p  android  
iOS:
$> bundle  exec  cucumber  -­‐p  iOS  
¿Ynohayalgoqueme
permitaabstraerme?
PageObject
The Page Object pattern represents the screens
of your web app as a series of objects
¿Cuál es la idea?
Abstraernos de si estamos usando Calabash/
Appium y centrarnos en cómo trabajar con la
página
features steps pages
¿Cómo hacer pages eficientes?
Lo mejor es utilizar librerías que implementen
esto de manera sencilla.
page-object
https://github.com/cheezy/page-­‐object
Es una gema que implementa este patrón para
webdriver (lo que nos viene muy rebien si
estamos usando Appium)
¿Cómo debería de ser?
Definir los elementos de una página de manera
eficiente.
• ¿Cómo se accede a ellos? ¿Tienen siempre
ids? ¿Son iguales para las dos plataformas?
Haz a la página agnóstica de la plataforma:
• Si la aplicación no es igual para iOS que para
Android tendrás que empezar a añadir
código que luego tendrás que mantener
Buenas prácticas:
• Todos los elementos tendrían que ser accesibles de la misma
forma (ids, class, path…)
• Si no quieres complicar el código:
1. Scenarios independientemente de la tecnología
2. Steps lo más sencillos posibles
3. Pages claramente separadas en elementos y acciones
• Si quieres hacer Cross-Platform pon los “ids” de los
elementos en algún lugar que sea fácil de identificar si son
Android o iOS y que sean agnósticas de la implementación
de la page
https://github.com/enriquesanchezb/workshop-­‐appium-­‐calabash  
Preguntas?
Gracias!
Enrique Sánchez
enrique.sanchezbayuela@medianet.es
@EnriqueSanchezB

Más contenido relacionado

La actualidad más candente

Javascript para principiantes -Introducción
Javascript para principiantes -IntroducciónJavascript para principiantes -Introducción
Javascript para principiantes -IntroducciónOscar Josué Uh Pérez
 
Mi Primera Aplicacion en Google App Engine
Mi Primera Aplicacion en Google App EngineMi Primera Aplicacion en Google App Engine
Mi Primera Aplicacion en Google App Engineykro
 
Testing en BDD con Python y Behave
Testing en BDD con Python y BehaveTesting en BDD con Python y Behave
Testing en BDD con Python y BehaveMario IC
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoAgustin Ramos
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.jsINSIGNIA4U
 
Code Blast 2012 - Fast Mobile Prototyping
Code Blast 2012 - Fast Mobile PrototypingCode Blast 2012 - Fast Mobile Prototyping
Code Blast 2012 - Fast Mobile PrototypingINSIGNIA4U
 
Conceptos BáSicos Curso Online
Conceptos BáSicos                 Curso OnlineConceptos BáSicos                 Curso Online
Conceptos BáSicos Curso OnlineEdgar
 
Presentación estetoscopio
Presentación estetoscopioPresentación estetoscopio
Presentación estetoscopioJuan Rodríguez
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup
 
Análisis estático de código en Java
Análisis estático de código en JavaAnálisis estático de código en Java
Análisis estático de código en JavaCésar Hernández
 
Introduccion a TDD y XP en la Universidad de Santiago de Compostela
Introduccion a TDD y XP en la Universidad de Santiago de CompostelaIntroduccion a TDD y XP en la Universidad de Santiago de Compostela
Introduccion a TDD y XP en la Universidad de Santiago de CompostelaCarlos Ble
 

La actualidad más candente (20)

Java script
Java scriptJava script
Java script
 
Lenguaje JavaScript parte 1
Lenguaje JavaScript parte 1Lenguaje JavaScript parte 1
Lenguaje JavaScript parte 1
 
Jugando con javascript
Jugando con javascriptJugando con javascript
Jugando con javascript
 
legacy
legacylegacy
legacy
 
Javascript para principiantes -Introducción
Javascript para principiantes -IntroducciónJavascript para principiantes -Introducción
Javascript para principiantes -Introducción
 
Mi Primera Aplicacion en Google App Engine
Mi Primera Aplicacion en Google App EngineMi Primera Aplicacion en Google App Engine
Mi Primera Aplicacion en Google App Engine
 
Testing en BDD con Python y Behave
Testing en BDD con Python y BehaveTesting en BDD con Python y Behave
Testing en BDD con Python y Behave
 
JavaScript desde Cero
JavaScript desde CeroJavaScript desde Cero
JavaScript desde Cero
 
Clase2
Clase2Clase2
Clase2
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamiento
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.js
 
Code Blast 2012 - Fast Mobile Prototyping
Code Blast 2012 - Fast Mobile PrototypingCode Blast 2012 - Fast Mobile Prototyping
Code Blast 2012 - Fast Mobile Prototyping
 
Conceptos BáSicos Curso Online
Conceptos BáSicos                 Curso OnlineConceptos BáSicos                 Curso Online
Conceptos BáSicos Curso Online
 
BDD y tests automatizados
BDD y tests automatizadosBDD y tests automatizados
BDD y tests automatizados
 
Presentación estetoscopio
Presentación estetoscopioPresentación estetoscopio
Presentación estetoscopio
 
Introducción a Responsive Design
Introducción a Responsive DesignIntroducción a Responsive Design
Introducción a Responsive Design
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Análisis estático de código en Java
Análisis estático de código en JavaAnálisis estático de código en Java
Análisis estático de código en Java
 
TDD en java script
TDD en java scriptTDD en java script
TDD en java script
 
Introduccion a TDD y XP en la Universidad de Santiago de Compostela
Introduccion a TDD y XP en la Universidad de Santiago de CompostelaIntroduccion a TDD y XP en la Universidad de Santiago de Compostela
Introduccion a TDD y XP en la Universidad de Santiago de Compostela
 

Destacado

Cucumber - Curso de Automatización de Pruebas
Cucumber - Curso de Automatización de PruebasCucumber - Curso de Automatización de Pruebas
Cucumber - Curso de Automatización de PruebasTestingBaires
 
Cómo ser un Agile Tester (y no morir intentándolo)
Cómo ser un Agile Tester (y no morir intentándolo)Cómo ser un Agile Tester (y no morir intentándolo)
Cómo ser un Agile Tester (y no morir intentándolo)Enrique Sánchez-Bayuela
 
Using Selenium and Cucumber to test a Healthcare Information System
Using Selenium and Cucumber to test a Healthcare Information SystemUsing Selenium and Cucumber to test a Healthcare Information System
Using Selenium and Cucumber to test a Healthcare Information Systemandytinkham
 
Automated Testing with Ruby
Automated Testing with RubyAutomated Testing with Ruby
Automated Testing with RubyKeith Pitty
 
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile TestingBehavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile Testingdversaci
 
Behavior Driven Development and Automation Testing Using Cucumber
Behavior Driven Development and Automation Testing Using CucumberBehavior Driven Development and Automation Testing Using Cucumber
Behavior Driven Development and Automation Testing Using CucumberKMS Technology
 
Introduction to Selenium and Ruby
Introduction to Selenium and RubyIntroduction to Selenium and Ruby
Introduction to Selenium and RubyYnon Perek
 

Destacado (12)

Tests de aceptación con cucumber
Tests de aceptación con cucumberTests de aceptación con cucumber
Tests de aceptación con cucumber
 
Cucumber - Curso de Automatización de Pruebas
Cucumber - Curso de Automatización de PruebasCucumber - Curso de Automatización de Pruebas
Cucumber - Curso de Automatización de Pruebas
 
BDD in mobile apps
BDD in mobile appsBDD in mobile apps
BDD in mobile apps
 
Lecciones aprendidas con appium
Lecciones aprendidas con appiumLecciones aprendidas con appium
Lecciones aprendidas con appium
 
Cómo ser un Agile Tester (y no morir intentándolo)
Cómo ser un Agile Tester (y no morir intentándolo)Cómo ser un Agile Tester (y no morir intentándolo)
Cómo ser un Agile Tester (y no morir intentándolo)
 
Using Selenium and Cucumber to test a Healthcare Information System
Using Selenium and Cucumber to test a Healthcare Information SystemUsing Selenium and Cucumber to test a Healthcare Information System
Using Selenium and Cucumber to test a Healthcare Information System
 
Appium
AppiumAppium
Appium
 
Automated Testing with Ruby
Automated Testing with RubyAutomated Testing with Ruby
Automated Testing with Ruby
 
Workshop calabash appium
Workshop calabash appiumWorkshop calabash appium
Workshop calabash appium
 
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile TestingBehavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile Testing
 
Behavior Driven Development and Automation Testing Using Cucumber
Behavior Driven Development and Automation Testing Using CucumberBehavior Driven Development and Automation Testing Using Cucumber
Behavior Driven Development and Automation Testing Using Cucumber
 
Introduction to Selenium and Ruby
Introduction to Selenium and RubyIntroduction to Selenium and Ruby
Introduction to Selenium and Ruby
 

Similar a Workshop Calabash Appium

Similar a Workshop Calabash Appium (20)

Ingeniería inversa básica en android tomo ii
Ingeniería inversa básica en android tomo iiIngeniería inversa básica en android tomo ii
Ingeniería inversa básica en android tomo ii
 
Charla GDG Madrid: Cordova + AngularJS + Ionic
Charla GDG Madrid: Cordova + AngularJS + IonicCharla GDG Madrid: Cordova + AngularJS + Ionic
Charla GDG Madrid: Cordova + AngularJS + Ionic
 
Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Developing for Android (The movie)
Developing for Android (The movie)Developing for Android (The movie)
Developing for Android (The movie)
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
2154086 curso-c-c-con-clase
2154086 curso-c-c-con-clase2154086 curso-c-c-con-clase
2154086 curso-c-c-con-clase
 
Cursocpp
CursocppCursocpp
Cursocpp
 
Practicas bloque 1
Practicas bloque 1Practicas bloque 1
Practicas bloque 1
 
Android studio
Android studioAndroid studio
Android studio
 
JAVA 2
JAVA 2JAVA 2
JAVA 2
 
MANUAL DE JAVA
MANUAL DE JAVAMANUAL DE JAVA
MANUAL DE JAVA
 
Java desde cero
Java desde ceroJava desde cero
Java desde cero
 
MANUAL JAVA
MANUAL JAVA MANUAL JAVA
MANUAL JAVA
 
JAVA
JAVA JAVA
JAVA
 
Introducción al desarrollo de aplicaciones móviles con Android enfocado a emp...
Introducción al desarrollo de aplicaciones móviles con Android enfocado a emp...Introducción al desarrollo de aplicaciones móviles con Android enfocado a emp...
Introducción al desarrollo de aplicaciones móviles con Android enfocado a emp...
 
Manual de-c-dev
Manual de-c-devManual de-c-dev
Manual de-c-dev
 
Manual C++ 3ra parte
Manual C++ 3ra parteManual C++ 3ra parte
Manual C++ 3ra parte
 
/Media/tom nissim/cursocpp
/Media/tom nissim/cursocpp/Media/tom nissim/cursocpp
/Media/tom nissim/cursocpp
 
Cursocpp
CursocppCursocpp
Cursocpp
 

Workshop Calabash Appium