Workshop Calabash Appium
-
Upload
enrique-sanchez-bayuela -
Category
Software
-
view
1.305 -
download
1
Transcript of Workshop Calabash Appium
![Page 1: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/1.jpg)
Frameworks para testing móvil
Calabash vs Appium
![Page 2: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/2.jpg)
¡Hola !
Enrique SánchezTester & Automation Engineer
![Page 3: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/4.jpg)
¿Por qué este Seminario?
![Page 5: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/5.jpg)
![Page 6: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/6.jpg)
Os voy a contar una historia…
![Page 7: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/9.jpg)
Si no hubiera sido una persona perezosa hubiera tenido que hacer muchas cosas:
![Page 10: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/10.jpg)
Aprender a programar en Objective-C
![Page 11: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/11.jpg)
Aprender a programar tests para Android
![Page 12: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/12.jpg)
Y hacerlo usando BDD
![Page 13: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/13.jpg)
![Page 14: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/14.jpg)
Por suerte soy una persona perezosa
![Page 15: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/16.jpg)
¿De qué va entonces este seminario?
![Page 17: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/19.jpg)
Sin tener que instalar o conocer miles de tecnologías y lenguajes diferentes…
![Page 20: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/20.jpg)
¡¡¡y sin creer que esto es magia!!!
![Page 21: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/21.jpg)
Calabash
![Page 22: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/23.jpg)
Multiplataforma
Lenguaje
Test Framework
Approach Embeber un server al que enviar instrucciones
![Page 24: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/24.jpg)
![Page 25: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/25.jpg)
![Page 26: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/26.jpg)
![Page 27: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/29.jpg)
![Page 30: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/34.jpg)
Aquí deberá de estar nuestra configuración
![Page 35: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/35.jpg)
![Page 36: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/37.jpg)
![Page 38: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/39.jpg)
![Page 40: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/41.jpg)
![Page 42: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/43.jpg)
¿No es mucha configuración?
![Page 44: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/46.jpg)
Appium
![Page 47: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/49.jpg)
![Page 50: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/50.jpg)
![Page 51: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/51.jpg)
![Page 52: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/53.jpg)
![Page 54: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/62.jpg)
¿Y no hay algo que me permita abstraerme?
![Page 63: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/63.jpg)
Page Object
![Page 64: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/66.jpg)
features steps pages
![Page 67: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/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://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/71.jpg)
https://github.com/enriquesanchezb/workshop-‐appium-‐calabash
![Page 72: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/72.jpg)
![Page 73: Workshop Calabash Appium](https://reader031.fdocuments.mx/reader031/viewer/2022030309/58f164c41a28abd4618b458f/html5/thumbnails/73.jpg)
Preguntas?Gracias!