暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Android自动化中动态设置网络代理

岛哥手记 2020-10-27
2339

阅读本文大约需要1.1分钟。

背景

由于现在很多应用的页面数据都是AI算法推荐生成的,所以每次打开同一个页面数据都会不一样,因此在做客户端UI自动化的过程中都会采用Mock方案,利用MockServer来提供稳定的测试数据,其中MockServer的代理需要手动配置。


拿Android手机举例,过程大致是:进入设置->进入 WLAN ->找对应 wifi 连接->进入详情->找到代理->选择手动->输入主机名->输入端口号->最后保存,可以看到每次都是重复操作,特别当你的自动化设备很多以及MockServer服务不稳定导致IP经常变的情况下累加的时间成本是很高的,而且一不小心,还有可能写错


方案

今天给大家分享一下如何通过命令行动态设置Android手机的代理,其实如果只有一台手机,直接执行下面的命令行即可:

设置代理
adb shell settings put global http_proxy ip:port
清除代理
adb shell settings put global http_proxy :0

但是当宿主机挂载了多台设备的时候,就需要指定设备了,正常来说直接-s指定设备SN号即可,但是这里会有些问题,代理并不会生效,需要将原生的adb命令用pure-python-adb 这个Python库代替,这个是通过纯Python实现的ADB客户端,原理如下:


再通过Flask-Script把设置代理和清除代理封装成命令行工具,实现代码如下:

from flask_script import Manager
from ppadb.client import Client as AdbClient


@manager.option('-sn', '--sn', dest='sn', default='', help='设备sn号')
@manager.option('-proxy', '--proxy', dest='proxy', default='', help='代理地址加端口')
def set_proxy(sn, proxy):
try:
client = AdbClient(host="127.0.0.1", port=5037)
device = client.device(sn)
device.shell("settings put global http_proxy {0}".format(proxy))
LOGGER.debug("settings put global http_proxy {0}".format(proxy))
except Exception as e:
LOGGER.error(e)




@manager.option('-sn', '--sn', dest='sn', default='', help='设备sn号')
def clean_proxy(sn):
try:
client = AdbClient(host="127.0.0.1", port=5037)
device = client.device(sn)
device.shell("settings put global http_proxy :0")
LOGGER.debug("settings put global http_proxy :0")
except Exception as e:
        LOGGER.error(e)

需要注意的是通过这种方式自动设置代理后WiFi高级选项中是看不到代理信息的而且无法取消,必须通过命令取消。


推荐阅读:

可视化集中管理服务器节点进程

推荐一个不错的弱网模拟框架

Android内存性能测试

大疆御 Air 无人机上手的第100天

iOS模拟动态定位的测试方案

Android CPU性能测试


想要明白些道理,遇见些有趣的事 —— 离岛

文章转载自岛哥手记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论