UiAutomator Uiautomator2.0 脱机运行方法

青谷 · 2018年10月12日 · 最后由 xcwstsoftware 回复于 2018年10月29日 · 2950 次阅读

大家知道 Uiautomator1.0 的时候,想脱机运行只要在启动脚本的命令中加上--nohup 命令就行

而对于基于 instrument 的 Uiautomator2.0 同样也可以通过 nohup 命令做到脱机运行

nohup 命令即为后台执行命令的意思,对于 Uiautomator2.0 想后台执行,命令格式如下:

adb shell "nohup am instrument -w com.uitest.uiautomator2test.test/android.support.test.runner.AndroidJUnitRunner >/sdcard/log.txt"

注意:在命令后面进行了重定向,如果不进行重定向,会报如下错误:nohup: //nohup.out: Read-only file system

原因是默认的路径没有这个权限

实测过程中 android8.1 的 OPPO R15 可行,但华为 Mate10 出现进程冻结的情况,从系统 log 中,猜测应该是华为系统自己做的处理:

Line 11613: 10-12 14:16:48.815 1041 11372 D GpsFreezeProc: addFreezeProcess pkg:com.uitest.uiautomator2test

当插上电源后,会进行解冻,脚本又能重新跑起来:
Line 12569: 10-12 14:16:58.842 1595 2079 I ash : Freeze com.uitest.uiautomator2test OK !

Android 系统目前权限管理越来越严,各家厂商对进程的处理也有不同。本例可以看出华为相对 OPPO 来说管控就比较严格

此外也可以通过带签名的 APP 端启动测试命令来达到脱机执行的目的,但是需要系统签名,成本更高

Mark:除了 nohup 和系统 APP 启动,应该还有其他方式,欢迎留言讨论。等有时间再研究一下

共收到 7 条回复 时间 点赞

华为 mate 8 同出现 Freeze com.xxx.xxx OK 的问题,某次系统升级后出现的,不知道 freeze 的条件是什么啊,多次出现 case 跑一段时间一直停在那里就不动了

出现 Freeze 应该是由于 APP 非常驻应用引起,当跑起来后应用变成后台,系统会将其冻结掉。所以可以试试将测试 APP 做成常驻应用。有试过的朋友,欢迎讨论~,回头有空我再试试

除了 nohup 和系统 APP 启动,还可以参考一下 appuim、atx 的设计

怎么终止运行,哈哈

xcwstsoftware 回复

adb shell am force-stop com.exsssple.xxx.sfdsf

怎么在测试用例中给 7.0 的手机授权啊,我现在除非手动授权,在测试脚本中用代码授权都是失败的

adb shell "nohup am instrument -w com.uitest.uiautomator2test.test/android.support.test.runner.AndroidJUnitRunner >/sdcard/log.txt" 8.1 这个命令不行

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册