最近在写一些Python实现一些自动化的测试项目,首先在Appium测试环境的搭建及测试用例的整理耗费了一些时间,不过在后期的测试准备中,比较有趣的是在Appium+Python进行识别设备的时候,原先都是对设备进行单独修改参数,需要每台手机插入电脑,都可以测试,只能对单台设备进行调试,在开发测试用例和执行自动化脚本的时候相当不方便,研究了adb相关指令后,研究并实现了使用“热插拔”技术,于是重新写了一些Python脚本来实现任意设备插入电脑均可以执行测试脚本,极大地增加了测试的工作效率,不同的设备执行相同的指令,执行的设备无非就是遍历adb devices中的设备。Android和iOS有很多共通的地方,比如均可以使用类似adb的指令进行获取参数。
准备工作:
首先部署好测试环境建议采用Linux或者mac环境便于后续的测试工作,让你的终端环境输入adb devices可以识别到安卓设备,这个环境的部署,网上有很多资料,这边就不详细进行叙述。
接下来是重点讲述一些一下iOS测试环境,libmobiledevice工具包的安装,需要让你的终端环境输入idevice_id --list可以识别到iOS设备。
附录:
- 在Mac下使用brew进行安装
sudo brew update
sudo brew install libimobiledevice
sudo brew install ideviceinstaller
- Ubuntu使用apt-get进行安装
sudo add-apt-repository ppa:pmcenery/ppa
sudo apt-get update
apt-get install libimobiledevice-utils
sudo apt-get install ideviceinstaller
实现Android自动识别设备,只需实现platformVersion和deviceName的自动识别即可:
# 读取设备系统版本号
deviceAndroidVersion = list(os.popen('adb shell getprop ro.build.version.release').readlines())
platformVersion = re.findall(r'[^\r]+', deviceAndroidVersion[0])[0]
print(platformVersion)
# 读取设备 id
readDeviceId = list(os.popen('adb devices').readlines())
deviceName=re.findall(r'[^\s]+',readDeviceId[1])[0]
print(deviceName)
# 引入单元测试模块
class TestCase(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = platformVersion
desired_caps['deviceName'] = deviceName
...
实现Android自动识别设备,只需实现platformVersion
和deviceID、udid
的自动识别即可:
#通过ideviceinfo获取设备参数
appleinfo_list=list(os.popen('ideviceinfo').readlines())
appleinfo={}
for item in appleinfo_list:
appleinfo_temp=item.split(': ')
appleinfo.update({appleinfo_temp[0]: appleinfo_temp[1]})
#读取platformVersion
platformVersion=appleinfo.get('ProductVersion')
print(platformVersion)
#读取deviceName
deviceID=appleinfo.get('DeviceClass')
print(deviceID)
#读取iOS udid
appleudid=appleinfo.get('UniqueDeviceID').strip()
print(appleudid)
# 准备初始化
class TestCase(unittest.TestCase):
def setUp(self):
desired_caps = {
'platformName': 'iOS',
'platformVersion': platformVersion,
'deviceName': deviceID,
'bundleId': '****APP包名****',
'udid':appleudid,
...
到此为此,就可以实现热插拔设备脚本测试,欢迎指正。