1.夜神模拟器的下载及安装:
https://www.yeshen.com,直接下载,下载之后直接解压安装即可
2.启动夜神模拟器
3.adb介绍:
android debug bridge安卓调试连接桥;pc端的操作与移动端的操作实现建立连接的核心就是adb;它实际是一种客户端-服务器应用程序(C/S),主要包括以下三个组件:
a.客户端:用于进行发送命令的,可以通过adb命令从命令行终端中调用出客户端
b.服务端:用于实现管理客户端与守护进程之间的通讯,服务端在开发计算机上作为后台进程运行
c.守护进程(adbd):在设备上、模拟器上运行命令
adb原理描述:
1)当adb客户端进行启动时,会检测是否启动了adb的服务器进程。并且服务器启动的时候会绑定特定的端口5037(默认),并监听adb客户端发送过来的命令,那么adb客户端就与adb服务端进行建立了连接
2)服务器会与所在运行的模拟器或者设备进行建立连接,服务器会通过扫描对应的端口查找模拟器(5555-5585),只要服务器一旦发现存在adb守护进程的话,那么就会与对应的端口模拟进行建立连接。
4.adb连接夜神模拟器:
1)在夜神模拟器安装包的bin目录下找到adb.exe,复制路径:
2)打开cmd命令行,跳转到adb.exe的路径,输入adb,检查adb的版本,如下:
3)使用adb devices获取连接设备信息:
如果夜神模拟器通过adb命令无法获取到连接设备信息的话,则需要考虑以下几种情况:使用adb devices获取当前的设备列表
(1)adb的版本问题
(2)模拟器或者手机是否开启了adb调试模式(设置-开发者选项-USB调试)
5.adb的常用命令操作:
1)上传文件到模拟器中:adb push window文件路径 模拟器设备文件路径
注意:a.当前模拟器或者设备是否处于root状态
b.如果提示的是read-only的话,则确保当前root状态是否实现了读写操作,还需要将当前的目录实现remount操作
c.上传的时候可以改变其文件的名称
d.需要注意模拟器操作系统中的目录权限问题
上传成功:
2)下载文件到模拟器:adb pull 模拟器设备文件路径 window文件所在路径
3)进入到手机操作系统的终端:adb shell,如果存在多个设备连接状态的话,需要选择其中一个设备进行操作,则添加参数adb -s 设备名 shell 即可
几个核心目录的说明:
4)实现adb进行安装和卸载一个app应用程序:
安装一个app:adb install apk所在的路径;(如果已经安装了该app,需要实现覆盖安装的话,则需要添加一个参数-r)
卸载一个app:adb uninstall app所对应的包名
5)包名的获取方式:
a.直接到终端的data/data目录下进行查找
b.通过pm命令进行获取:package manager:包管理器;使用该命令完成应用程序的查询、安装等操作所涉及的应用信息、系统权限等
pm list packages 表示的说去已经安装的所有应用程序的包名;该命令在终端中输入的,如果在dos中输入的话则需要添加adb shell pm list packages
可以额外的添加参数完成过滤的操作;常用的两个-s表示过滤显示当前的系统应用包,-3表示只显示第三方应用包:
c.获取包名以及活动窗口名(前提:需要将该app先进行启动):
adb shell dumpsys | find “mFocusedActivity” 该命令是在dos中执行
dumpsys| grep "mFocusedActivity" 该命令在终端中执行
d.通过反编译apk进行获取其文件的配置信息,然后查找对应的包名和活动窗口名:
通过androidkiller进行反编译操作可以直接获取对应的包名和活动窗口名
e.还可以通过aapt命令完成包名和活动窗口名的获取操作:
aapt dump badging apk所在的路径
6)启动一个app:
am命令是一个命令管理集工具。
-n 参数:直接接组件,由包名和活动窗口名构成,这是启动一个app的最直接最多的操作方式:
adb shell am start -n 包名/活动窗口名
-d参数:如果需要携带网址的话,则可以添加-d参数,例如:打开一个百度地址
adb shell am start -n 浏览器包名/浏览器活动窗口名 -d 需要打开的网址
问题:测试一个app的启动时间?
a.通过-W参数完成启动时间的获取2.通过日志b.通过日志的形式进行分析筛选获取启动时间
7).日志如何获取:主要是用于进行定位bug
adb logcat或者adb shell logcat 其两个日志获取的结果是一样的,只是表现形式不同而已,一个是以参数的形式存在,一个是以命令的形式存在
将日志保存到文件中
adb shell logcat>d:\android_package\log.txt 表示的是将所有的日志信息全部写入到指定的文件中,>表示的是覆盖,>>表示的是追加
筛选日志:警告以上的日志:adb shell logcat *:W>d:\android_package\log.txt
错误以上的日志:adb shell logcat *:E>d:\android_package\log.txt
日志级别:
V---Verbose(所有的信息全部输出,其日志级别是最低的)
D--Debug(调试日志信息)
I---Info(一般日志信息)
W---Warning(警告信息)
E----Error(错误信息)
S----Silent(一般不应用,*别,啥都不输出)
8)输入事件操作:
a.滑动事件:adb shell input swipe x1 y1 x2 y2 可以实现 上滑和下滑等操作
b.鼠标键盘相关操作:adb shell终端中存在一个命令input ,adb shell input keyevent keycode的值
其中keycode的值既可以是数字,也可以是对应的keycode的name值
c.文本内容:adb shell input text 字符串 注意:如果模拟器中没有设置键盘得话,则默认只能够输入英文,无法输入中文,后期安装了appium内置得模拟器输入法即可输入中文
d.获取当前设备得分辨率:adb shell wm size
9)查看设备信息
adb shell getprop 显示当前模拟器得所有设备信息:系统版本/系统类型/所在区域/手机类型/CPU类型等等
10)专项测试:使用adb命令或者相关得工具进行完成操作:
a.耗电量测试
(1)通过手机自带的耗电量信息进行分析
(2)通过第三方监控软件进行获取相应的电量信息(GT)
GT(随身调):是APP随身调测试平台,它可以直接运行在手机上(集成调测环境),可以实现app相关性能数据的收集测试(CPU/内存/流量/电量等)、开发日志、Crash日志、网络数据包等。GT可以支持IOS和android
注意:IOS的版本是一个framework的包,直接嵌入app工程中、然后再进行编译出带有GT的app。
(3)adb shell dumpsys batterystats
b.cpu信息测试
(1)直接使用第三方工具:GT、模拟器自带的一款工具DDMS
DDMS:它可以实现线程的监控、内存的监控、流量的监控、CPU、模拟器的内置操作等相关的测试。
a)一种是直接在sdk中进行打开ddms
b)集成在eclipse开发软件中
注意:该工具监控的模拟器必须是先处于debug状态。
VM heap指标:堆栈指标
如果模拟器或者真实机没有处于debug状态的话,那么无法监控,则需要手动设置将其调整为debug状态
具体操作的步骤:
此时ddms就可以监控到相关的数据信息
(2)直接使用adb命令监控cpu信息:adb shell dumpsys cpuinfo
c.流量测试
(1)通过第三方工具;
(2)针对linux系统存在3个地方会保存流量统计的文件,android操作系统本身就是一个linux。
i.在/proc/net/dev文件中可以进行获取每个网络接口的收发流量,实际等价于/sys/class/net该目录下每个不同的网络接口的流量单独存储在每个文件夹中。
ii.在sys/class/net目录下可以找到对应的每个接口的流量
iii.在proc/uid_stat会存在对应的app的uid目录,在该uid目录下会存在tcp_rcv/tct_snd两个文件
d.稳定性测试
通过monkey命令完成app的稳定性、健壮性等相关的性能测试。
monkey的原理:使用socket套接字完成一系列伪随机事件(触屏、手势、点击等)的操作。
说明:socket:是windows的底层通讯协议,基于tcp/udp进行封装后的协议,也就是我们常说的抽象层。
monkey是不需要额外进行安装的,直接在模拟器或者真实机中存在的一个jar包,在framework目录下。
(1)针对于整个模拟器完成随机事件的测试的话:
adb shell monkey 随机事件数
(2)只针对某个应用程序现在随机事件的测试:
adb shell monkey -p 指定app的包名 随机事件数
注意:可以同时指定多个包名进行执行测试,只需要在随机事件数前面添加多个-p 包名的参数即可;多个包进行指定运行测试的话,那么是怎么分配事件数的呢?
实现多个包共用指定的事件数,并没有实现具体分配;
(3)如果实现随机事件测试过程中遇到崩溃就停止测试的情况的话则可以添加以下参数:
--ignore-crashes:表示的是忽略崩溃,如果程序崩溃得话,则后续事件会继续运行,不会停止
--ignore-timeouts:表示忽略超时,忽略整个运行过程中事件超时的情况
--ignore-security-exceptions:表示的是忽略网络证书、数字签名等可能出现错误的情况导致事件失败
一般如果想要让所有的事件全部运行的话,通常会把这三个参数全部加上
(4)可以通过参数-v完成日志的信息获取,最多添加三个-v参数,则表示的是获取所有的日志信息
--pct-touch PERCENT:表示的触摸事件,实现屏幕上的按下到抬起的操纵过程
--pct-motion PERCENT:表示的是手势事件,表示的是在屏幕上实现随机移动,直线滑动的操作
--pct-trackball PERCENT:表示的是轨迹球事件:表示的是在屏幕上完成的相应的曲线操作
--pct-syskeys PERCENT:表示的是系统按键事件:例如:Home键、音量加减键、返回键等
--pct-nav PERCENT:表示的是基本导航事件:这个事件一般应用很少,因为当前手机都是触屏的,不存在上下左右按键
--pct-majornav PERCENT:表示的是主导航事件:指的是键盘中的中间键,回退键,菜单键等
--pct-appswitch PERCENT:表示的是app切换事件(activity):启动activity事件在手机上启动另一个activity事件
--pct-flip PERCENT:表示的是键盘事件:表示的是键盘弹起、键盘输入等
--pct-anyevent PERCENT:表示的是任意事件,除了我们指定的其他的10种事件的其他事件。
--pct-pinchzoom PERCENT:表示的是二指缩放事件:两手指同时按住,移动、抬起等一系列操作的事件
(5)如果需要设定事件与事件之间的间隔时间的话,则可以使用--throttle,其单位是毫秒,一般设定的值可以模拟用户的操作真实行为(1000ms---1s)
(6)s 参数:表示的是因子参数,因为monkey是随机事件,如果出现bug了,需要重现的话,那么怎么样才能够重复之前执行的事件顺序呢?
也就是需要使用到-s参数,其表示seed,用于记录执行随机事件的序列。下一次执行的时候添加-s参数则会执行与上一次执行事件顺序相同。
注意:如果第一次执行没有声明其seed的值的话,那么会随机生成一个seed值并写入到日志中。
(7)bugreport参数,需要通过adb bugreport进行获取bug的报告信息,获取可以通过包进行筛选