python+Appium自動化:基於多進程啟動多設備


先分享一個appium參數

 

參數  默認值 含義
-U,--udid null 連接物理設備的唯一設備標識符
-a,--address 0.0.0.0 監聽的ip地址
-p,--port 4723 監聽的端口
-bp,--bootstrap-port 4724 連接Android設備的端口號(Android-only)
-g,--log   null 將日志輸出到指定文件
--no-reset false  session之間不重置應用狀態
--session-override false 允許session被覆蓋(沖突的話)
--app-activity null 打開Android應用時,啟動的Activity的名字
--app null 本地app的路徑或遠程的安裝包

 

多設備啟動

先啟動多個appium服務

appium -p 4723

appium -p 4725

再基於這些服務來啟動設備。

  • 設備1:127.0.0.1:62001
  • 設備2:127.0.0.1:62025

以啟動淘寶app為例子

multi_devices

from appium import webdriver
import yaml
from time import ctime


#多設備名稱
devices_list = ['127.0.0.1:62001', '127.0.0.1:62025']
def Desired_caps(udid,port):
with open('multidevice.yaml',"r") as file:
data = yaml.load(file,yaml.FullLoader)
desired_caps={
"platformName": data["platformName"],
"platformVersion": data["platformVersion"],
"deviceName": data["deviceName"],
"udid":udid,
"appPackage": data["appPackage"],
"appActivity": data["appActivity"],
"unicodeKeyboard":data["unicodeKeyboard"],
"resetKeyboard":data["resetKeyboard"],
"noReset": data["noReset"],

}
print("appium port:%s start run %s at %s"%(port,udid,ctime()))
driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(port)+ '/wd/hub', desired_caps)
driver.implicitly_wait(10)
return driver
if __name__ == '__main__':
Desired_caps(devices_list[0],4723)
Desired_caps(devices_list[1],4725)

多進程並發啟動設備

多進程優勢

  • 多進程中,同一個變量,各自有一份拷貝存在於每個進程中,互不影響;
  • 而多線程中,所有變量都由所有線程共享,所以,任何一個變量都可以被任何一個線程修改,因此,線程之間共享數據最大的危險在於多個線程同時改一個變量,容易把內容給改亂了

multiprocess_devices.py

# -*- coding: utf-8 -*-#

from appium import webdriver
import yaml
from time import ctime
import multiprocessing


#多設備名稱
devices_list = ['127.0.0.1:62001', '127.0.0.1:62025']
def Desired_caps(udid,port):
with open('multidevice.yaml', "r") as file:
data = yaml.load(file, yaml.FullLoader)
desired_caps = {
"platformName": data["platformName"],
"platformVersion": data["platformVersion"],
"deviceName": data["deviceName"],
"udid": udid,
"appPackage": data["appPackage"],
"appActivity": data["appActivity"],
"unicodeKeyboard":data["unicodeKeyboard"],
"resetKeyboard":data["resetKeyboard"],
"noReset": data["noReset"],

}
print("appium port:%s start run %s at %s" % (port, udid, ctime()))
driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(port)+ '/wd/hub', desired_caps)
return driver

# 構建線程組
desired_process = []

# 加載desired進程
for i in range(len(devices_list)):
port = 4723 + 2*i
desired = multiprocessing.Process(target=Desired_caps, args=(devices_list[i], port))
desired_process.append(desired) # 將設備添加到里面,ip和端口


if __name__ == '__main__':
for desired in desired_process:
desired.start()

for desired in desired_process:
desired.join()

  

參考轉載:https://sutune.me/2018/05/15/appium-sync/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM