workshop calabash appium
Post on 15-Apr-2017
1.305 Views
Preview:
TRANSCRIPT
Frameworks para testing móvil
Calabash vs Appium
¡Hola !
Enrique SánchezTester & 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
¿Por qué este Seminario?
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:
¿De qué va entonces este 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ó ios 8.3… y los instruments han dejado de funcionar
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 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
¿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
¿No es mucha 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 FrameworkAgnó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 stepsEl 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
¿Y no hay algo que me permita abstraerme?
Page Object
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
top related