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