2. ¡Hola !
Enrique Sánchez
Tester & Automation Engineer
12 y 13 de noviembre de 2014 Valencia, España
3. ¿Quién soy?
• Technical Team Leader y Responsable Técnico del Área de
Testing en
• Más de 4 años de experiencia en testing en empresas como
• Co-organizador de MAQA y Evangelista BDD y Agile
12 y 13 de noviembre de 2014 Valencia, España
4. ¿Qué es Medianet?
Somos una empresa de consultoría
tecnológica fundada en 1995,
presente en España, Estados Unidos y
México
Somos más de 200 TalenTech People
con pasión por la calidad y la
innovación
12 y 13 de noviembre de 2014 Valencia, España
12. Queremos aprender cómo montar un entorno
que nos permita hacer pruebas para diferentes
entornos móviles…
12 y 13 de noviembre de 2014 Valencia, España
13. Sin volvernos locos…
vaya… salió Android 5… no me lo esperaba
12 y 13 de noviembre de 2014 Valencia, España
14. Sin tener que instalar o conocer miles de
tecnologías diferentes…
12 y 13 de noviembre de 2014 Valencia, España
15. ¡¡¡y sin romper versiones anteriores!!!
12 y 13 de noviembre de 2014 Valencia, España
17. Pongamos un Caso Práctico
O cómo MediaTesting se
ahorró un pastón en pruebas
18. MediaTesting es una empresa a la que le ha
empezado a ir bien con el desarrollo móvil…
pero tienen un pequeño problema
12 y 13 de noviembre de 2014 Valencia, España
19. Nuestros clientes quieren más calidad en el
desarrollo de las pruebas pero no quieren
pagar mucho más…
12 y 13 de noviembre de 2014 Valencia, España
20. Enseguida empiezan a pensar en qué opciones
hay en el mercado y descubren que hay un
muchas opciones dependiendo del entorno
Kiwi
12 y 13 de noviembre de 2014 Valencia, España
21. Incluso hay algunas Cross-Platform
12 y 13 de noviembre de 2014 Valencia, España
23. Calabash enables you to write and execute
automated acceptance tests of mobile apps.
Calabash is cross-platform, supporting Android
and iOS native apps.
12 y 13 de noviembre de 2014 Valencia, España
25. Multiplataforma: iOS y Android
Permite testing sobre apps nativas
Independiente del lenguaje elegido para el
desarrollo
Open Source
12 y 13 de noviembre de 2014 Valencia, España
27. Calabash consiste en una serie de librerías que
permiten probar la funcionalidad.
Para ello se utiliza una serie de acciones que
imitan al comportamiento de un usuario final:
• Gestos: tocar, swipe, rotar…
• Aserciones: comprobar si un elemento existe
o contiene cierta información
• Sreenshots: capturas de pantalla del estado
actual del dispositivo
12 y 13 de noviembre de 2014 Valencia, España
29. Instala Ruby
Usa RVM -> http://rvm.io/
Instala las gemas necesarias
$>
gem
install
cucumber
$>
gem
install
calabash-‐cucumber
$>
gem
install
calabash-‐android
12 y 13 de noviembre de 2014 Valencia, España
30. 1. 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
2. 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
12 y 13 de noviembre de 2014 Valencia, España
31. ANDROID
Instala Genymotion (https://cloud.genymotion.com/page/launchpad/
download/)
Baja el simulador para la ROM que quieras
Configúralo para que use tu ANDROID_HOME
12 y 13 de noviembre de 2014 Valencia, España
32. iOS
Instala sim-launcher*
$>
brew
install
ios-‐sim
* Sólo si no usas iOS 8.1, en cualquier otro caso asegúrate de tener instalado
12 y 13 de noviembre de 2014 Valencia, España
Instruments
34. Es hora de crear nuestro proyecto:
$>
mkdir
VLC_testing_calabash
12 y 13 de noviembre de 2014 Valencia, España
35. Crea un árbol de directorios similar al siguiente:
├
config
<-‐
Guardaremos
la
config
genérica
├
features
<-‐
Dónde
irán
las
features
│
├
android
<-‐
Definiciones
concretas
para
Android
│
│
├
pages
<-‐
Screen
Objects
para
Android
│
│
├
support
<-‐
Soporte
para
Android
│
├
ios
│
│
├
pages
<-‐
Definiciones
concretas
para
iOS
│
│
├
support
<-‐
Screen
Objects
para
iOS
│
├
step_definitions
<-‐
Definición
de
los
steps
│
├
support
<-‐
Soporte
genérico
├
apps
<-‐
Guardaremos
los
binarios
de
las
apps
12 y 13 de noviembre de 2014 Valencia, España
36. Copiamos estos dos binarios al directorio apps
$>
cd
apps
$>
wget
https://www.dropbox.com/sh/4liqujul5mqme1z/
AADbw2HLusihacSxepIFj5Rna/Android-‐debug.apk?dl=0
$>
wget
https://www.dropbox.com/sh/4liqujul5mqme1z/
AACydxl0KG8i0fpMw_HJvXK9a/WordPress-‐cal.app?dl=0
12 y 13 de noviembre de 2014 Valencia, España
37. ANDROID
Firma la app usando Calabash
$>
calabash-‐android
resign
<apk>
Si aparece algún error entonces sigue estas instrucciones: https://
github.com/calabash/calabash-android/wiki/Running-Calabash-Android
12 y 13 de noviembre de 2014 Valencia, España
38. Comprueba que todo se ha instalado
correctamente
$>
calabash-‐android
console
app/<andriod>.apk
irb(main):001:0>
reinstall_apps
=>
nil
irb(main):002:0>
start_test_server_in_background
=>
nil
12 y 13 de noviembre de 2014 Valencia, España
39. iOS
Comprueba que todo se ha instalado
correctamente
$>
APP_BUNDLE_PATH=app/<ios>-‐cal.app
calabash-‐ios
console
irb(main):001:0>
start_test_server_in_background
=>
nil
12 y 13 de noviembre de 2014 Valencia, España
44. Creemos una nueva feature que sea común para iOS y Android:
$>
vim
features/login.feature
Feature:
Login
@invalid
Scenario:
Add
site
-‐
Invalid
login
Given
I
am
about
to
login
When
I
enter
invalid
credentials
Then
I
am
presented
with
an
error
message
to
correct
credentials
@valid
Scenario:
Add
site
Given
I
am
about
to
login
When
I
enter
valid
credentials
Then
I
am
successfully
authenticated
And
I
can
see
posts
for
the
site
12 y 13 de noviembre de 2014 Valencia, España
45. Definamos los steps:
$>
vim
features/login.feature
Given(/^I
am
about
to
login$/)
do
@current_page
=
page(LoginPage).await(timeout:
30)
@current_page.self_hosted_site
end
When(/^I
enter
invalid
credentials$/)
do
user
=
CREDENTIALS[:invalid_user]
@current_page
=
@current_page.login(user[:username],
user[:password],
CREDENTIALS[:site])
end
Then(/^I
am
presented
with
an
error
message
to
correct
credentials$/)
do
#TODO
end
When(/^I
enter
valid
credentials$/)
do
user
=
CREDENTIALS[:valid_user]
@current_page
=
@current_page.login(user[:username],
user[:password],CREDENTIALS[:site])
end
Then(/^I
am
successfully
authenticated$/)
do
unless
@current_page.is_a?(SitePage)
raise
"Expected
SitePage,
but
found
#{@current_page}"
end
end
12 y 13 de noviembre de 2014 Valencia, España
46. Definamos los steps:
$>
vim
features/login.feature
When(/^I
can
see
posts
for
the
site$/)
do
@current_page.to_posts
end
12 y 13 de noviembre de 2014 Valencia, España
47. Creamos los Screen Objects y el código auxiliar
$>
git
clone
https://github.com/enriquesanchezb/
vlctesting14.git
12 y 13 de noviembre de 2014 Valencia, España
50. Continuous Integration is a software
development practice where members of a
team integrate their work frequently (…)
Each integration is verified by an automated
build (including test) to detect integration errors
as quickly as possible
12 y 13 de noviembre de 2014 Valencia, España