启动多个Appium服务

前面课程只是启动了单个appium服务,只能控制单台设备。如果需要针对多台设备测试那么该如何处理?

首先看下面两个启动appium服务案例。

启动appium服务1

C:\Users\Shuqing>appium -p 4723

[Appium] Welcome to Appium v1.7.2

[Appium] Appium REST http interface listener started on 0.0.0.0:4723

启动appium 服务2

C:\Users\Shuqing>appium -p 4725

[Appium] Welcome to Appium v1.7.2

[Appium] Non-default server args:

[Appium]   port: 4725

[Appium] Appium REST http interface listener started on 0.0.0.0:4725

上面案例我们启动了2个不同的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(Android-only) 的名字

--app

null

本地绝对路径_或_远程 http URL 所指向的一个安装包

更多参数请输入命令: appium -h

Appium安卓手机每次运行时都要安装 Unlock、Setting解决方案

首先通过如下命令找到appium的安装路径

C:\Users\Shuqing>where appium

C:\Users\Shuqing\AppData\Roaming\npm\appium

C:\Users\Shuqing\AppData\Roaming\npm\appium.cmd

1.打开 C:\Users\Shuqing\AppData\Roaming\npm\node_modules\appium\node_modules\appium-android-driver\lib 中的android-helpers.js

#注释475行如下代码

//await helpers.pushSettingsApp(adb);

#注释486行如下代码

//await helpers.pushUnlock(adb);

2.打开C:\Users\Shuqing\AppData\Roaming\npm\node_modules\appium\node_modules\appium-android-driver\build\lib中的android-helpers.js

#注释1128行下面这行代码

//return _regeneratorRuntime.awrap(helpers.pushSettingsApp(adb));

#修改为如下:

return context$1$0.abrupt(\'return\', defaultIME);

#注释1163行下面这行代码

//return _regeneratorRuntime.awrap(helpers.pushUnlock(adb));

#修改如下:

return context$1$0.abrupt(\'return\', defaultIME);

修改完成后重启Appium服务即可,如果新设备没有这个两个守护App可以手动安装这两个App到设备。

Appium Setting路径 :

{appium安装路径}\node_modules\_io.appium.settings@2.4.0@io.appium.settings\app\build\outputs\apk\settings_apk-debug.apk

eg:

C:\Users\Shuqing\AppData\Roaming\npm\node_modules\appium\node_modules\_io.appium.settings@2.4.0@io.appium.settings\app\build\outputs\apk\settings_apk-debug.apk

Unlock app路径:

appium安装路径\node_modules\_appium-unlock@2.0.0@appium-unlock\bin \unlock_apk-debug.apk

eg:

C:\Users\Shuqing\AppData\Roaming\npm\node_modules\appium\node_modules\_io.appium.settings@2.4.0@io.appium.settings\app\build\outputs\apk\unlock_apk-debug.apk

多设备启动
前面我们已经启动了多个appium服务,那么接下来我们可以基于这些服务来启动不同的设备。

测试场景

连接以下2台设备,然后分别启动考研帮App

设备1:127.0.0.1:62001
设备2:127.0.0.1:62025
代码实现

multi_device.py

from appium import webdriver

import yaml

from time import ctime

with open(\'desired_caps.yaml\',\'r\')as file:

data=yaml.load(file)

devices_list=[\'127.0.0.1:62001\',\'127.0.0.1:62025\']

def appium_desire(udid,port):

desired_caps={}

desired_caps[\'platformName\']=data[\'platformName\']

desired_caps[\'platformVersion\']=data[\'platformVersion\']

desired_caps[\'deviceName\']=data[\'deviceName\']

desired_caps[\'udid\']=udid

desired_caps[\'app\']=data[\'app\']

desired_caps[\'appPackage\']=data[\'appPackage\']

desired_caps[\'appActivity\']=data[\'appActivity\']

desired_caps[\'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

if __name__ == \'__main__\':

appium_desire(devices_list[0],4723)

appium_desire(devices_list[1],4725)

多进程并发启动设备
上面的案例设备启动并不是并发进行的,而是先后执行。如何实现2台设备同时启动,并启动App呢?

测试场景

同时启动2台设备:\'127.0.0.1:62025\'和\'127.0.0.1:62001\'并打开考研帮app

实现思路

可以使用Python多线程或者多进程实现。这里我们推荐使用多进程( multiprocessing) 原因如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzggd.html