先分享一個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/