python 基于Appium控制多设备并行执行
前言:
如何做到,控制多设备并行执行测试用例呢。
思路篇
我们去想下,我们可以获取参数的信息,和设备的信息,那么我们也可以针对每台设备开启不一样的端口服务。那么每个服务都对应的端口,我们在获取设备列表的时候,要和每个服务对应起来,这样,我们开启一个进城池,我们在进程池里去控制设备,每个进程池控制不一样的设备即可。
实现篇
首先实现对应的参数篇和对应的设备端口,
defstartdevicesApp(): l_devices_list=[] port_list=[] alldevices=get_devices() iflen(alldevices)>0: foriteminalldevices: port=random.randint(1000,6000) port_list.append(port) desired_caps={ 'platformName':'Android', 'deviceName':item, 'platformVersion':getPlatForm(item), 'appPackage':get_apkname(apk_path), #包名 'appActivity':get_apk_lautc(apk_path), #apk的launcherActivity 'skipServerInstallation':True, "port":port } l_devices_list.append(desired_caps) return l_devices_list,port_list
接下来,我们去写一个端口开启服务。
classRunServer(threading.Thread):#启动服务的线程 def__init__(self,cmd): threading.Thread.__init__(self) self.cmd=cmd defrun(self): os.system(self.cmd) defstart(port_list:list): def__run(url): time.sleep(10) response=urllib.request.urlopen(url,timeout=5) ifstr(response.getcode()).startswith("2"): returnTrue foriinrange(0,len(port_list)): cmd="appium-p%s"%( port_list[i]) ifplatform.system()=="Windows":#windows下启动server t1=RunServer(cmd) p=Process(target=t1.start()) p.start() whileTrue: time.sleep(4) if__run("http://127.0.0.1:"+port_list[i]+"/wd/hub/status"): break
我们开启服务了,接下来,我们怎样根据不同进程执行测试用例。
defruncase(devics): #执行测试用例 pass defrun(deviceslist:list): pool=Pool(len(deviceslist)) foriindeviceslist: pool.map(runcase,i) pool.close() pool.join()
接下来,就是我们去组合形成最后的执行的代码。
最终代码展示
fromappiumimportwebdriver fromandroguard.core.bytecodes.apkimportAPK importos importrandom apk_path="/Users/lileilei/Downloads/com.tencent.mobileqq_8.5.0_1596.apk" defget_devices()->list: all_devices=[] cmd="adbdevices" reslut=os.popen(cmd).readlines()[1:] foriteminreslut: ifitem!="\n": all_devices.append(str(item).split("\t")[0]) returnall_devices defgetPlatForm(dev:str)->str: cmd='adb-s{}shellgetpropro.build.version.release'.format(dev) reslut=os.popen(cmd).readlines()[0] returnstr(reslut).split("\n")[0] defget_apkname(apk): a=APK(apk,False,"r") returna.get_package() defget_apk_lautc(apk): a=APK(apk,False,"r") returna.get_main_activity() importplatform frommultiprocessingimportProcess,Pool importtime,urllib.request importthreading classRunServer(threading.Thread):#启动服务的线程 def__init__(self,cmd): threading.Thread.__init__(self) self.cmd=cmd defrun(self): os.system(self.cmd) defstart(port_list:list): def__run(url): time.sleep(10) response=urllib.request.urlopen(url,timeout=5) ifstr(response.getcode()).startswith("2"): returnTrue foriinrange(0,len(port_list)): cmd="appium-p%s"%( port_list[i]) ifplatform.system()=="Windows":#windows下启动server t1=RunServer(cmd) p=Process(target=t1.start()) p.start() whileTrue: time.sleep(4) if__run("http://127.0.0.1:"+port_list[i]+"/wd/hub/status"): break defstartdevicesApp(): l_devices_list=[] port_list=[] alldevices=get_devices() iflen(alldevices)>0: foriteminalldevices: port=random.randint(1000,6000) port_list.append(port) desired_caps={ 'platformName':'Android', 'deviceName':item, 'platformVersion':getPlatForm(item), 'appPackage':get_apkname(apk_path),#包名 'appActivity':get_apk_lautc(apk_path),#apk的launcherActivity 'skipServerInstallation':True, "port":port } l_devices_list.append(desired_caps) returnl_devices_list,port_list defruncase(devics): #执行测试用例 pass defrun(deviceslist:list): pool=Pool(len(deviceslist)) fordevicesindeviceslist: pool.map(runcase,devices) pool.close() pool.join() if__name__=="__main__": l_devices_list,port_list=startdevicesApp() start(port_list) run(l_devices_list)
以上就是python基于Appium控制多设备并行执行的详细内容,更多关于Appium控制多设备并行执行的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。