Workshop calabash appium

Post on 17-Feb-2017

368 views 0 download

Transcript of Workshop calabash appium

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?

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

Preguntas?Gracias

!

Enrique Sánchezenrique.sanchezbayuela@medianet.es

@EnriqueSanchezB