XTest 是一款 Android 平台测试工具,工具上一次推出了性能测试,不了解的同学可以回去看看

利用 Android 测试工具-XTest 来测试性能

而这次推出的新功能是 Monkey 遍历测试,欢迎下载体验。在功能介绍前首先先简要介绍一下什么是 Monkey 遍历测试:Monkey 遍历测试是测试应用稳定性的一种方式,通过在屏幕上随机的点击(也有滑动和输入,主要是点击)应用界面上的控件,以此来触发应用的各种响应,并实时监控其稳定性,主要是 crash(闪退) 和 ANR(应用无响应)。当出现应用异常可以导出异常信息,从而可以根据异常信息解决相应的 bug。Monkey 遍历测试由于没有用例,所以也不需要维护成本,因此拥有较高的 ROI 特性。

这次推出的 XTest-Monkey 具有以下特性:

1、随时随身测试、平时使用不依赖 PC(仅首次需 PC 端通过 ADB 启动)

2、支持 Android5.0+ 版本

3、采用深度遍历算法,尽可能触及页面中的所有控件

4、可设置白/黑名单 Activity 和黑名单控件,并且采用选择和录制方式,更方便快捷

5、防卡死,防死循环,防跳出

6、低电量 (<5%) 自动退出

7、自动导出 crash、ANR 详细堆栈等异常信息和截图

使用流程介绍:

1、下载工具并启动

前往:工具下载链接:https://github.com/y-grey/XTest/releases/tag/v1.0.0

下载工具,确保手机处于开发者 USB 调试模式,执行 run 启动 (如果你是 mac,需要给 adb 授权:chmod 755 XTest/MacAdb/adb)

出现如下浮窗,则代表启动成功。其中 “最小化” 可在平时不使用工具的时候可将该窗口最小化,而 “退出” 则直接退出工具,下次启动需重新从 PC 端启动。建议不使用工具的时候选择” 最小化 “,不直接 “退出”。

2、选择 Monkey→选择测试应用

3、进入到 Monkey 配置页面,可配置黑/白名单 Activity,和黑名单控件。

4、黑/白名单 Activity 配置:
Activity 黑名单:Monkey 遍历过程中会屏蔽这些 Activity 的启动
Activity 白名单:Monkey 遍历过程中只允许这些 Activity 的启动
选择配置黑/白名单 Activity 后,弹出当前应用的所有 Activity,选择需要配置的 Activity 即可。
如果不知道页面对应 Activity 名可以先进入第 5 步配置黑名单控件,进入希望配置的页面,再点击显示 Activity。

5、黑名单控件配置:点击配置页面的选择后进入录制模式,录制模式下可录制你点击的控件,录制的控件实时显示在浮窗列表里,只需要选择列表里控件,完成后会添加选择的控件到黑名单控件里。另外,第四步里如果需要配置 Activity 名单,但不知道页面对应 Activity 名,则可以进入到希望配置的页面,再点击显示 Act,则会把当前 Activity 显示出来。

6、最后回来配置页面,点击确定则直接开始 Monkey 遍历测试,手动息屏或者电量小于 5%的时候自动退出遍历。

7、当出现 crash 或者 anr 会自动保存堆栈,截图等异常信息到指定路径下(/sdcard/XTest/'应用包名'/Monkey/"测试开始时间"/ ),保存完成后会继续执行 Monkey 遍历。当停止后也会保存 Activity 的覆盖率信息到这个目录下。

8、crash 分析:crash 文件夹里保存了 crash 堆栈和截图,当在一次遍历中出现了多次相同 crash 堆栈,则会自动在尾部添加信息:xx 时间出现了一次相同 crash。因此当一次遍历出现多次相同 crash,则为出现频率高的 bug,应尽快修复。

CRASH: com.**** (pid9931) (dump time:2023-02-14 20:43:47)

Build Label: OPPO/PGBM10/OP5287:12/SP1A.210812.016/S.202212191306:user/release-keys

Build Time:1671425047000

Long Msg:java.lang.NullPointerException: Attempt to invoke interface method'float ***.view.crop.x6a_b.j()'on anullobject reference

at ***.view.crop.croptools.VECropView.c(SourceFile:327682)

at ***.view.crop.croptools.VECropView.a(SourceFile:33947738)

at ***.view.crop.x6a_a.a(SourceFile:33619972)

at com.***.view.crop.VECropChooserView.onCheckedChanged(SourceFile:33947725)

at android.widget.RadioGroup.setCheckedId(RadioGroup.java:202)

at android.widget.RadioGroup.access$600(RadioGroup.java:64)

at android.widget.RadioGroup$CheckedStateTracker.onCheckedChanged(RadioGroup.java:387)

at android.widget.CompoundButton.setChecked(CompoundButton.java:225)

at android.widget.CompoundButton.toggle(CompoundButton.java:139)

at android.widget.RadioButton.toggle(RadioButton.java:82)

at android.widget.CompoundButton.performClick(CompoundButton.java:144)

at android.view.View.performClickInternal(View.java:7471)

at android.view.View.access$3700(View.java:843)

at android.view.View$PerformClick.run(View.java:29098)

at android.os.Handler.handleCallback(Handler.java:938)

at android.os.Handler.dispatchMessage(Handler.java:99)

at android.os.Looper.loopOnce(Looper.java:233)

at android.os.Looper.loop(Looper.java:344)

at android.app.ActivityThread.main(ActivityThread.java:8248)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:589)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1071)

CRASH:2023-02-14 21:08:02 出现了一次相同crash

CRASH:2023-02-14 23:47:49 出现了一次相同crash

CRASH:2023-02-14 23:50:30 出现了一次相同crash

CRASH:2023-02-14 23:52:51 出现了一次相同crash

CRASH:2023-02-15 07:19:07 出现了一次相同crash

9、ANR 分析:ANR 文件夹里保存了 ANR 的原因、CPU 和内存占用情况。同时会导出 bugreport,Android9.0 及以下的版本存储在 anr_bugreport.txt 里,Android9.0 以上则保存在 anr_bugreport.zip 里(解压后的 FS/data/anr 目录下)。通过 anr_bugreport 可以知道当前应用线程的执行堆栈,从而更好的定位问题。

以上便是此次推出 Monkey 遍历功能的介绍,工具下一阶段的计划是推出 UI 录制回放功能,并增强 Monkey——即增加执行指定脚本用例到目标页面做 Monkey 遍历的功能,以满足需要在指定页面做 Monkey 遍历的需求。敬请期待。

XTest 可能存在 bug 或者适配问题,或者您有好的建议,欢迎反馈。

提 issue:https://github.com/y-grey/XTest


↙↙↙阅读原文可查看相关链接,并与作者交流