
阅读本文大约需要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 Managerfrom 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高级选项中是看不到代理信息的而且无法取消,必须通过命令取消。
推荐阅读:
想要明白些道理,遇见些有趣的事 —— 离岛

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




