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

node.js 下载安装npm https://nodejs.org/zh-cn/npm配置国内源 查看当前源

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运行测试脚本。

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: