电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python 基于Appium控制多設(shè)備并行執(zhí)行

瀏覽:3日期:2022-06-24 18:39:59
前言:

如何做到,控制多設(shè)備并行執(zhí)行測(cè)試用例呢。

思路篇

我們?nèi)ハ胂拢覀兛梢垣@取參數(shù)的信息,和設(shè)備的信息,那么​我們也可以針對(duì)每臺(tái)設(shè)備開(kāi)啟不一樣的端口服務(wù)。那么每個(gè)服務(wù)都對(duì)應(yīng)的端口,我們?cè)讷@取設(shè)備列表的時(shí)候,要和 每個(gè)服務(wù)對(duì)應(yīng)起來(lái),這樣,我們開(kāi)啟一個(gè)進(jìn)城池,我們?cè)谶M(jìn)程池里去控制設(shè)備,​每個(gè)進(jìn)程池 控制不一樣的設(shè)備即可。

實(shí)現(xiàn)篇

首先實(shí)現(xiàn)對(duì)應(yīng)的參數(shù)篇和對(duì)應(yīng)的設(shè)備端口,

def startdevicesApp(): l_devices_list=[] port_list=[] alldevices=get_devices() if len(alldevices)>0:for item in alldevices: 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

​接下來(lái),我們?nèi)?#8203;寫一個(gè)端口開(kāi)啟服務(wù)。

class RunServer(threading.Thread):#啟動(dòng)服務(wù)的線程 def __init__(self, cmd): threading.Thread.__init__(self) self.cmd = cmd def run(self): os.system(self.cmd)def start(port_list:list): def __run(url): time.sleep(10) response = urllib.request.urlopen(url, timeout=5) if str(response.getcode()).startswith('2'): return True for i in range(0, len(port_list)): cmd = 'appium -p %s ' % ( port_list[i]) if platform.system() == 'Windows': # windows下啟動(dòng)server t1 =RunServer(cmd) p = Process(target=t1.start()) p.start() while True: time.sleep(4) if __run('http://127.0.0.1:' + port_list[i]+ '/wd/hub/status'): break

​我們開(kāi)啟服務(wù)了,接下來(lái),我們?cè)鯓痈鶕?jù)​不同進(jìn)程執(zhí)行測(cè)試用例。

def runcase(devics): #執(zhí)行測(cè)試用例 passdef run(deviceslist:list):​ pool = Pool(len(deviceslist)) for i in deviceslist: pool.map(runcase, i) pool.close() pool.join()

接下來(lái),就是我們?nèi)ソM合形成最后的執(zhí)行的代碼。

最終代碼展示

from appium import webdriverfrom androguard.core.bytecodes.apk import APKimport osimport randomapk_path = '/Users/lileilei/Downloads/com.tencent.mobileqq_8.5.0_1596.apk'def get_devices() -> list: all_devices = [] cmd = 'adb devices' reslut = os.popen(cmd).readlines()[1:] for item in reslut: if item != 'n': all_devices.append(str(item).split('t')[0]) return all_devicesdef getPlatForm(dev: str) -> str: cmd = ’adb -s {} shell getprop ro.build.version.release’.format(dev) reslut = os.popen(cmd).readlines()[0] return str(reslut).split('n')[0]def get_apkname(apk): a = APK(apk, False, 'r') return a.get_package()def get_apk_lautc(apk): a = APK(apk, False, 'r') return a.get_main_activity()import platformfrom multiprocessing import Process,Poolimport time,urllib.requestimport threadingclass RunServer(threading.Thread):#啟動(dòng)服務(wù)的線程 def __init__(self, cmd): threading.Thread.__init__(self) self.cmd = cmd def run(self): os.system(self.cmd)def start(port_list:list): def __run(url): time.sleep(10) response = urllib.request.urlopen(url, timeout=5) if str(response.getcode()).startswith('2'): return True for i in range(0, len(port_list)): cmd = 'appium -p %s ' % ( port_list[i]) if platform.system() == 'Windows': # windows下啟動(dòng)server t1 =RunServer(cmd) p = Process(target=t1.start()) p.start() while True: time.sleep(4) if __run('http://127.0.0.1:' + port_list[i]+ '/wd/hub/status'): breakdef startdevicesApp(): l_devices_list=[] port_list=[] alldevices=get_devices() if len(alldevices)>0: for item in alldevices: 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_listdef runcase(devics): #執(zhí)行測(cè)試用例 passdef run(deviceslist:list): pool = Pool(len(deviceslist)) for devices in deviceslist: 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控制多設(shè)備并行執(zhí)行的詳細(xì)內(nèi)容,更多關(guān)于Appium控制多設(shè)備并行執(zhí)行的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 保定市泰宏机械制造厂-河北铸件厂-铸造厂-铸件加工-河北大件加工 | 东莞市天进机械有限公司-钉箱机-粘箱机-糊箱机-打钉机认准东莞天进机械-厂家直供更放心! | 小型单室真空包装机,食品单室真空包装机-百科 | 不锈钢电动球阀_气动高压闸阀_旋塞疏水调节阀_全立阀门-来自温州工业阀门巨头企业 | 隧道窑炉,隧道窑炉厂家-山东艾瑶国际贸易 | 美甲贴片-指甲贴片-穿戴美甲-假指甲厂家--薇丝黛拉 | 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | 智能垃圾箱|垃圾房|垃圾分类亭|垃圾分类箱专业生产厂家定做-宿迁市传宇环保设备有限公司 | 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 | 广东佛电电器有限公司|防雷开关|故障电弧断路器|智能量测断路器 广东西屋电气有限公司-广东西屋电气有限公司 | 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 | 永嘉县奥阳陶瓷阀门有限公司 | 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | 早报网| 精准猎取科技资讯,高效阅读科技新闻_科技猎 | 茶叶百科网-茶叶知识与茶文化探讨分享平台 | 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 模具ERP_模具管理系统_模具mes_模具进度管理_东莞市精纬软件有限公司 | 固诺家居-全屋定制十大品牌_整体衣柜木门橱柜招商加盟 | 无锡装修装潢公司,口碑好的装饰装修公司-无锡索美装饰设计工程有限公司 | 煤矿人员精确定位系统_矿用无线通信系统_煤矿广播系统 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 | UV-1800紫外光度计-紫外可见光度计厂家-翱艺仪器(上海)有限公司 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 氟氨基酮、氯硝柳胺、2-氟苯甲酸、异香兰素-新晨化工 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 挨踢网-大家的导航!| 机构创新组合设计实验台_液压实验台_气动实训台-戴育教仪厂 | 桐城新闻网—桐城市融媒体中心主办| 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 懂研帝_专业SCI论文润色机构_SCI投稿发表服务公司 | 超声骨密度仪,双能X射线骨密度仪【起草单位】,骨密度检测仪厂家 - 品源医疗(江苏)有限公司 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 杭州翻译公司_驾照翻译_专业人工翻译-杭州以琳翻译有限公司官网 组织研磨机-高通量组织研磨仪-实验室多样品组织研磨机-东方天净 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) |