一、环境搭建
Appium+Python3
python第三方库:Appium-Python-Client、ddt、xlrd、xlutils
二、项目结构设计
image
三、代码实现
image
四、具体分析
1、Appium的server封装(多设备)
首先检测电脑已连接设备信息,保存设备信息,Server按设备数量命令行启动多个服务,以下为server类部分代码:
class Server(object):
def __init__(self):
self.project_dir = Tools.get_project_dir()
device_config_path = self.project_dir + '/config/device.ini'
self.cf = ConfigOperate(device_config_path)
def main(self, device_list=None):
"""
多进程启动appium server主程序
:param device_list: 设备列表
:return:
"""
if device_list is None: # 如果设备列表没有传进来,则自动去当前系统里去获取
device_list = self._get_android_devices() # 获取安卓设备列表
if device_list:
appium_port_list = self._create_port_list(4700, len(device_list))
bootstrap_port_list = self._create_port_list(4900, len(device_list))
self.cf.clean() # 先清空device配置文件
for i in range(len(device_list)):
port = appium_port_list[i]
bport = bootstrap_port_list[i]
device = device_list[i]
server_log_path = os.path.join(Tools.get_project_dir(), 'logs', 'servers', '%s_%s.log' % (device, Tools.get_now_date('%Y-%m-%d_%H:%M:%S')))
self.cf.write_config(device, {'port': port, 'bport': bport, 'server_log_path': server_log_path}) # 把设备信息和端口信息写入配置文件
t = multiprocessing.Process(target=self.start_server, args=(port, bport, device, server_log_path))
t.daemon = True # 设置为守护进程,且一定要在t.start()前设置,设置t为守护进程,禁止t创建子进程,并且父进程代码执行结束,t即终止运行
t.start()
else:
raise ValueError('当前没有任何连接设备')
def start_server(self, port, bport, device, log_path=None):
"""
创建子进程运行ap