Download - Workshop calabash appium
![Page 1: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/1.jpg)
Frameworks para testing móvil
Calabash vs Appium
![Page 2: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/2.jpg)
¡Hola !
Enrique SánchezTester & Automation Engineer
![Page 3: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/3.jpg)
¿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
![Page 4: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/4.jpg)
¿Por qué este Seminario?
![Page 5: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/5.jpg)
![Page 6: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/6.jpg)
Os voy a contar una historia…
![Page 7: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/7.jpg)
Hace un par de años, tuve un proyecto en el que me pidieron que automatizara pruebas
para una aplicación móvil multiplataforma…
![Page 8: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/8.jpg)
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)
![Page 9: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/9.jpg)
Si no hubiera sido una persona perezosa hubiera tenido que hacer muchas cosas:
![Page 10: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/10.jpg)
Aprender a programar en Objective-C
![Page 11: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/11.jpg)
Aprender a programar tests para Android
![Page 12: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/12.jpg)
Y hacerlo usando BDD
![Page 13: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/13.jpg)
![Page 14: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/14.jpg)
Por suerte soy una persona perezosa
![Page 15: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/15.jpg)
Ya hay gente que se había peleado con esto y que había planteado soluciones multiplataformas:
![Page 16: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/16.jpg)
¿De qué va entonces este
seminario?
![Page 17: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/17.jpg)
Conocer mejor cómo funcionan Calabash y Appium y ver cómo podríamos trabajar de forma eficiente con ellas.
![Page 18: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/18.jpg)
Sin volvernos locos…
vaya… salió ios 8.3… y los instruments han dejado de funcionar
![Page 19: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/19.jpg)
Sin tener que instalar o conocer miles de tecnologías y lenguajes diferentes…
![Page 20: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/20.jpg)
¡¡¡y sin creer que esto es magia!!!
![Page 21: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/21.jpg)
Calabash
![Page 22: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/22.jpg)
Calabash enables you to write and execute automated acceptance tests of mobile apps.
Calabash is cross-platform, supporting Android and iOS native apps.
![Page 23: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/23.jpg)
Multiplataforma
Lenguaje
Test Framework
Approach Embeber un server al que enviar instrucciones
![Page 24: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/24.jpg)
![Page 25: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/25.jpg)
![Page 26: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/26.jpg)
![Page 27: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/27.jpg)
Instala Ruby (Usa RVM -> http://rvm.io/)
Instala las gemas necesarias
$> gem install cucumber
$> gem install calabash-cucumber
$> gem install calabash-android
![Page 28: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/28.jpg)
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
![Page 29: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/29.jpg)
![Page 30: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/30.jpg)
Vamos a jugar un poco con un código de prueba:
https://github.com/calabash/x-platform-example
![Page 31: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/31.jpg)
Donde dejaremos nuestras featuresEl código específico para Android
El código específico para iOS
La definición de los steps
El código de soporte
![Page 32: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/32.jpg)
¿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)
![Page 33: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/33.jpg)
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
![Page 34: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/34.jpg)
Aquí deberá de estar nuestra configuración
![Page 35: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/35.jpg)
![Page 36: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/36.jpg)
¿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
![Page 37: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/37.jpg)
![Page 38: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/38.jpg)
¿Cómo carga la librería que tiene que cargar?
Dentro del fichero env.rb
![Page 39: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/39.jpg)
![Page 40: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/40.jpg)
¿Con eso vale?
No. ¿Os acordáis del cucumber.yml? Pues tienes que decidir qué directorio es el que va a cargar
![Page 41: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/41.jpg)
![Page 42: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/42.jpg)
Dentro de estos directorios tienes que poner código en una carpeta /support que permita lanzar el dispositivo correspondiente
![Page 43: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/43.jpg)
¿No es mucha configuración?
![Page 44: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/44.jpg)
Sí
Por eso es necesario tener claro qué es lo que hace y cómo funciona.
![Page 45: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/45.jpg)
¿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
![Page 46: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/46.jpg)
Appium
![Page 47: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/47.jpg)
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.
![Page 48: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/48.jpg)
Multiplataforma
Lenguaje
Test FrameworkAgnóstico. Es una herramienta de automatización no sólo de
testing
Approach Usar los instrumentos nativos del sistema operativo
![Page 49: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/49.jpg)
![Page 50: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/50.jpg)
![Page 51: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/51.jpg)
![Page 52: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/52.jpg)
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
![Page 53: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/53.jpg)
![Page 54: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/54.jpg)
Vamos a jugar un poco con un código de prueba:
https://github.com/appium/sample-code
![Page 55: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/55.jpg)
El archivo de configuración
La configuración específica para Appium
La definición de los stepsEl código de soporte
![Page 56: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/56.jpg)
¿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
![Page 57: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/57.jpg)
¿Qué es appium.txt?
https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md
![Page 58: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/58.jpg)
¿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
![Page 59: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/59.jpg)
¿Cómo carga la librería que tiene que cargar?
Sólo tienes una librería que te vale para todo: appium_lib
![Page 60: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/60.jpg)
¿Con eso vale?
No. ¿Os acordáis del cucumber.yml? Pues tienes que decidir qué directorio es el que va a cargar
![Page 61: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/61.jpg)
¿Como se ejecuta?
Android:
$> bundle exec cucumber -p android
iOS:
$> bundle exec cucumber -p iOS
![Page 62: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/62.jpg)
¿Y no hay algo que me permita
abstraerme?
![Page 63: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/63.jpg)
Page Object
![Page 64: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/64.jpg)
The Page Object pattern represents the screens of your web app as a series of objects
![Page 65: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/65.jpg)
¿Cuál es la idea?
Abstraernos de si estamos usando Calabash/Appium y centrarnos en cómo trabajar con la página
![Page 66: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/66.jpg)
features steps pages
![Page 67: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/67.jpg)
¿Cómo hacer pages eficientes?
Lo mejor es utilizar librerías que implementen esto de manera sencilla.
![Page 68: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/68.jpg)
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)
![Page 69: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/69.jpg)
¿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
![Page 70: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/70.jpg)
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
![Page 71: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/71.jpg)
https://github.com/enriquesanchezb/workshop-appium-calabash
![Page 72: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/72.jpg)
![Page 73: Workshop calabash appium](https://reader035.vdocuments.co/reader035/viewer/2022081512/58a6b3f11a28ab661f8b4a07/html5/thumbnails/73.jpg)
Preguntas?Gracias
!