前言

由于 Soloπ所有操作都在手机上完成,虽然录制确实方便,但是没法像传统自动化框架一样进行持续集成,为此我进行了一些改造

广播

注册一个 BroadcastReceiver,接收到后进行用例导入及批量执行

<receiver android:name=".service.CaseReplayReceiver"
android:exported="true">
<intent-filter>
<action android:name="lizhi.lizhifm.case.action.IMPORT_CASE"/>
<action android:name="lizhi.lizhifm.case.action.START_REPLAY"/>
</intent-filter>
</receiver>

贴上代码

app_process 开启 AccessibilityService

解决了广播后我们还需要能通过命令行启动 Soloπ的辅助功能服务,参考自动开启辅助功能的 “黑科技”

整个脚本执行的流程就是这样:

  1. 前期准备:获取设备、安装被测包等
  2. 开启远程调试接口 adb tcpip 5555
  3. 将打好的.dex push 到手机并执行,启动 AccessibilityService adb push SilentStartServices.dex /sdcard/ adb shell app_process -Djava.class.path=/sdcard/SilentStartServices.dex /sdcard SilentStartServices
  4. adb 发送广播 adb shell am broadcast -a lizhi.lizhifm.case.action.START_REPLAY -f 0x01000000

用例结果及性能数据上报

1、用例执行结果跟性能数据的上报是分开的,因此我们需要通过添加一个 caseID 将它们关联起来。

  1. OperationStepProvider准备阶段 prepare() 将当前用例的 caseID 存到 SharedPreferences

  2. PerformanceActionProvider执行到 ACTION_STOP_RECORD 结束性能录制时,去 SharedPreferences 读 caseID,若读取到有 caseID 则说明当前是在进行性能自动化测试,将 caseID 跟性能数据一起上报

  3. 所有用例执行结束后再将 caseID 清空

画了个比较挫的流程图

2、在 CaseReplayManager.OnFinishListener 上报用例报告

将用例执行结果跟设备信息等打包上传,我这边将截图转成 base64 也一起上传

后台解析报告

拿到上报的 json 报告后参考Soloπ的 CaseReplayResultActivity生成报告的四个 tab 页,还有性能数据用 EChart 生成图表

这里有两点需要注意

  1. 由于各操作步骤的 operationParam 参数都是加密的,入库前需要先进行 AES 解密,解密方法参考Soloπ的 AESUtils
  2. 因为某些国家的进口管制限制,Java 发布的运行环境包中的加解密有一定的限制。比如默认不允许 256 位密钥的 AES 加解密,解决方法就是修改策略文件参考

最后的效果大概是这样的

单独调用性能录制

此外还可以通过操作DisplayProvider单独实现性能录制的开关,可以用来录制跑 monkey 的性能数据


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