使用Appium2.0自动化规模测试APP

2023-01-13  本文已影响0人  hohoha

最近做个项目需要测试服务端的并发性能,客户端采用安卓,接口数据采用Restul和流媒体播放。由于流媒体的接口并不清楚,所以决定采用安卓虚拟机来模拟。
正好赶上Appium2.0升级,网上的很多资料都不能用了,这里将整个环境搭建的要点记录下来与大家分享。

1. Appium2.0的安装

npm config get registry

设置为淘宝源

npm config set registry https://registry.npm.taobao.org
npm install -g appium@next
appium driver install uiautomator2

2.Appium客户端脚本

本次采用python客户端,使用python3.7以上版本。下面安装python客户端。

pip install Appium-Python-Client

编写测试脚本

import unittest
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy

capabilities = dict(
    platformName='Android',
    automationName='uiautomator2',
    deviceName='Android',
    appPackage='com.android.settings',
    appActivity='.Settings',
    language='en',
    locale='US'
)

appium_server_url = 'http://localhost:4723'

class TestAppium(unittest.TestCase):
    def setUp(self) -> None:
        self.driver = webdriver.Remote(appium_server_url, capabilities)

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

到这里运行这个脚本,就可以实现单机的自动化测试了。

3.多个安卓模拟器并行测试

使用Android Studio Bumblebee,这是最后一个支持java 8的版本 https://developer.android.google.cn/studio/archive
在device manager中创建多个模拟器
改写测试脚本,对每个模拟器添加参数

capabilitiesA = dict(
    platformName='Android',
    automationName='uiautomator2',
    deviceName='Android',
    appPackage='com.android.settings',
    appActivity='.Settings',
    language='en',
    locale='US',
    udid='emulator-5554',
    mjpegServerPort='9200',
    systemPort='8200'
)

其中 udid, mjpegServerPort, systemPort每个模拟器都需要定义不同端口。
并行测试脚本如下

import unittest
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy

capabilitiesA = dict(
    platformName='Android',
    automationName='uiautomator2',
    deviceName='Android',
    appPackage='com.android.settings',
    appActivity='.Settings',
    language='en',
    locale='US',
    udid='emulator-5554',
    mjpegServerPort='9200',
    systemPort='8200'
)

capabilitiesB = dict(
    platformName='Android',
    automationName='uiautomator2',
    deviceName='Android',
    appPackage='com.android.settings',
    appActivity='.Settings',
    language='en',
    locale='US',
    udid='emulator-5556',
    mjpegServerPort='9201',
    systemPort='8201'
)

capabilitiesC = dict(
    platformName='Android',
    automationName='uiautomator2',
    deviceName='Android',
    appPackage='com.android.settings',
    appActivity='.Settings',
    language='en',
    locale='US',
    udid='emulator-5558',
    mjpegServerPort='9202',
    systemPort='8202'
)

appium_server_url = 'http://localhost:4723'

class TestAppium(unittest.TestCase):
    def setUp(self) -> None:
        self.driverA = webdriver.Remote(appium_server_url, capabilitiesA)
        self.driverB = webdriver.Remote(appium_server_url, capabilitiesB)
        self.driverC = webdriver.Remote(appium_server_url, capabilitiesC)

    def tearDown(self) -> None:
        if self.driverA:
            self.driverA.quit()
        if self.driverB:
            self.driverB.quit()
        if self.driverC:
            self.driverC.quit()

    def test_find_battery(self) -> None:
        el = self.driverA.find_element(by=AppiumBy.XPATH, value='//*[@text="Display"]')
        el.click()
        el = self.driverB.find_element(by=AppiumBy.XPATH, value='//*[@text="Display"]')
        el.click()
        el = self.driverC.find_element(by=AppiumBy.XPATH, value='//*[@text="Display"]')
        el.click()

if __name__ == '__main__':
    unittest.main()

4.下一步计划

上一篇下一篇

猜你喜欢

热点阅读