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

简介: 由于现在很多应用的页面数据都是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客户端,原理如下:


image.png

再通过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高级选项中是看不到代理信息的而且无法取消,必须通过命令取消。

相关文章
|
4月前
|
XML API Android开发
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
本文介绍了如何使用androidx.preference库快速创建具有一级和二级菜单的Android设置界面的步骤和示例代码。
137 1
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
|
26天前
|
网络协议 Linux
使用nmcli命令设置IP地址并排查网络故障
nmcli 是一个功能强大的网络管理工具,通过它可以轻松配置IP地址、网关和DNS,同时也能快速排查网络故障。通过正确使用nmcli命令,可以确保网络配置的准确性和稳定性,提高系统管理的效率。希望本文提供的详细步骤和示例能够帮助您更好地掌握nmcli的使用方法,并有效解决实际工作中的网络问题。
44 2
|
2月前
|
测试技术 Python
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
本文介绍了Python的unittest框架的基础用法,包括测试初始化(setup)、清除(tearDown)函数的使用,以及assertEqual和assertGreaterEqual等断言方法,并展示了如何创建测试用例,强调了测试函数需以test_开头才能被运行。
64 1
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
|
2月前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
29 3
|
2月前
|
Ubuntu 网络安全 数据安全/隐私保护
阿里云国际版如何设置网络控制面板
阿里云国际版如何设置网络控制面板
|
3月前
|
网络协议 算法 网络性能优化
C语言 网络编程(十五)套接字选项设置
`setsockopt()`函数用于设置套接字选项,如重复使用地址(`SO_REUSEADDR`)、端口(`SO_REUSEPORT`)及超时时间(`SO_RCVTIMEO`)。其参数包括套接字描述符、协议级别、选项名称、选项值及其长度。成功返回0,失败返回-1并设置`errno`。示例展示了如何创建TCP服务器并设置相关选项。配套的`getsockopt()`函数用于获取这些选项的值。
|
3月前
|
Android开发
Android经典实战之Textview文字设置不同颜色、下划线、加粗、超链接等效果
本文介绍了 `SpannableString` 在 Android 开发中的强大功能,包括如何在单个字符串中应用多种样式,如颜色、字体大小、风格等,并提供了详细代码示例,展示如何设置文本颜色、添加点击事件等,助你实现丰富文本效果。
288 3
|
3月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
157 0
|
4月前
|
Java Spring 开发者
解锁 Spring Boot 自动化配置的黑科技:带你走进一键配置的高效开发新时代,再也不怕繁琐设置!
【8月更文挑战第31天】Spring Boot 的自动化配置机制极大简化了开发流程,使开发者能专注业务逻辑。通过 `@SpringBootApplication` 注解组合,特别是 `@EnableAutoConfiguration`,Spring Boot 可自动激活所需配置。例如,添加 JPA 依赖后,只需在 `application.properties` 配置数据库信息,即可自动完成 JPA 和数据源设置。这一机制基于多种条件注解(如 `@ConditionalOnClass`)实现智能配置。深入理解该机制有助于提升开发效率并更好地解决问题。
77 0
|
4月前
|
安全 网络安全 Android开发
探索安卓开发之旅:从新手到专家网络安全与信息安全:防范网络威胁,保护数据安全
【8月更文挑战第29天】在这篇技术性文章中,我们将踏上一段激动人心的旅程,探索安卓开发的世界。无论你是刚开始接触编程的新手,还是希望提升技能的资深开发者,这篇文章都将为你提供宝贵的知识和指导。我们将从基础概念入手,逐步深入到安卓开发的高级主题,包括UI设计、数据存储、网络通信等方面。通过阅读本文,你将获得一个全面的安卓开发知识体系,并学会如何将这些知识应用到实际项目中。让我们一起开启这段探索之旅吧!