满堂花醉三千客,一剑霜寒十四州。这篇文章主要讲述appium 多线程还是多进程(转)相关的知识,希望能为你提供帮助。
https://www.cnblogs.com/zouzou-busy/p/11440175.html
在前面我们都是使用一个机器进行测试,在做app自动化的时候,我们要测不同的机型,也就是兼容性测试,如果一台一台设备去执行,那就显的太麻烦了。所以经常需要我们启动多个设备,同时跑自动化测试用例,要跑多个设备时,首先要启动多个appium服务。
启动多个appium服务
在之前我们都是在命令行里输入appium来启动appium服务,这样启动的默认端口是4723,我们可以使用-p参数来指定端口号,输入appium等价与appium -p 4723
文章图片
启动另一个服务
appium -p 4725
文章图片
这样我们就启动了两个appium服务。
服务要隔一个数字,如端口为4723,则4724为连接安卓设备的端口号,所以下个服务为4725
appium的参数
appium不止一个参数-p,还有其他的参数
参数 | 默认值 | 含义 |
-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的路径或远程的安装包 |
文章图片
多设备启动
前提条件:
1.连接两个机器
文章图片
2.启动两个服务
yaml文件
文章图片
platformName: Android platforVersion: 6.1.1 deviceName: 127.0.0.1:62001 appPackage: com.jgw.csca appActivity: com.jgw.csca.view.activity.LoginActivity unicodeKeyboard: True resetKeyboard: True noReset: False ip: 127.0.0.1 port: 4723
文章图片
脚本
文章图片
from appium import webdriver import yamldevices_list = [\'127.0.0.1:62001\', \'127.0.0.1:62025\']# 两个设备\'\'\' udid是设备的,如果是真机,这个必须有,有udid后deviceName就可以随便写一个 port是appium服务的端口,我启动的是4723和4725 \'\'\' def desiredCaps(udid, port): with open(\'../conf/capability.yaml\', \'r\', encoding=\'utf-8\') as file: data = https://www.songbingjia.com/android/yaml.load(file, Loader=yaml.FullLoader) desired_caps = {} desired_caps[/'platformName\'] = data[\'platformName\'] desired_caps[\'platforVersion\'] = data[\'platforVersion\'] desired_caps[\'deviceName\'] = data[\'deviceName\'] desired_caps[\'udid\'] = udid desired_caps[\'appPackage\'] = data[\'appPackage\'] desired_caps[\'appActivity\'] = data[\'appActivity\'] desired_caps[\'unicodeKeyboard\'] = data[\'unicodeKeyboard\'] desired_caps[\'resetKeyboard\'] = data[\'resetKeyboard\'] desired_caps[\'noReset\'] = data[\'noReset\'] driver = webdriver.Remote(\'http://\' + str(data[\'ip\']) + \':\' + str(port)+ \'/wd/hub\', desired_caps) \'\'\' 第一次启动 driver = webdriver.Remote(\'http://127.0.0.1:4723/wd/hub\', desired_caps) 第二次启动 driver = webdriver.Remote(\'http://127.0.0.1:4725/wd/hub\', desired_caps) \'\'\' return driverif __name__ == \'__main__\': desiredCaps(devices_list[0], 4723) desiredCaps(devices_list[1], 4725)
文章图片
【appium 多线程还是多进程(转)】这样,第一台设备执行结束之后就会在第二台设备上执行
多进程启动多个设备
可以使用python的多线程或者多进程实现,推荐使用多进程,原因如下
多进程中,同一个变量,各自有一份拷贝存在于每个进程中, 互不影响。而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改, 因此,线程之间共享的数据量最大的危险在于多个线程同一时间修改一个变量,容易把数据给改乱了
前置条件,和上面的一样
文章图片
from appium import webdriver import yaml import multiprocessingdevices_list = [\'127.0.0.1:62001\', \'127.0.0.1:62025\']# 两个设备def desiredCaps(udid, port): with open(\'../conf/capability.yaml\', \'r\', encoding=\'utf-8\') as file: data = https://www.songbingjia.com/android/yaml.load(file, Loader=yaml.FullLoader) desired_caps = {} desired_caps[/'platformName\'] = data[\'platformName\'] desired_caps[\'platforVersion\'] = data[\'platforVersion\'] desired_caps[\'deviceName\'] = data[\'deviceName\'] desired_caps[\'udid\'] = udid desired_caps[\'appPackage\'] = data[\'appPackage\'] desired_caps[\'appActivity\'] = data[\'appActivity\'] desired_caps[\'unicodeKeyboard\'] = data[\'unicodeKeyboard\'] desired_caps[\'resetKeyboard\'] = data[\'resetKeyboard\'] desired_caps[\'noReset\'] = data[\'noReset\'] driver = webdriver.Remote(\'http://\' + str(data[\'ip\']) + \':\' + str(port)+ \'/wd/hub\', desired_caps)return driverdesired_process = []# 存储多设备for i in range(len(devices_list)): port = 4723 + 2*i desired = multiprocessing.Process(target=desiredCaps, 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()
文章图片
分类: appium
推荐阅读
- Expected a key while parsing a block mapping.
- 解决AndroidKiller APK 反编译失败,无法继续下一步源码反编译!
- httpclient模拟post(applecation/x-www-form-urlencoded方式)请求
- 安卓无法上传图片的问题
- AppBoxFuture: Raft快照及日志截断回收
- 关于appium的简单理解
- Oracle 日志分析 APP | APP 推荐第 6 弹
- PowerShell set-location| PowerShell更改目录
- PowerShell Set-Content设置内容| PowerShell写入文件