1. 移动端测试
移动端测试是什么?
移动应用服务,就是针对手机这种移动连接到互联网的业务,或者无线网卡业务而开发的应用程序服务。
1.1. 移动app特性
设备分类
- 智能手机
- 平板电脑
- 智能手表



网络类型
- 移动蜂窝网络-蜂窝组网结构的公众移动通信网络
- WI-FI


系统平台
- Android
- IOS


1.2. 移动app的背景
传统PC互联网的瓶颈
- 缺乏随时随地的优势,无法满足人们对移动交际,办公多媒体等强烈需求
智能移动端崛起
- 易传播
- 易携带
- 智能移动端同样性能强悍
无线技术接入
- 无线通信技术的发展,2g 、3g、4g、5g
- Wi-Fi热点的普及
- 家中常备路由器
1.3. 移动APP特性
互动性
移动设备的触摸屏提供更好的操作体验,APP提供更加丰富多彩的表现形式
精准性
APP是用户主动下载,传播性极高,容易分享到相同兴趣的目标群体,精准投放
创意性
PC电脑创造性太低,移动手机或平板的特性(相机、重力感应、VR、AR)等技术创意性更丰富
用户粘性
移动时代,手机不离身,上网时间更加碎片化
1.4. 移动APP测试与web测试区别
web测试
- 网页屏幕大,输出信息更多
- 测试地点固定,信号固定
- 测试工具,键盘,鼠标
- 鼠标点击测试,测试精准度高
- PC端屏幕较大,网页布局较多
移动APP
- 屏幕较小,需要输出重点信息
- 测试网络环境变化较大
- 弱网环境测试2g 、3g、4g、5g、wifi情况、app是否会卡死
- 设备电量不足
- 测试工具,键盘,触屏,电容笔,语音测试
- 触屏测试尺度范围较大,点击误差大,出错率较高,是否支持双指放大,缩放
- 移动端屏幕较窄,单列布局
1.5. APP测试方法
- 功能测试
- 专项测试
- 稳定性测试
- 兼容性测试
- UI测试
专项测试-安装测试
- 不同渠道获取软件程序,如各种应用商店
- 软件是否兼容不同操作系统
- 软件是否正常运行,是否出现闪退等问题
- 安装进度是否可以取消,已安装的程序文件是否会回滚删除
- 软件安装过程出现意外,如何恢复,如断电,意外重启
- 软件兼容提示,如磁盘空间不足,权限不足
- 安装过程是否需要联网
- 用户无手册是否能够进行安装
专项测试-卸载测试
- 直接删除软件文件夹是否有提示
- 直接卸载软件是否有提示信息
- 卸载软件是否完整,干净
- 卸载过程如突然中断,如断电,死机,软件如何处理
- 是否支持取消卸载
- 是否提供了UI,引导用户取消卸载
专项测试-交互测试
- 多个app是否可以同时运行
- app前后端切换是否影响功能
- app运行时打电话、发短信
- app运行时,网络环境切换,2g、3g、4g、WIFI
- http://mi.talkingdata.com/ 移动app数据网站
专项测试-升级测试
- 客户端性版本是否提示更新
- 升级包下载中断时候支持断点续传
- 升级渠道验证
- 跨版本升级可用性
- 强制升级情况下,用户是否依旧能使用旧版本
- 旧版本的兼容性
专项测试-性能测试
- 边界测试:在边界压力(电量不足、存储空间不足、网络状态差)验证APP是否可正确响应
- 压力测试:长时间操作下,系统软件资源占用是否正常
- 响应能力:各类操作是否满足用户可以接收的响应时间要求
- 消耗测试:正常运行软件时内存、CPU占用量、后台运行时占用量
1.6. UI测试
- app屏幕布局是否合理,界面是否友好,是否符合用户习惯
- 图形控件位置是否一致,是否自适应浏览器窗口,标签风格是否同意,图片分辨率,色彩是否和谐
- 文字表达是否准确,是否有错字,编码是否统一,是否有敏感词汇
1.7. 异常测试
- 热启动应用:应用由后台转化为前台,例如一边聊微信一边打王者荣耀,IOS和安卓都有应用后台功能
- 应用在后台是否显示当前页面
- 应用在后台转化为首页
- 网络中断和恢复
- 例如你坐地铁、信号很差,4g变为2g
- 例如你在家wifi转化为4g,应用是否会崩溃,还是正常兼容
- 例如IOS超过150M的应用,只能用wifi下载,4G无法下载
- 是否支持断点续传
- 电话和信息中断恢复
- 电话:正在4g看电视,被电话打断,回到app是否正常继续播放或是回到app首页
- 信息:正在玩游戏,弹出个微博消息,微信消息,是否影响游戏运转
1.8. 更新测试
app更新卸载
- 升级,app功能性升级,是否正常下载
- 临近版本升级 1.1 -> 1.2
- 跨版本升级 1.1 -> 1.9,保证升级后app可用
- 安装
- 纯净环境安装(首次安装)
- 卸载后留存了资料,再次安装
- 覆盖安装,保整安装文件完整性
- 卸载
- 正常卸载
- 多次卸载
- 保证需要清理的文件清空,需要保留的数据文档存在
1.9. app健康测试
- 健壮性测试
- 手机资源消耗(内存、cpu使用率负载情况)
- 流量消耗,移动数据流量的消耗高低,例如你开发的app图片、视频非常消耗流量,可能面临卸载。需要图片、数据等进行压缩传输
- 崩溃恢复测试:app闪退、app终止运行后,是否自动重启,手动重启后是否可用
1.10. app自动化测试
- 通过场景和数据的预设,把以人为驱动的测试行为转化为机器执行的一种过程。
- app设计了500条测试用例,需要2个人一周时间完成,而用脚本可以节省70%的时间
- 自动化效率更高
- 失误率更低
- 不是所有的功能都适合自动化
1.11. 安全测试
- 通过安全监测工具,进行嗅探
- 防止黑客
- 常见攻击手段
- 常见漏洞攻击
1.12. 移动自动化工具
Robotium
- 支持java
- 仅支持android
- 不支持跨应用
Macaca
- 支持java、python、node.js
- 支持android和ios
- 支持跨应用
Appium
- 支持java、c#、python、php、perl、ruby、Node.js
- 支持android和ios
- 支持跨应用
选择何种工具?
- 是否支持navtive、webview
- 是否支持toast
- 是否支持跨应用
1.13. Appium环境搭建
- appium是开源的移动端自动化测试框架;
- appium可以测试原生的、混合的、以及移动端的web项目;
- appium可以测试ios,android应用(当然了,还有firefox os);
- appium是跨平台的,可以用在osx,windows以及linux桌面系统上;
Appium是node.js的express框架写的Http Server
Appium使用webdriver的json wire协议来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。

脚本->appium server -> UIautomator -> app上执行,创建bootstrap.jar
脚本<- appium server <-selendroid


1.13.1. Appium安装
- 运行appium-desktop-setup-1.2.7.exe,默认安装
下载完毕后,安装完成桌面会生成一个紫色的appium 图标,双击打开

默认显示监控的 host 和 port ,这和 Appium-Server中是一致的。点击 “Start Server V 1.7.1” 按钮启动服务。
现在启动 启动你的移动设备(真机或模拟器),编写 Appium 自动化测试脚本,可以通过Appium-desktop 来运行测试了。
1.13.2. 安装python操作appium的模块
安装方式,需要提前装好python3以及pip3软件包管理工具
pip3 install -i https://pypi.douban.com/simple appium-python-client
1.13.3. 准备appium客户端
在appium server 与手机端建立会话关系时,手机端需要告诉服务端设备相关的一些参数,根据这些参数服务端可以做出相应的处理。
from appium import webdriver
import time
#在appium server 与手机端建立会话关系时,手机端需要告诉服务端设备相关的一些参数,
# 根据这些参数服务端可以做出相应的处理。
desired_caps = {}
# 设备系统
desired_caps['platformName'] = 'Android'
# 设备系统版本号
desired_caps['platformVersion'] = '6.0.1'
# 设备名称,必须有!
desired_caps['deviceName'] = 'Android Emulator'
#desired_caps['app'] = r'D:\test\test.apk' #被测试的APP在电脑的路径
# 应用的包名,在参数中如果添加了应用的安装路径,就可以不用写包名和启动的activity参数
desired_caps['appPackage'] = 'com.android.calculator2'
desired_caps['appActivity'] = '.Calculator'
driver = webdriver.Remote(' http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(5)
driver.quit()
参数解释
desired_caps是一个字典,用于在appium server 与手机端建立会话关系时,手机端需要告诉服务端设备相关的一些参数,根据这些参数服务端可以做出相应的处理。
通用参数:

安卓参数:

iOS专用参数:
