====== 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).