python 基于Appium控制多設(shè)備并行執(zhí)行
如何做到,控制多設(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)文章!
相關(guān)文章:
1. JAMon(Java Application Monitor)備忘記2. SpringBoot+TestNG單元測(cè)試的實(shí)現(xiàn)3. Java GZip 基于內(nèi)存實(shí)現(xiàn)壓縮和解壓的方法4. IntelliJ IDEA設(shè)置默認(rèn)瀏覽器的方法5. Docker容器如何更新打包并上傳到阿里云6. VMware中如何安裝Ubuntu7. Springboot 全局日期格式化處理的實(shí)現(xiàn)8. python 浮點(diǎn)數(shù)四舍五入需要注意的地方9. idea配置jdk的操作方法10. 完美解決vue 中多個(gè)echarts圖表自適應(yīng)的問(wèn)題
