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

《大话移动 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. 高放的python学习笔记之基本语法

    python与c++的不同之处 python的语句块不是用{}括起来的而是冒号后面跟一些与比当前语句多一的tab缩进的语句. 1.定义变量 python的变量类型不需要人为指出,会根据赋值的类型决定此 ...

  2. 你好,C++(17)0.1*10不等于1.0——4.1.4 关系操作符4.1.5 逻辑操作符

    4.1.4  关系操作符 在C++中,除了需要用算术操作符对数据进行加减乘除的算术操作之外,我们有时候还需要对数据之间的关系进行操作,也就是对两个数据进行大小比较,得出它们之间的大小关系.在现实世界中 ...

  3. win7下搭建nginx+php的开发环境

    本来在win7下用的是IIS做web服务器,但近来因项目需求的原因,需要在服务器遇到404错误的时候自动做转向(不是在客户端的跳转,而是在服务器收到客户端请求去某目录下读取文件返回时,如果发现目录或目 ...

  4. showModalDialog-父窗体子窗体

    showModalDialog使用例子,父窗口向子窗口传递值,子窗口设置父窗口的值,子窗口关闭的时候返回值到父窗口. farther.html --------------------------- ...

  5. FileReader

    Reader 字符流的基类,抽象类 FileReader 读取文件的字符流 package file; import java.io.File; import java.io.FileReader; ...

  6. Swift—析构函数-备

    与构造过程相反,实例最后释放的时候,需要清除一些资源,这个过程就是析构过程.在析构过程中也会调用一种特殊的方法deinit,称为析构函数.析构函数deinit没有返回值,也没有参数,也不需要参数的小括 ...

  7. Android 之Service

    service是运行在后台的服务,你可以启动一个服务Service来播放音乐,或者记录你地理信息位置的改变,或者启动一个服务来运行并一直监听某种动作. 接下来分析一下service 的生命周期: 1: ...

  8. Altium designer PCB中过孔铺地连接的设置

    在Altium designer 6及更高版本如Altium Designer Winter 9.altium designer summer 9都会有这样的问题,在Altium DXP2004里面是 ...

  9. SolrCloud 5.2.1 installation and configuration

    虽然不是很有技术含量的事情,主要依靠的是阅读能力,然而知识的东西还是记录一下,以备后继待查. 环境相关 1. Server:h1,h2,h3 2. OS RHEL 6.2 3. Zookeeper 3 ...

  10. http协议的各个版本及区别

      这个东西在一篇博文上面看见的,谢谢原博主提供!又学习了...