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?
Workshop Calabash Appium
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
Workshop Calabash Appium
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
Workshop Calabash Appium
Workshop Calabash Appium
Workshop Calabash Appium
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
Workshop Calabash Appium
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
Workshop Calabash Appium
¿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
Workshop Calabash Appium
¿Cómo carga la librería que tiene que cargar?
Dentro del fichero env.rb
Workshop Calabash Appium
¿Con eso vale?
No. ¿Os acordáis del cucumber.yml? Pues tienes
que decidir qué directorio es el que va a cargar
Workshop Calabash Appium
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
Workshop Calabash Appium
Workshop Calabash Appium
Workshop Calabash Appium
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
Workshop Calabash Appium
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  
Workshop Calabash Appium
Preguntas?
Gracias!
Enrique Sánchez
enrique.sanchezbayuela@medianet.es
@EnriqueSanchezB

Más contenido relacionado

PDF
Capybara vs watir
PDF
Seminario Calabash - VLCTesting 2014
PDF
Automatización de interfaces e introducción a bdd
PPTX
Cucumber
PDF
BDD & Cucumber
PDF
Curso TDD Ruby on Rails #02: Test Driven Development
PDF
Testing, tipos y otros flamewars
PDF
Las Herramientas de un Frontend
Capybara vs watir
Seminario Calabash - VLCTesting 2014
Automatización de interfaces e introducción a bdd
Cucumber
BDD & Cucumber
Curso TDD Ruby on Rails #02: Test Driven Development
Testing, tipos y otros flamewars
Las Herramientas de un Frontend

La actualidad más candente (20)

PPTX
PPTX
Lenguaje JavaScript parte 1
PPTX
Jugando con javascript
PDF
PPTX
Javascript para principiantes -Introducción
PDF
Mi Primera Aplicacion en Google App Engine
PDF
Testing en BDD con Python y Behave
ODP
JavaScript desde Cero
PPTX
Clase2
PPTX
BDD - Desarrollo dirigido por comportamiento
PDF
Code Blast 2012 - Node.js
ODP
Code Blast 2012 - Fast Mobile Prototyping
PPT
Conceptos BáSicos Curso Online
PDF
BDD y tests automatizados
PDF
Presentación estetoscopio
PDF
Introducción a Responsive Design
PPTX
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
PDF
Análisis estático de código en Java
PPTX
TDD en java script
PDF
Introduccion a TDD y XP en la Universidad de Santiago de Compostela
Lenguaje JavaScript parte 1
Jugando con javascript
Javascript para principiantes -Introducción
Mi Primera Aplicacion en Google App Engine
Testing en BDD con Python y Behave
JavaScript desde Cero
Clase2
BDD - Desarrollo dirigido por comportamiento
Code Blast 2012 - Node.js
Code Blast 2012 - Fast Mobile Prototyping
Conceptos BáSicos Curso Online
BDD y tests automatizados
Presentación estetoscopio
Introducción a Responsive Design
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
Análisis estático de código en Java
TDD en java script
Introduccion a TDD y XP en la Universidad de Santiago de Compostela
Publicidad

Destacado (12)

PPT
Tests de aceptación con cucumber
PPT
Cucumber - Curso de Automatización de Pruebas
PPTX
BDD in mobile apps
PDF
Lecciones aprendidas con appium
PDF
Cómo ser un Agile Tester (y no morir intentándolo)
PPTX
Using Selenium and Cucumber to test a Healthcare Information System
PPT
PDF
Automated Testing with Ruby
PPTX
Workshop calabash appium
PPT
Behavior Driven Development (BDD) and Agile Testing
PDF
Behavior Driven Development and Automation Testing Using Cucumber
PDF
Introduction to Selenium and Ruby
Tests de aceptación con cucumber
Cucumber - Curso de Automatización de Pruebas
BDD in mobile apps
Lecciones aprendidas con appium
Cómo ser un Agile Tester (y no morir intentándolo)
Using Selenium and Cucumber to test a Healthcare Information System
Automated Testing with Ruby
Workshop calabash appium
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development and Automation Testing Using Cucumber
Introduction to Selenium and Ruby
Publicidad

Similar a Workshop Calabash Appium (20)

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

Último (9)

PDF
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
PPTX
PROPIEDADES Y METODOS DE PrOO CON PYTHON
PDF
Presentacion de compiladores e interpretes
PPTX
Implementación equipo monitor12.08.25.pptx
PPTX
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
PPTX
hojas_de_calculo_aplicado para microsoft office
PPTX
presentación de introducción a las metodologías agiles .pptx
PPTX
Control de seguridad en los sitios web.pptx
PDF
DNS_SERVIDORES PARA ASER PRACTICAS EN REDES
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
PROPIEDADES Y METODOS DE PrOO CON PYTHON
Presentacion de compiladores e interpretes
Implementación equipo monitor12.08.25.pptx
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
hojas_de_calculo_aplicado para microsoft office
presentación de introducción a las metodologías agiles .pptx
Control de seguridad en los sitios web.pptx
DNS_SERVIDORES PARA ASER PRACTICAS EN REDES

Workshop Calabash Appium