====== Tests funcionals amb Android ======
Emprarem la llibreria https://appium.io
Podrem fer tests funcionals de forma molt similar a com utilitzem Selenium per a web.
{{:appium.png?direct}}
Articles previs:
* [[Android]]
{{tag> #Dam #DamMp08 #DamMp08Uf1 #DamMp08Uf01 #DamMp08Uf2 #DamMp08Uf02 #Ciber #Ceti #CetiMp03 Android mobile java }}
\\
===== Android Studio =====
Android Studio és l'eina oficial que Google recomana per a desenvolupa en Android.
{{:android-studio-1.png?direct}}
\\
===== Instal·lació =====
Necessitarem NodeJS versió LTS:
# apt install nodejs npm
# npm install -g n
# n lts
Tanqueu i obriu de nou el terminal, i comproveu la versió de NodeJS:
$ node --version
Instal·lem la llibreria Appium i el Driver UIAutomator2
$ sudo npm i -g appium
$ appium driver install uiautomator2
Provem servidor en una shell a part (escoltarà al port 4723):
$ appium
El podem parar amb ''CTRL+C''.
També hem d'instal·lar:
* Android Studio IDE
* Android SDK (podem emprar el SDK Manager de l'Android Studio).
* Java SDK >=11 per a Android SDK>=30
* Crear un emulador Android i engegar-lo (podem emprar AVD Manager).
==== Emulador ====
L'emulador Android es pot iniciar des de CLI:
$ cd Andrid/Sdk/emulator
$ ./emulator -avd "Pixel_XL_API_34"
Si hem de fer els autotests en una servidor podem afegir la opció ''-no-window'' perquè funcioni en mode ''headless'':
$ ./emulator -avd "Pixel_XL_API_34" -no-window
\\
===== Exemple Python =====
La **documentació oficial de Appium** ens ofereix un [[http://appium.io/docs/en/2.2/quickstart/test-py/|exemple en Python]] i altres llenguatges ([[http://appium.io/docs/en/2.2/quickstart/test-js/|Javascript]], Java, Ruby).
Revisa que estiguis consultant la documentació de la versió actual.
Creem un [[virtualenv]] per no interferir la instal·lació del sistema operatiu:
$ python -m venv envtest
$ source envtest/bin/activate
(envtest) $ pip install Appium-Python-Client pytest
Prenem aquest codi d'exemple que obre l'**aplicació ''com.android.settings''** i cerca la opció ''Battery'' amb Xpath:
import unittest
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
# Import Appium UiAutomator2 driver for Android platforms (AppiumOptions)
from appium.options.android import UiAutomator2Options
capabilities = dict(
platformName='Android',
automationName='uiautomator2',
deviceName='Android',
appPackage='com.android.settings',
appActivity='.Settings',
language='en',
locale='US'
)
# Converts capabilities to AppiumOptions instance
capabilities_options = UiAutomator2Options().load_capabilities(capabilities)
appium_server_url = 'http://localhost:4723'
class TestAppium(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Remote(command_executor=appium_server_url,options=capabilities_options)
def tearDown(self) -> None:
if self.driver:
self.driver.quit()
def test_find_battery(self) -> None:
el = self.driver.find_element(by=AppiumBy.XPATH, value='//*[@text="Battery"]')
el.click()
if __name__ == '__main__':
unittest.main()
=== Shell 1 ===
Assegura't que disposes de la variable ''$ANDROID_SDK_ROOT''. Si no la tens, sol ser:
$ export ANDROID_SDK_ROOT=~/Android/Sdk/
set ANDROID_SDK_ROOT=C:\Users\usuari\AppData\Local\Android\Sdk
Engeguem el servidor Appium (escoltarà al port 4723):
$ appium
=== Shell 2 ===
Si estem treballant amb Android Studio i tenim l'emulador engegat, no cal aquest apartat.
Si no tenim cap emulador engegat, podem posar-ho en marxa amb (substituir pel AVD pertinent):
$ cd ~/Android/Sdk/emulator
$ ./emulator -avd "Pixel_3a_API_34_extension_level_7_x86_64"
=== Shell 3 ===
Engeguem els tests:
$ source env/bin/activate
(envtest) $ python3 test_example.py
...i podrem veure com entra als Settings de l'emulador i clica en la secció "Battery" (sempre i quan l'emulador estigui en anglès).