《大话移动 APP 测试》

时间:2021-11-15 03:43:37

《大话移动 APP 测试》

wiki: Software testing

第5章 常用工具介绍和实践

AndroidiOS

Monkey

Android SDK 提供的一个工具:发送伪随机的用户事件流,压力测试。

adb shell monkey -v 10

tips:

  • 一般 Monkey 测试的日志很长,报告前需要过滤出有效且不重复的日志。
  • 同时记录 logcat 日志。因为有时候仅仅 monkey 的崩溃日志不足以定位问题。
  • 记录 seed。才能重现、回归。
  • 阅读 monkey 源码,如果 monkey 的伪随机流程不能满足需求:
    • 可以修改代码重新编译。把编译出的 Monkey.jar adb push 到要测试手机的 /system/framework 下就能用了。
    • 可以写个脚本给 monkey 执行。

Emulator

Android:所有在模拟器上进行的测试都仅作参考。

  • 相机、wifi 等
  • 同分辨率、同系统版本下,在界面显示(UI)和某些按钮的响应上往往有比较大的差异。

iOS: 界面上没差异。

安卓版本不可能遍历所有机型,可以通过集成 友盟、Flurry 等得到用户机型分布,前 10 机型基本上就是测试重点了。第三方兼容测试平台(比如 Testin)等数据也可以作为参考。还有就是公司和部分用户内测。

telnet 到模拟器可以进行很多call、sms、geo、power等操作。

➜  ~  adb devices
List of devices attached
emulator-5554 device ➜ ~ telnet localhost 5554
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Android Console: type 'help' for a list of commands
OK help
Android console command help: help|h|? print a list of commands
event simulate hardware events
geo Geo-location commands
gsm GSM related commands
cdma CDMA related commands
kill kill the emulator instance
network manage network settings
power power related commands
quit|exit quit control session
redir manage port redirections
sms SMS related commands
avd control virtual device execution
window manage emulator window
qemu QEMU-specific commands
sensor manage emulator sensors
finger manage emulator finger print gsm call 15555218135 #模拟器默认号码

MonkeyRunner

With monkeyrunner, you can write a Python program that installs an Android application or test package, runs it, sends keystrokes to it, takes screenshots of its user interface, and stores screenshots on the workstation.

  • 用来跑 python 脚本。
  • 可扩充api。
  • 支持录制、回放。

Hierarchy Viewer

DDMS(Dalvik Debug Monitor Service)

Compatibility Test Suite

Android 提供的兼容性测试框架。只有通过 CTS 测试的设备才能获得 Android 商标和使用 Android Market 的权限。其中有不计其数的测试代码,覆盖 Android 系统的各个模块,非常值得借鉴。

Tcpdump/WireShark

网络分析。

……(关于日志分析)有兴趣的通许可以先熟读 TCP/IP 协议卷一到卷三……

FindBugs

静态代码分析工具。

Lint

Android Studio 中,Lint 结果显示在 Inspection 中。

Charles

抓包。

Instruments.Automation

Instruments 是 Xcode 自带的测试工具,包含一系列的实用工具。

Automation 是 Instruments 中的一个工具。用 JavaScript 写脚本进行 iOS 设备的界面自动化测试。

第6章: 常用框架介绍和实践

Instrumentation

安卓执行测试活动的核心就是 Instrumentation 框架,可以实现界面测试、功能测试、接口测试甚至单元测试等。Instrumentation 框架通过在同一个进程中运行主程序和测试程序来实现这些功能。市面上的界面自动化工具多是对它的封装。

以下是我在 Android 上从开始思考的两套思路

* 以 Python 作为自动化测试方案的主导。Python 的 os 模块用来调用 adb,负责启动和关闭模拟器;adb 负责安装和卸载应用;MonkeyRunner 负责模拟应用必须的操作(比如登陆等);MonkeyRunner 负责截图以及对比最终结果。

* 以 Python 作为自动化测试方案的主导。Python 的 os 模块用来调用 adb,负责启动和关闭模拟器;adb 负责安装和卸载应用;Appium 负责模拟应用必须的操作(比如登陆等);MonkeyRunner 负责截图以及对比最终结果。

不过最终两套方案都没有被采纳。我自己最后才去的方案是:

Python 作为自动化测试方案的主导。Python 调用 shell 脚本负责启动和关闭模拟器;adb 负责安装和卸载应用;MonkeyRunner 负责屏幕的解锁;Instrumentation 负责应用内的操作以及界面控件的验证;MonkeyRunner 负责最终界面的截图和保存;Python 的 PIL 模块负责图片像素级别的对比。

Emma Code Coverage

  • 代码覆盖(code coverage)工具。
  • 检查测试测试用例对代码的覆盖率。
  • 也可以统计黑盒手动测试的代码覆盖率。(添加类似thread.sleep()方法,sleep 过程中手动操作被测试应用。)

robolectric

第8章: 性能测试介绍和实践

Emmagee

Instrumentation

Android CTS 中可以找到参考。

HPROF

HPROF 是一种后缀为 .hrpof 的文件。一个 heap dump 会保存为一个 .hrpof 的二进制给文件。

Gfxinfo

Systrace

TraceView

Instruments -- Leaks

Android 多分辨率自动化实践

Python 负责总体集成:Shell 脚本控制启动和关闭不同分辨率的 Emulator;MonkeyRunner 负责模拟非应用的操作以及协助截图;Instrumentation 负责应用内的操作;最后由 Python 进行图片对比测试。

tips

  • 测试的核心是用例设计。
  • 执行用例的时候,意义在于学习别人写用例的思路;写用例的时候,意义在于学习怎么能够更好地分析需求。
  • 主动,也许是测试从业人员最终要的品质。
  • 学会判断轻重缓急。学会合理安排时间进行测试,不要只是说时间紧人少,人是活的,重要的在于自己的策略和沟通。
  • 自动化测试是为了提高效率,帮助做回归。不是为了解放手工测试人员。
  • 分层思想。

todo

  1. http://developer.android.com/intl/zh-cn/tools/testing/index.html
  2. wiki: Software testing
  3. 《测试之美》、《微软测试之道》、《Google 测试之道》
  4. 《Rework》、《高效能人士的七个习惯》