测试基础 [深入浅出 Android 自动化测试] 第一篇:Android 开发环境部署和 Monkey 用法入门

大海 · 2016年12月06日 · 最后由 蛰死牛 回复于 2019年10月30日 · 5105 次阅读
本帖已被设为精华帖!

第一步:下载并安装 Android Studio 开发工具到磁盘目录下

我选用目前主流的 Android 开发工具Android Studio作为以后整个系列的主要工具,后续不再一一说明。

第二步:设置系统环境变量

D:\Android\SDK\platform-tools放到path

第三步:创建模拟器,并进行初始化

选中MainActivity,点击run,等待模拟器加载完毕

第四步:连接模拟器

打开 cmd,使用 adb devices 命令连接 Google Emulator

第五步:安装所测 APK 文件到模拟器中

  • 复制所测 apk 文件到platform-tools文件的目录下,然后切换到D:\Android\SDK\platform-tools,进入platform-tools文件的目录下

  • 在 CMD 命令行中输入命令 adb install xxx.apk,将需要测试的 apk 文件安装到 Google Emulator 中

  • 成功安装后的,APP 就会显示在模拟器中

第六步:找到所测 package name

使用adb shell,输入 ls,第一次 cd data,然后再次输入 ls,第二次 cd data,最后找到com.xxx.xxx为名的 package name

第七步:使用 monkey 命令随机操作 1000 次 (具体用法参考 Google Doc)

在 CMD 中输入 monkey -p package name -v --ignore-timeouts --ignore-crashes --ignore-security-exceptions 1000命令,对所测目标进行操作。

命令讲解
  • --ignore-timeouts:忽略超时事件继续运行
  • --ignore-crashes:忽略崩溃事件继续运行
  • --ignore-security-exceptions:忽略异常事件继续运行
  • 1000:随机操作 1000 次

1000 次随机操作运行结束

第八步:输出带有 W 和 E 级别的日志信息

使用 adb logcat > D:/monkeylog.txt 导出筛选过的日志信息

整个操作过程中遇到的坑

  • 问题:How to solve INSTALL_FAILED_DEXOPT this error?
  • 答案:Android Studio >Build > Clean Project

  • 问题: 运行 adb shell monkey XXX,控制台提示 error:device offline

  • 答案: 在 adb shell 里面运行 monkey ,直接用 monkey 命令,去掉 adb shell 这个前缀。在电脑的命令行里 adb shell monkey 等价于先进入 adb 的 shell ,然后在 shell 里面启动 Monkey ,你本来就在 adb 的 shell 里面,所以 adb shell 这个前缀可以去掉。

  • 问题:如何导出 monkey 操作日志到本地

  • 答案:使用如下命令可以将 logcat 中的内容输出到文本文件中:

    • 第一种事例:adb logcat > /sdcard/monkeylog.txt 保存 log 文件到 sd 卡中
    • 第二种事例:adb logcat > D:/monkeylog.txt
  • 问题:如何过滤并输出含有 W,E 两个级别的日志信息

  • 答案:adb logcat -s '*:E *:W'

    • The priority is one of the following character values, ordered from lowest to highest priority:
    • V — Verbose (lowest priority)
    • D — Debug
    • I — Info
    • W — Warning
    • E — Error
    • F — Fatal
    • S — Silent (highest priority, on which nothing is ever printed)

参考资料

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 17 条回复 时间 点赞

感谢@chenhengjie123 @ 剪烛的答疑

思寒_seveniruby 将本帖设为了精华贴 12月06日 22:58

加精理由:虽然不高深但是对小白有很好的入门指导 将来可纳入电子书

一股清流啊,楼主加油,monkey 的部分,如果可以的话,建议加上对于一些 crash anr 等 fatal exception 的一些分析实例😁

#4 楼 @poker 是我认识的那个 Poker 么

#5 楼 @shixue33 哈哈 是啊,偶尔出来冒个泡被你看到了,看到剪烛就知道是你了

#4 楼 @poker 好的,我再完善完善

我也补充下黑白名单以及一些长时间跑的例子,很多都是之前的笔记,摘录于网上:

白名单和黑名单

  • 白名单:只测试部分应用( -p 的作用一样)但是如果-p 的程序过多就需要用到白名单了
  • 黑名单:不测试的应用
--pkg-blacklist-file  后面跟的是文件的路径

--pkg-whitelist-file  后面跟的是文件的路径 

可以自定义设置目录 /data/local/tmp/
  • 设置白名单

在 d:\writelist.txt 中设置白名单格式如下:

com.pageage.test
......
  • 把白名单 push 到手机
adb push d:\whitelist.txt /data/local/tmp/ 
  • 执行白名单
adb shell monkey -- pkg-whitelist-file /data/local/tmp/whitelist.txt --throttle 200 300

这个命令的意思就是  只跑白名单里面的应用,延迟 200 毫秒 执行 300 次,黑名单的执行方法和白名单一样

其他实例

  • 跑 ALL APK 命令:(>2 小时)
monkey --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000 -v -v -v 30000 1 >> /mnt/sdcard/Stability_base.txt 2>> /mnt/sdcard/Stability_base_err.txt
  • 跑单个 APK 命令(>6 小时):
monkey --pkg-whitelist-file /mnt/sdcard/whitelist.txt --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000  -v -v -v 90000 1 >> /mnt/sdcard/Stability_base.txt 2>> /mnt/sdcard/Stability_base_err.txt
  • 跑单个 APK 命令(>2 小时):
monkey --pkg-whitelist-file /mnt/sdcard/whitelist.txt --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000  -v -v -v 30000 1 >> /mnt/sdcard/Stability_base.txt 2>> /mnt/sdcard/Stability_base_err.txt
  • 跑 ALL APK 命令(>12 小时):
monkey --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000 -v -v -v 180000 1 >> /mnt/sdcard/Stability_base.txt 2>> /mnt/sdcard/Stability_base_err.txt
  • 跑 ALL APK 命令(>12 小时)加入黑名单:
monkey --pkg-blacklist-file /mnt/sdcard/blacklist.txt  --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000 -v -v -v 180000 1 >> /mnt/sdcard/Stability_base.txt 2>> /mnt/sdcard/Stability_base_err.txt
  • 跑单个 APK 命令(>12 小时):
monkey --pkg-whitelist-file /mnt/sdcard/whitelist.txt --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000  -v -v -v 180000 1 >> /mnt/sdcard/Stability_base.txt 2>> /mnt/sdcard/Stability_base_err.txt
  • 跑 ALL APK 命令(>24 小时):

    monkey --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000 -v -v -v 360000 1 >> /mnt/sdcard/Stability_base.txt 2>> /mnt/sdcard/Stability_base_err.txt
    
  • 跑 ALL APK 命令(>24 小时)加入黑名单:

monkey --pkg-blacklist-file /mnt/sdcard/blacklist.txt  --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000 -v -v -v 360000 1 >> /mnt/sdcard/Stability_base.txt 2>> /mnt/sdcard/Stability_base_err.txt
  • 跑单个 APK 命令(>24 小时):
monkey --pkg-whitelist-file /mnt/sdcard/whitelist.txt --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000  -v -v -v 360000 1 >> /mnt/sdcard/Stability_base.txt 2>> /mnt/sdcard/Stability_base_err.txt

#8 楼 @lose 感谢

你好,文章的最后一步的日志导出(包括带筛选 E 和 W 级别的日志导出)的是整个系统从创建开始之后所有的日志,直接使用 adb shell monkey -p com.xx.xx -v 1000 > D:/text.txt 可以导出测试相关信息。请问有没有办法可以导出测试过程中 E 和 W 级别的日志呢?谢谢

大海 #12 · 2017年05月04日 Author
LangZXG 回复

这个还不清楚,请教@lose

大海 回复

貌似不行,只能指定 vvv

总结的简单易懂,支持

大海 #16 · 2017年10月27日 Author
Bird 回复

谢谢支持,我还发了其他类型的文章,工作上有需要用到的,可以去看看。😀

大海 #18 · 2017年10月27日 Author
Bird 回复

所有文章,都是基于本人实际工作实践总结而来,能对你工作有所帮助就最好了
https://testerhome.com/topics/10512
https://testerhome.com/topics/10513

1024 支持原创

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