美文网首页
使用Appium2.0自动化规模测试APP

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

作者: hohoha | 来源:发表于2023-01-13 16:59 被阅读0次

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

    1. Appium2.0的安装

    npm config get registry
    

    设置为淘宝源

    npm config set registry https://registry.npm.taobao.org
    
    • 安装appium 2.0 Server和安卓驱动
    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.下一步计划

    • 把安卓模拟器搬到docker上。
    • 使用jenkins运行测试脚本。

    相关文章

      网友评论

          本文标题:使用Appium2.0自动化规模测试APP

          本文链接:https://www.haomeiwen.com/subject/unpgcdtx.html