《大话移动 APP 测试》
《大话移动 APP 测试》
第5章 常用工具介绍和实践
Monkey
Android SDK 提供的一个工具:发送伪随机的用户事件流,压力测试。
adb shell monkey -v 10
tips:
- 一般 Monkey 测试的日志很长,报告前需要过滤出有效且不重复的日志。
- 同时记录 logcat 日志。因为有时候仅仅 monkey 的崩溃日志不足以定位问题。
- 记录 seed。才能重现、回归。
- 阅读 monkey 源码,如果 monkey 的伪随机流程不能满足需求:
- 可以修改代码重新编译。把编译出的 Monkey.jar
adb push到要测试手机的 /system/framework 下就能用了。 - 可以写个脚本给 monkey 执行。
- 可以修改代码重新编译。把编译出的 Monkey.jar
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
- http://developer.android.com/intl/zh-cn/tools/testing/index.html
- wiki: Software testing
- 《测试之美》、《微软测试之道》、《Google 测试之道》
- 《Rework》、《高效能人士的七个习惯》
《大话移动 APP 测试》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- ContentProvider URI的组成
ContentProvider URI由哪几部分组成 ContentProvider URI与HTTP URI类似,由以下4部分组成: 1.content:// 相当于HTTP URI中的http ...
- phpcms v9 读取地区联动菜单缓存文件
读取缓存文件的方法是 getcache() 在 phpcms\libs\functions\global.func.php 中可找到. 地区联动菜单的缓存文件是 caches\caches_link ...
- TFS 如何恢复到指定版本
一. 签出文件,然后获得指定版本. 二. 覆盖本地文件. 三.选择合并冲突. 四. 签入恢复的文件. 五. 解决冲突,选择抛弃服务器版本.
- yarn资源调度(网络搜集)
本文转自:http://www.itweet.cn/2015/07/24/yarn-resources-manager-allocation/ Hadoop YARN同时支持内存和CPU两种资源的调度 ...
- 转:A10/A20 Bootloader加载过程分析
来自:http://blog.csdn.net/allen6268198/article/details/12905425 A10/A20 Bootloader加载过程分析 注:由于全志A10和A20 ...
- Cracking the coding interview--Q1.7
原文 Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are s ...
- Android系统的进程分类
1.前台进程:即当前正在前台运行的进程,说明用户当前正在与通过该进程与系统进行交互,所以该进程为最重要的进程,除非系统的内容已经到不堪重负的情况,否则系统是不会将改进程终止的.2.可见进程:一般还是显 ...
- 总结:man, info, hwclock, cal, type, which, dirname, basename, who, which, whatis, makewhatis, hash, tty
man, info, help, date, hwclock, cal, shutdown, reboot, halt, poweroff, type, cd, which, dirname, bas ...
- bootstrap栅格布局,第一次成功
代码: <div class="helper" style="background-color: #F7F7F9;height: 200px;padding-top ...
- tarjan缩点
整理了下模板... #include<iostream> #include<cstdio> #include<cmath> #include<algorith ...