具体描述
本书全面讲解了移动平台测试方面的技术、技巧、工具和测试用例等实战知识。内容涵盖主流的测试工具,包括JUnit、Monkey、MonkeyRunner、Robotium、UIAutomator、Appium以及性能测试利器LoadRunner、手机端性能监控工具Emmagee等;重点讲解移动平台的主要实战技术,如单元测试、功能测试、性能测试、UI测试、手游测试、自动化测试、测试用例管理、持续集成、脚本录制等。书中结合实例对各个工具进行深入讲解,真正做到学以致用。本书既是一本真正帮助读者学习移动测试中用到的所有技术的实战教程,也是一本名副其实的、贴近实战的移动端测试指南。
本书适合测试初学者、测试工程师、测试经理、移动开发人员和游戏开发人员学习借鉴,也可以作为大专院校相关专业师生和培训学校的教学用书。
作者简介
于涌,毕业于北京大学计算机系,先后担高级程序员、测试分析师、高级测试经理等职位。拥有二十年丰富的开发、测试及管理经验。现致力于软件测试理论和实践研究,尤其擅长自动化测试工具应用、性能测试和单元测试等。曾为多个大型软件公司、高校企事业和专业培训机构提供软件测试、性能测试、安全测试、移动测试、自动化测试等理论和相关工具应用方面的咨询、培训和实施指导工作,具有丰富的实践和教学经验。多本软件测试畅销书的作者。
目录信息
1.1 Android系统介绍 2
1.2 Android系统架构 2
1.3 Android权限系统 4
1.4 Android相关的一些属性简介 4
1.5 搭建Android开发环境 4
1.5.1 JDK的安装与配置 5
1.5.2 Android SDK的安装 8
1.5.3 Eclipse的安装 11
1.5.4 ADT的安装与配置 12
1.5.5 集成版本的下载 15
1.6 创建模拟器 15
1.7 创建一个Android项目 20
1.7.1 创建一个新的Android
项目 20
1.7.2 如何填写Android项目
信息 20
1.7.3 配置Android项目
和活动信息 21
1.7.4 设计程序的原型UI 24
1.7.5 依据UI原型实现Android
项目的布局文件 24
1.7.6 布局文件内容的理解 26
1.7.7 Android项目的源代码
实现 27
1.7.8 AndroidManifest.xml文件
讲解 30
1.7.9 运行Android项目 33
第2章 JUnit框架基础 37
2.1 JUnit框架介绍 38
2.2 JUnit在Android开发中的应用 39
2.2.1 单元测试的重要性 39
2.2.2 单元测试实施者 39
2.2.3 单元测试测试哪些内容 40
2.2.4 单元测试不测试哪些
内容 40
2.2.5 创建基于Android的测试
项目 40
2.3 应用JUnit对Android项目进行
单元测试 42
2.3.1 JUnit基于Android项目
TestCase的应用 42
2.3.2 JUnit基于Android项目
TestSuite的应用 50
第3章 ADB命令 57
3.1 Android调试桥介绍 58
3.2 ADB相关指令实例讲解 60
3.2.1 adb devices指令实例
讲解 60
3.2.2 adb install指令实例
讲解 62
3.2.3 adb uninstall指令实例
讲解 63
3.2.4 adb pull指令实例讲解 67
3.2.5 adb push指令实例讲解 70
3.2.6 adb shell指令实例讲解 73
3.2.7 adb shell dumpsys battery
指令实例讲解 75
3.2.8 adb shell dumpsys WiFi
指令实例讲解 76
3.2.9 adb shell dumpsys power
指令实例讲解 77
3.2.10 adb shell dumpsys telephony.
registry指令实例讲解 78
3.2.11 adb shell cat /proc/cpuinfo指令实例讲解 79
3.2.12 adb shell cat /proc/meminfo
指令实例讲解 80
3.2.13 adb shell cat /proc/iomem
指令实例讲解 80
3.2.14 获取手机型号指令实例
讲解 81
3.2.15 获取手机处理器信息
指令实例讲解 81
3.2.16 获取手机内存信息指令
实例讲解 82
3.2.17 获取手机屏幕分辨率
信息指令实例讲解 82
3.2.18 获取手机系统版本信息
指令实例讲解 83
3.2.19 获取手机内核版本信息
指令实例讲解 83
3.2.20 获取手机运营商信息
指令实例讲解 83
3.2.21 获取手机网络类型信息
指令实例讲解 83
3.2.22 获取手机串号信息指令
实例讲解 84
3.2.23 adb shell df指令实例
讲解 84
3.2.24 adb shell dmesg指令实例
讲解 84
3.2.25 adb shell dumpstate指令
实例讲解 86
3.2.26 adb get-serialno指令实例
讲解 87
3.2.27 adb get-state指令实例
讲解 87
3.2.28 adb logcat指令实例
讲解 88
3.2.29 adb bugreport指令实例
讲解 90
3.2.30 adb jdwp指令实例
讲解 91
3.2.31 adb start-server指令实例
讲解 92
3.2.32 adb kill-server指令实例
讲解 92
3.2.33 adb forward指令实例
讲解 92
3.2.34 am指令实例讲解 93
3.2.35 pm指令实例讲解 94
3.3 手机模拟器相关的一些操作命令
实例讲解 95
3.3.1 模拟器上模拟手机来电
命令实例讲解 95
3.3.2 模拟器上模拟发送短信
命令实例讲解 98
3.3.3 模拟器上模拟网络相关
命令实例讲解 98
3.3.4 修改模拟器的大小比例
相关命令实例讲解 100
3.3.5 模拟器的其他命令及
如何退出模拟器控制台 100
3.4 模拟器相关命令实例讲解 101
3.4.1 创建安卓虚拟设备命令
实例讲解 103
3.4.2 重命名模拟器命令实例
讲解 107
3.4.3 查看模拟器命令实例
讲解 108
3.4.4 删除模拟器命令实例
讲解 109
3.4.5 启动模拟器命令实例
讲解 109
3.5 创建安卓项目相关命令实例
讲解 110
3.6 基于控制台命令行相关命令使用
指导 112
第4章 Monkey工具使用 115
4.1 Monkey工具简介 116
4.2 Monkey演示示例 116
4.2.1 第一个Monkey示例(针对
日历应用程序) 116
4.2.2 如何查看Monkey执行
过程信息 118
4.2.3 如何保持设定各类事件
执行比例 129
4.3 Monkey相关参数讲解 130
4.3.1 -s参数的示例讲解 131
4.3.2 -p参数的示例讲解 132
4.3.3 --throttle参数的示例
讲解 133
4.3.4 --pct-touch 参数
的示例讲解 133
4.3.5 --pct-motion 参数
的示例讲解 133
4.3.6 --pct-trackball
参数的示例讲解 133
4.3.7 --pct-nav 参数
的示例讲解 134
4.3.8 --pct-majornav
参数的示例讲解 134
4.3.9 --pct-syskeys
参数的示例讲解 134
4.3.10 --pct-appswitch
参数的示例讲解 135
4.3.11 --pct-anyevent
参数的示例讲解 135
4.3.12 --hprof参数的示例讲解
135
4.3.13 --ignore-crashes参数的
示例讲解 135
4.3.14 --ignore-timeouts参数的
示例讲解 136
4.3.15 --ignore-security-exceptions
参数的示例讲解 136
4.3.16 --kill-process-after-error
参数的示例讲解 136
4.3.17 --monitor-native-crashes
参数的示例讲解 137
4.3.18 --wait-dbg参数的示例
讲解 137
4.3.19 Monkey综合示例 137
4.4 Monkey相关命令介绍 137
4.4.1 DispatchPointer命令
介绍 149
4.4.2 DispatchTrackball命令介绍
151
4.4.3 DispatchKey命令介绍 152
4.4.4 DispatchFlip命令介绍 153
4.4.5 LaunchActivity命令
介绍 153
4.4.6 LaunchInstrumentation命令
介绍 153
4.4.7 UserWait命令介绍 153
4.4.8 RunCmd命令介绍 153
4.4.9 Tap命令介绍 154
4.4.10 ProfileWait命令介绍 154
4.4.11 DeviceWakeUp命令
介绍 154
4.4.12 DispatchString命令
介绍 154
4.5 Monkey如何执行脚本 154
第5章 MonkeyRunner工具使用 159
5.1 MonkeyRunner工具简介 160
5.2 MonkeyRunner安装部署 160
5.3 MonkeyRunner演示示例 163
5.3.1 第一个MonkeyRunner示例
(针对游戏) 163
5.3.2 如何利用monkey_recorder.py
进行脚本录制 163
5.3.3 如何利用monkey_playback.py
进行脚本回放 169
5.3.4 如何利用monkeyhelp.html
文件获取读者想要的 170
5.4 MonkeyRunner脚本手工编写 171
5.4.1 MonkeyRunner关键类
介绍 171
5.4.2 MonkeyRunner脚本
编写 172
5.4.3 MonkeyRunner脚本
执行 173
5.5 MonkeyRunner样例脚本 174
5.5.1 按Home键 174
5.5.2 设备重启 175
5.5.3 设备唤醒 175
5.5.4 按菜单键 175
5.5.5 输入内容 175
5.5.6 控制多个设备 175
5.5.7 对比截屏和已存在
图片 175
5.5.8 单击操作 176
5.5.9 安装APK包 176
5.5.10 卸载APK包 176
5.5.11 启动Activity 176
第6章 Robotium自动化测试框架 177
6.1 Robotium自动化测试框架
简介 178
6.2 Robotium环境搭建 178
6.3 第一个Robotium示例(针对记事本
应用程序) 178
6.3.1 记事本样例下载 178
6.3.2 记事本样例项目导入到
Eclipse 179
6.3.3 记事本样例项目运行 182
6.3.4 记事本样例功能介绍 184
6.3.5 Robotium测试用例项目
结构 184
6.3.6 Robotium测试用例实现
代码 185
6.3.7 Robotium测试用例代码
解析 187
6.3.8 测试用例设计思路
分析 194
6.3.9 Robotium测试用例执行
过程 195
6.4 用Robotium实现对APK或有源码
的项目实施测试 200
6.4.1 基于有源代码应用的
Robotium自动化测试 200
6.4.2 基于APK包应用的
Robotium测试项目 207
6.5 用Robotium Recorder录制
脚本 214
6.5.1 Robotium Recorder插件的
安装 214
6.5.2 应用Robotium Recorder
录制有源代码的项目 217
6.5.3 应用Robotium Recorder
录制APK包应用 223
6.6 Robotium获取控件的方法 232
6.6.1 根据控件的ID获取
控件 232
6.6.2 根据光标位置获取
控件 238
6.7 测试用例脚本的批量运行 241
6.7.1 测试用例管理 241
6.7.2 测试用例执行 249
6.7.3 生成测试报告 254
6.8 持续集成 259
6.8.1 什么叫持续集成 259
6.8.2 持续集成环境部署 260
6.8.3 创建Jenkins job 264
6.8.4 生成build.xml文件 268
6.8.5 安装测试包和被测
试包 272
6.8.6 Jenkins配置测试报告 273
6.8.7 验证持续集成成果 275
6.8.8 关于持续集成思路
拓展 278
第7章 自动化测试工具—UI Automator
实战 281
7.1 为什么选择UI Automator 282
7.2 UI Automator演示示例 282
7.2.1 UI Automator Viewer工具使用介绍 283
7.2.2 应用UI Automator等完成
单元测试用例设计基本
步骤 288
7.2.3 理解UI Automator Viewer工具捕获的元素属性
信息 291
7.2.4 UI Automator运行环境
搭建过程 292
7.2.5 编写第一个UI Automator
测试用例 296
7.2.6 测试用例实现代码及其
讲解 302
7.2.7 查看已安装的SDK
版本 308
7.2.8 创建build.xml等相关
文件 309
7.2.9 编译生成JAR文件 311
7.2.10 上传生成JAR文件到
手机 313
7.2.11 运行测试用例并分析测试
结果 313
7.3 UI Automator主要的对象类 316
7.3.1 UiDevice类及其接口调用
实例 316
7.3.2 UiSelector类及其接口调用
实例 318
7.3.3 UiObject类及其接口调用
实例 320
7.3.4 UiCollection类及其接口
调用实例 326
7.3.5 UiWatcher类及其接口调用
实例 327
7.3.6 UiScrollable类及其接口
调用实例 329
7.3.7 Configurator类及其接口
调用实例 332
7.4 UI Automator常见问题解答 333
7.4.1 UI Automator对中文支持
问题 333
7.4.2 UI Automator如何执行
单个类里的单个测试
用例 334
7.4.3 UI Automator如何执行
单个类里的多个测试
用例 336
7.4.4 UI Automator脚本
示例 338
第8章 自动化测试工具—Appium
实战 341
8.1 为什么选择Appium 342
8.1.1 Appium的理念 342
8.1.2 Appium的设计 342
8.1.3 Appium的相关概念 343
8.2 Appium环境部署 344
8.2.1 Windows环境部署 344
8.2.2 Appium样例程序的
下载 354
8.2.3 Selenium类库的下载 355
8.2.4 建立测试工程 355
8.3 Appium元素定位的3个利器 371
8.3.1 应用UIAutomator Viewer
获得元素信息的实例 371
8.3.2 应用Inspector获得元素
信息的实例 378
8.3.3 应用Chrome浏览器ADB
插件获得元素信息的
实例 382
8.4 多种界面控件的定位方法
介绍 386
8.4.1 根据ID定位元素 386
8.4.2 根据Name定位元素 386
8.4.3 根据ClassName定位
元素 386
8.4.4 根据Content-desc定位
元素 387
8.4.5 根据Xpath定位元素 387
8.5 多种界面控件的操作方法
介绍 388
8.5.1 长按操作 389
8.5.2 拖曳操作 391
8.5.3 滑动操作 394
8.5.4 多点操作 396
8.6 捕获异常、创建快照 397
8.6.1 安装TestNG插件 397
8.6.2 创建测试项目 400
8.6.3 创建异常监听类 404
8.6.4 创建测试项目类 404
8.6.5 测试项目运行结果 407
第9章 移动平台性能测试 411
9.1 移动平台性能测试简介 412
9.1.1 性能测试的8大分类 412
9.1.2 移动终端的性能指标 413
9.2 移动端性能测试工具 414
9.2.1 TraceView工具使用
介绍 415
9.2.2 SysTrace工具使用
介绍 417
9.2.3 Emmagee工具使用
介绍 422
9.2.4 查看应用启动耗时 426
9.2.5 获得电池电量和电池
温度 427
9.2.6 获得最耗资源的应用 428
9.2.7 获得手机设备电池电量
信息 430
9.2.8 获得手机应用帧率
信息 430
9.3 LoadRunner在移动端性能测试的
应用 437
· · · · · · (收起)
读后感
用户评价
初次翻开这本书时,我以为这又是一本充斥着过时代码示例和陈旧工具介绍的过时读物,但事实完全出乎我的意料。作者的叙事风格非常引人入胜,他仿佛是一位耐心的导师,用清晰、近乎对话的方式引导读者理解复杂的测试模型。最让我眼前一亮的是对“用户体验与非功能性测试”的深度整合。书中用大量的篇幅阐述了如何量化主观的用户感受,比如通过眼动追踪模拟和生物反馈技术来评估应用的响应时间和视觉流畅度,这在传统的性能测试书中是极为罕见的视角。它巧妙地将心理学原理融入了测试用例设计中,使得测试不仅仅是找 Bug,更像是对用户心智模型的验证。关于测试环境的搭建和维护,书中提供的多云平台模拟策略,极大地简化了我们过去需要投入大量人力去维护的物理设备农场。这本书的价值在于,它提供了一套思维框架,让你学会“跳出工具看问题”,关注的焦点从“测试能否跑通”转向了“用户是否满意”。
这本书的深度和广度令人印象深刻,完全超出了我对一本技术手册的预期。它没有停留在基础概念的简单罗列上,而是深入到了移动测试生态系统的各个角落,特别是那些在实际工作中经常被忽视的灰色地带。比如,作者对不同平台(iOS与Android)下的内存管理差异进行了极其细致的剖析,并给出了针对性的性能优化和故障排查步骤。我特别欣赏它对“渐进式测试策略”的阐述,这套方法论帮助我的团队成功地将缺陷发现率提前了至少两个开发周期。书中关于CI/CD流程中移动端自动化脚本稳定性的章节,简直是宝典级别的存在,它不像其他书籍那样空泛地谈论工具,而是结合了真实的构建失败案例,教你如何通过日志分析和环境隔离来根治那些顽固的间歇性错误。此外,对新兴技术如可穿戴设备和混合现实(MR)应用测试边界的探讨,显示出作者极强的行业前瞻性。即便是经验丰富的资深测试工程师,也能从中找到能够立刻应用到日常工作中的实战技巧,它真正体现了“实战”二字的重量。
这本书的结构安排体现了极高的专业素养。它并非线性地从A讲到Z,而是采用了模块化、可交叉引用的方式,使得读者可以根据当前工作中的痛点快速定位到所需的解决方案。我尤其推崇其在“安全测试”部分的处理方式。它没有采用高深的加密学理论,而是聚焦于移动应用中最常见的漏洞类型——如数据存储泄露、API调用权限滥用,并详细演示了如何使用市面上主流的动态分析工具(如Frida脚本)进行实战攻击模拟。这种“白帽黑客”式的测试视角,极大地提升了我们团队的安全意识和实操能力。另外,书中对跨文化和本地化测试的关注也十分到位,提供了针对不同区域字符集、输入法和监管要求的检查清单和自动化方案。坦率地说,市面上很多同类书籍在讲到本地化时往往一笔带过,但这本书却将其视为核心质量维度来认真对待,这对于拓展全球市场的App开发者来说,是无价之宝。
我必须承认,这本书的内容密度极高,初次阅读需要一定的专注力,但一旦掌握了其内在逻辑,回报是惊人的。它对“测试数据管理”的探讨,彻底颠覆了我过去对 Mocking 和 Stubbing 的理解。作者介绍了一套基于合成数据生成(Synthetic Data Generation)的高级策略,用以解决真实用户数据隐私合规(如GDPR/CCPA)与测试覆盖率之间的矛盾。这种方法论在实际操作中非常难以落地,但书中通过伪代码和详细的算法解析,将复杂的生成逻辑清晰地呈现了出来,使得团队能够快速搭建起自己的数据沙箱。此外,作者对于“无代码/低代码”自动化平台的局限性分析得极其到位,没有盲目推崇这些工具,而是清晰地指出了它们在处理复杂手势和原生组件时的瓶颈,并给出了何时应回归代码驱动测试的明确准则。这本书的深度在于它敢于质疑行业内的流行趋势,并为读者提供了基于长期实践的、更稳健的决策依据。
要评价这本书,最关键的一点是它成功地打破了传统上对“移动测试”的狭隘定义。它不仅仅关注应用层面的功能验证,更将底层操作系统行为、网络延迟模型、以及设备硬件异构性都纳入了考量范围。书中对“电池消耗与后台进程管理”的测试章节尤其精彩,它结合了Android和iOS后台生命周期的官方文档,教我们如何设计出能有效暴露能耗Bug的长期压力测试场景,而不是简单地跑十分钟就停止。这种对系统资源耗尽的精细化控制,是普通测试人员难以企及的高度。它不是一本面向初学者的入门指南,更像是一本为希望成为移动测试架构师的人准备的进阶参考。书中的许多图表和流程图,逻辑清晰到可以直接拿去向管理层汇报测试策略的优化方向。它提供的不是现成的答案,而是通往更优测试实践的清晰地图,对于渴望系统性提升移动质量保证水平的专业人士来说,这是一本不可多得的厚重之作。
居然我是第一个评论的,本书面广但不精,可以通过本书对移动APP测试方面用到的工具有个大致的了解,小缺点是代码解释的不够细
居然我是第一个评论的,本书面广但不精,可以通过本书对移动APP测试方面用到的工具有个大致的了解,小缺点是代码解释的不够细
居然我是第一个评论的,本书面广但不精,可以通过本书对移动APP测试方面用到的工具有个大致的了解,小缺点是代码解释的不够细
居然我是第一个评论的,本书面广但不精,可以通过本书对移动APP测试方面用到的工具有个大致的了解,小缺点是代码解释的不够细
居然我是第一个评论的,本书面广但不精,可以通过本书对移动APP测试方面用到的工具有个大致的了解,小缺点是代码解释的不够细