Taula de continguts

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.

Articles previs:

, , , , , , , , , , ,


Android Studio

Android Studio és l'eina oficial que Google recomana per a desenvolupa en Android.


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:

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 exemple en Python i altres llenguatges (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:

test_example.py
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:

Versió Linux

$ export ANDROID_SDK_ROOT=~/Android/Sdk/

Versió Windows

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