移动测试开发 Android 系统服务在测试流程中的应用

opentest-oper@360.cn · 2019年10月30日 · 831 次阅读

本文基于 uiautomator1.0 测试脚本介绍自动化测试技术的应用,介绍如何获取 Context、通过 app 包名启动 app、数据库的应用、App 运行监控、uiatutomator1.0 中文录入支持。

shell 进程的 Context

类似 uiautomator1.0 通过 shell 启动的应用是无法直接获取 Context 的,但是有些 Android 服务是依赖于 context 的,shell 应用虽然不自带 context,但是可以通过 ActivityThread.systemMain() 初始化一个 shell 类型的 context。通过该 context 可以使用 PackageManager、ActivityManager,sqlite 等服务,但是需要动态权限和 app 权限的操作是无法正常调用的。下面就是该 Context 的具体应用介绍。

PackageManager 运用

通过 Context 获取 PackageManager 可以获取系统安装应用的信息以及已安装应用的启动 Intent

数据库应用

使用数据库方式与普通应用一致,流程是首先创建 SqliteHelper 继承 SQLiteOpenHelper,处理数据库创建、升级的表结构更新逻辑,需要注意的是构造参数中 databaseName 要使用绝对路径并且 context 不能为 null。

设备当前 App 运行状态监控

我们在测试过程中有时需要统计相关 Activity 展示的信息,并统计何时打开了页面并停留多长时间,以及应用的 crash、ANR、系统 ANR 等信息。我们可以通过接管系统 ActivityController 来实现。
接管系统 ActivityController 需要实现 IActivityController.Stub 接口,并在回调方法内实现应用 Activity 切换、应用崩溃、应用 ANR、系统 ANR 等异常的统计业务,通过 ActivityManager#setActivityController 方法接管系统服务,示例代码如下:


运行 app 的进程监控

测试过程中被测 app 有可能会关联多个 pid,如果你想统计被测应用的进程执行周期那么下面的内容会对你有所帮助。
我们可以通过 ProcessObserver 根据 pid 统计 process 执行周期,并通过 uid 与 app 进行关联来实现统计指定应用的 process 变化周期。示例代码如下:

uiatutomator1.0 录入中文

大家都知道 uiatutomator2.0 支持中文录入,uiatutomator1.0 原声是不支持中文录入的,其实 Android 自动化测试框架的中文录入是通过 AccessibilityNodeInfo 来实现文本录入的,但是系统版本过低时是不支持直接录入中文的,下面的代码是基于 AccessibilityNodeInfo 实现中文录入的逻辑

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册