《大话移动 APP 测试》

wiki: Software testing

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

Android、iOS

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》、《高效能人士的七个习惯》

《大话移动 APP 测试》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. winform中相对路径和绝对路径的获取

    例如: Path.GetFullPath(Path.Combin(@"C:\a\b\c","..\b.text")); ..代表上级目录 .代表当前目录 结果: ...

  2. Swift—使用try?和try!区别-备

    在使用try进行错误处理的时候,经常会看到try后面跟有问号(?)或感叹号(!),他们有什么区别呢? 1.使用try?  try?会将错误转换为可选值,当调用try?+函数或方法语句时候,如果函数或方 ...

  3. MPMediaPickerController 选取本地音频--备用

    MPMediaPickerController 与 UIImagePickerController 类似,允许用户从音乐库中选取音乐.播客.音频书. 一.创建 MPMediaPickerControl ...

  4. 06 - 从Algorithm 算法派生类中删除ExecuteInformation() 和ExecuteData() VTK 6.0 迁移

    在先前的vtk中,如vtkPointSetAlgorithm 等算法派生类中定义了虚方法:ExecuteInformation() 和 ExecuteData().这些方法的定义是为了平稳的从VTK4 ...

  5. reg51.h 详解

    /* BYTE Register */ sfr P0 = 0x80; //P0口 sfr P1 = 0x90; //P1口 sfr P2 = 0xA0; //P2口 sfr P3 = 0xB0; // ...

  6. COJ 0138 NOIP201108计算系数

    NOIP201108计算系数 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给定一个多项式(ax + by)^k,请求出多项式 ...

  7. sigaction函数的使用

    sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作). 他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该 ...

  8. 探求Floyd算法的动态规划本质(转)

    ---恢复内容开始--- Floyd–Warshall(简称Floyd算法)是一种著名的解决任意两点间的最短路径(All Paris Shortest Paths,APSP)的算法.从表面上粗看,Fl ...

  9. zoj3422Go Deeper(2-sat + 二分)

    题目请戳这里 题目大意: go(int dep, int n, int m) begin output the value of dep. if dep < m and x[a[dep]] + ...

  10. Java学习笔记(1)——基本数据类型

    一.进制转换 10^n被称为权  10称为基数   计算机中正数和负数的关系是取反加一, 如: ~3+1=-3 补码边界运算有溢出风险 32位二进制补码最多表示2^32个数, -2G~2G 1,计算机 ...