Workshop calabash appium

74
Frameworks para testing móvil Calabash vs Appium

Transcript of Workshop calabash appium

Page 1: Workshop calabash appium

Frameworks para testing móvil

Calabash vs Appium

Page 2: Workshop calabash appium

¡Hola !

Enrique SánchezTester & Automation Engineer

Page 3: Workshop calabash appium

¿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

¿Por qué este Seminario?

Page 5: Workshop calabash appium
Page 6: Workshop calabash appium

Os voy a contar una historia…

Page 7: Workshop calabash appium

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

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

Si no hubiera sido una persona perezosa hubiera tenido que hacer muchas cosas:

Page 10: Workshop calabash appium

Aprender a programar en Objective-C

Page 11: Workshop calabash appium

Aprender a programar tests para Android

Page 12: Workshop calabash appium

Y hacerlo usando BDD

Page 13: Workshop calabash appium
Page 14: Workshop calabash appium

Por suerte soy una persona perezosa

Page 15: Workshop calabash appium

Ya hay gente que se había peleado con esto y que había planteado soluciones multiplataformas:

Page 16: Workshop calabash appium

¿De qué va entonces este

seminario?

Page 17: Workshop calabash appium

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

Sin volvernos locos…

vaya… salió ios 8.3… y los instruments han dejado de funcionar

Page 19: Workshop calabash appium

Sin tener que instalar o conocer miles de tecnologías y lenguajes diferentes…

Page 20: Workshop calabash appium

¡¡¡y sin creer que esto es magia!!!

Page 21: Workshop calabash appium

Calabash

Page 22: Workshop calabash appium

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

Multiplataforma

Lenguaje

Test Framework

Approach Embeber un server al que enviar instrucciones

Page 24: Workshop calabash appium
Page 25: Workshop calabash appium
Page 26: Workshop calabash appium
Page 27: 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

Page 28: Workshop calabash appium

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
Page 30: Workshop calabash appium

Vamos a jugar un poco con un código de prueba:

https://github.com/calabash/x-platform-example

Page 31: Workshop calabash appium

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

¿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

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

Aquí deberá de estar nuestra configuración

Page 35: Workshop calabash appium
Page 36: 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

Page 37: Workshop calabash appium
Page 38: Workshop calabash appium

¿Cómo carga la librería que tiene que cargar?

Dentro del fichero env.rb

Page 39: Workshop calabash appium
Page 40: 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

Page 41: Workshop calabash appium
Page 42: Workshop calabash appium

Dentro de estos directorios tienes que poner código en una carpeta /support que permita lanzar el dispositivo correspondiente

Page 43: Workshop calabash appium

¿No es mucha configuración?

Page 44: Workshop calabash appium

Por eso es necesario tener claro qué es lo que hace y cómo funciona.

Page 45: Workshop calabash appium

¿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

Appium

Page 47: Workshop calabash 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.

Page 48: Workshop calabash appium

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
Page 50: Workshop calabash appium
Page 51: Workshop calabash appium
Page 52: 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

Page 53: Workshop calabash appium
Page 54: Workshop calabash appium

Vamos a jugar un poco con un código de prueba:

https://github.com/appium/sample-code

Page 55: Workshop calabash appium

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

¿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

¿Qué es appium.txt?

https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

Page 58: 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

Page 59: Workshop calabash appium

¿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

¿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

¿Como se ejecuta?

Android:

$> bundle exec cucumber -p android

iOS:

$> bundle exec cucumber -p iOS

Page 62: Workshop calabash appium

¿Y no hay algo que me permita

abstraerme?

Page 63: Workshop calabash appium

Page Object

Page 64: Workshop calabash appium

The Page Object pattern represents the screens of your web app as a series of objects

Page 65: Workshop calabash appium

¿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

features steps pages

Page 67: Workshop calabash appium

¿Cómo hacer pages eficientes?

Lo mejor es utilizar librerías que implementen esto de manera sencilla.

Page 68: Workshop calabash appium

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

¿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

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 72: Workshop calabash appium
Page 73: Workshop calabash appium

Preguntas?Gracias

!

Page 74: Workshop calabash appium

Enrique Sá[email protected]

@EnriqueSanchezB