[Android] 基于WLAN无线执行自动化方法
背景:
由于公司要测试APP 产品的耗电问题,我们采取的办法很low,对各个模块功能进行大量的手动测试,再通过Emmagee或GT得出来的结果来评估产品耗电,流量,CPU,内存的消耗等。由于手工效率太低,而且不准确,我们就决定用自动化来实现,但用自动化又面临了一个USB接电脑供电的问题,从而导致计算出来的功耗与手动跑的有很大的误差。
1、将 Android 设备和 adb 主计算机连接到这两者都可以访问的常用 WLAN 网络。
注意,并非所有访问点均适用;可能需要使用已正确配置防火墙的访问点以支持 adb 的访问点。
注:如果您尝试连接到 Android Wear 设备,则通过关闭与其连接的手机的蓝牙强制将它连接到 WLAN。
2、使用 USB 电缆将设备连接到主计算机。
3、设置目标设备以侦听端口 5555 上的 TCP/IP 连接。
didi@localhost ~ adb devices List of devices attached 68de2f65 device didi@localhost ~ adb tcpip 5555 restarting in TCP mode port: 5555
4、从目标设备断开 USB 电缆连接。
5、查找 Android 设备的 IP 地址。例如,在 Nexus 设备上,您可以通过访问 Settings > About tablet(或 About phone) > Status > IP address 查找 IP 地址。或者,在 Android Wear 设备上,您可以通过访问 Settings > Wi-Fi Settings > Advanced > IP address 查找 IP 地址。
6、连接至设备,通过 IP 地址识别此设备。
didi@localhost ~ adb connect 172.22.139.35 connected to 172.22.139.35:5555
7、请确认您的主计算机已连接至目标设备:
didi@localhost ~ adb devices List of devices attached 172.22.139.35:5555 device
8、更改datest - capabilities中手机的udid:
capability="sm_g9300-68de2f65" capabilities[capability] = {} capabilities[capability]['platformName'] = 'Android' capabilities[capability]['platformVersion'] = '7.0' capabilities[capability]['deviceName'] = '68de2f65' # capabilities[capability]['udid'] = '68de2f65' capabilities[capability]['udid'] = '172.22.139.35:5555' capabilities[capability]['appPackage'] = 'com.sdu.didi.psnger' capabilities[capability]['appActivity'] = 'com.didi.sdk.app.launch.DidiLoadDexActivity' capabilities[capability]['noReset'] = 'true' capabilities[capability]['newCommandTimeout'] = 300 capabilities[capability]['command_executor'] = "http://127.0.0.1:4723/wd/hub" capabilities[capability]['recreateChromeDriverSessions'] = 'true' capabilities[capability]['unicodeKeyboard'] = 'true' capabilities[capability]['automationName'] = "uiautomator2" # capabilities[capability]['systemPort'] = 8201
现在,可以开始操作了!
PS:
如果 adb 连接丢失:
请确保您的主机仍与您的 Android 设备连接到同一个 WLAN 网络。
通过再次执行 adb connect 步骤重新连接。
如果无法连接,则重置 adb 主机:
didi@localhost master ● adb kill-server
然后,从头开始操作。
经测试,脚本运行的速度和有线并无太大的差异,无线启动appium感觉比有线稍微慢,大概在10秒左右,在可以接受范围。
至此,我们已经可以解决这几个问题了:
1、我们不必非要连接数据线做安卓的自动化测试
2、我们可以更精确的来衡量功耗的使用
3、手机电池寿命更长

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2019最新iOS面试题及答案
1. Object-C的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-C的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。 2. import 跟#include 又什么区别,@class呢, #import<> 跟 #import“”又什么区别? 答:#import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import“”用来包含用户头文件。 3. 属性readwrite,readonly,assign,retain,copy,n...
- 下一篇
Runtime学习:面试题狙击
前面两篇文章分别记录了自己学习 Runtime 的一些知识点以及常见的一些应用。之前立下 flag 说准备写三篇关于 Runtime 的文章,于是就有了这篇文章。 题目一:下面的代码输出什么? @implementation Son : Father - (id)init { self = [super init]; if (self) { NSLog(@"%@", NSStringFromClass([self class])); NSLog(@"%@", NSStringFromClass([super class])); } return self; } @end 结果: Son / Son 分析: 对于上面的答案,第一个的结果应该是我们的预期结果,但是第二个结果却让我们很费解了。 那我们利用前面文章讲过的知识点来分析一下整个的流程。 因为,Son 及 Father 都没有实现 -(Class)calss 方法,所以这里所有的调用最终都会找到基类 NSObject 中,并且在其中找到 -(Class)calss 方法。那我们需要了解的就是在 NSObject 中这个方法的实现了。...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)