APP测试 application 按键:塞班系统-c/c++ ,应用程序-c/java 智能机:安卓-android:2008年发布 最新:adndroid12 底层时c语言,应用程序是java :苹果-ios 底层是c语言,应用程:oc (object c) swift语言 :华为-鸿蒙 手机厂商:华为 三星 opponents/vivo 小米 App开发: android原生开发:纯java开发,没网络的时候可以使用 混合开发:java+html5+css3 IOS开发:oc+html5+css3 App测试与Web测试的区别: 架构不一样:web:bs架构 app:cs架构 功能测试与接口测试都是一样的方法进行 app的专项测试: 兼容性测试 不同厂商的兼容Android,不同系统版本的兼容 交互性测试 跟手机硬件的交互,以及主流app的交互 主打iaoh,被动交互 弱网测试 在网络不好的情况下使用 稳定性测试 关于手机的指标:内存,cpu,网络,电量,帧率 web:开发提供代码包,上传Linux服务器,解压启动 app部署:开发提供代码包,安卓的后缀-apk 苹果的安装包-ipa 公众号测试:文章推送,视频内容 小程序测试:在测试环境的时候,需要开发人员把测试手机的设备号加入白名单,才能测试 通过微信开发者工具测试,小程序一般不超过2m M网站:与Web测试差不多,也是需要开发提供一个测试地址-测试入口 html5:兼容性好,可以跨平台,项目上线时可以改代码,开发维护成本低 app测试流程: 三个阶段 需求了解:分析需求,参加需求评审会议 测试阶段:编写测试计划-提炼测试点-编写测试用例-准备测试环境-准备测试数据 测试执行:接口测试(有新增或老接口改动)-冒烟测试-系统测试-bug跟踪管理-回归测试-验收测试-测试报告-上线 app版本:v1.0.0 8.0.26 大版本:一般发布很少,对整个系统流程有影响,或在重大变更 中版本:对于部分模块功能有影响 小版本:小部分优化 app测试维度: 安装卸载 全新安装:检查是否安装成功,检查版本号是否为最新 覆盖安装:从低版本升级到高版本 相邻版本的升级:小版本的相邻,小版本升级 跨版本升级:大版本升级,大于一个版本的更新 安装渠道:第三方渠道下载 卸载:检查卸载是否成功,查看文件缓存数据是否删除 功能测试 等价类,边界值,正交表,因果图,判定表,流程分析,错误推断,错误推断,随机测试,异常分析 兼容性测试 系统版本的兼容:Android:10.11.12 IOS:15 不同厂商的兼容:小米 华为 三星... 屏幕大小尺寸:不同安卓苹果的尺寸 分辨率:720,1080,2k,4k 云测平台:wetest Mtc 阿里云 精灵云 流程:需要上传app包-安装-测试-获取日志-下载日志-查看日志-关闭 交互性测试 和手机本身固有的一些交互 硬件:摄像头,音量键,锁屏键,麦克风,听筒,蓝牙,WiFi,红外线,陀螺仪,GPS,NFC 手机本身的功能:电话,短信,邮件,视频电话,通讯录,日历。相册,闹钟,天气,手电筒,指南针 和第三方软件的交互 阿里:淘宝,天猫,支付宝,微博,菜鸟。。。。 腾讯:游戏,qq,微信,美团,京东,快手,应用宝。。。 百度:百度地图,百度搜索,百度贴吧,百度浏览器。。。 字节:小红书,抖音,今日头条,皮皮虾 主动交互与被动交互 主动:主动去调用第三方软件 分享,授权登录 和手机本身功能 获取摄像头,相册信息,地理位置 被动:第三方软件在使用app的过程中,被打断 微信信息,通知,电话 和手机本身功能的被动交互 手机短信进来 权限测试 权限开启之后,应用使用正常,关闭之后则不能使用 存储权限:读取,修改,删除内容 电话:读取设备的通讯状态,短信验证码 位置:网络定位,gps 相机:前后置摄像头 相册:照片信息 麦克风:语言输入 通讯录:通讯录好友 异常测试: 长时间查看日志信息 app超时无响应 崩溃/闪退 接口测试: 和web的接口测试一样 如何抓取手机app的包 1.配置环境 先下载一个模拟器(木木模拟器) web系统可以利用F12抓包 app只能通过工具来进行抓包 fiddler charles 在进行手机app抓包时前提条件:必须是手机和电脑处于同一网段(局域网) 2,查看电脑ip地址 cmd - > ipconfig 查看当前连接的网络的ipv4地址 3,设置fiddler 选项->连接:勾选允许远程设备连接 设置手机(模拟器)的ip地址: 进入设置->点击WLAN->长按wifi名称->点击修改网络->展开高级选项->选择手动代理->输入本机的ip地址和fiddler端口号 4,下载fiddler证书 在手机(模拟器)浏览器中输入:刚刚设置的ip地址和端口号 例:192.168.2.202:8888 点击下载证书,安装证书 稳定性测试 通过执行monkey来操作的,长时间运行软件 adb shell monkey 参数 monkey命令和自动化是不一样的。 monkey命令在执行的时候是没有规律的。 // Event percentages: 事件的比例 // 0: 15.0% 0:触摸事件百分比,即参数--pct-touch 1:滑动事件百分比,即参数--pct-motion 2:缩放事件百分比,即参数--pct-pinchzoom 3:轨迹球事件百分比,即参数--pct-trackball 4:屏幕旋转事件百分比, 5:基本导航事件百分比,即参数--pct-nav 6:主要导航事件百分比,即参数--pct-majornav 7:系统事件百分比,即参数--pct-syskeys 8:Activity启动事件百分比,即参 数--pct-appswitch 9:键盘翻转事件百分比,即参数--pct-flip 10:其他事件百分比,即参数--pct-anyevent -P参数:后面接要进行稳定性测试的app包名 -v参数:显示日志的详细程度,一般是用3个-v 2.anr(超时无响应)crash(闪退)error (错误) exception(异常) 做稳定性测试的时候会遇到一些崩溃的场景(运行的时候忽略这个错误) 忽略机制: --ignore-crashes 忽略崩溃 --ignore-timeouts 忽略超时 --ignore-security-exceptions 忽略安全信息 --ignore-native-crashes 忽略本地代码导致的崩溃 --monitor-native-crashes 忽略监视系统中本地代码发生的崩溃 3,事件操作的间隔时间,单位是毫秒ms --throttle 毫秒数 命令: adb -s 192.168.8.7:5555 shell monkey -p net.jitashe.mobile -s 99999 --pct-touch 20 --pct-motion 30 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes --throttle 50 -v -v -v 500 logcat >D:applog.txt adb shell monkey -p 包名 -s 种子数 --pct-touch 20 --pct-motion 30 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes --throttle 时间(ms) -v -v -v次数 事件数100w logcat >目录 种子数: 用来复现或者验证问题,在查看monkey日志的时候发现日志中有崩溃闪退的日志需要提交bug给开发排查修复 修复完成之后需要用相同的命令再去跑一遍,如果没有崩溃闪退的日志说明已经修复了 在运行monkey命令的时候如果没有设置种子数,会自动生成一个种子数 perfdog使用: 1.手机先打开开发者模式 打开调试模式 帧率测试: 1)Avg(FPS):平均帧率(一段时间内平均FPS) 不准确 2)Var(FPS):帧率方差(一段时间内FPS方差) 一般看方差,方差越小越稳定 1,1,3,4,4 2,2,3,4,4 3) Drop(FPS):降帧次数(平均每小时相邻两个FPS点下降大于8帧的次数) Jank(1S内卡顿次数。解释说明如ios平台说明) 1) BigJank:1s内严重卡顿次数 2)Jank(/10分钟):平均每10分钟卡顿次数。 3)BigJank(/10分钟):平均每10分钟严重卡顿次数 FTime(上下帧画面显示时间间隔,即认为帧耗时) 1)Avg(FTime):平均帧耗时 2) Delta(FTime):增量耗时(平均每小时两帧之间时间差>100ms的次数) 帧率检查 1)静态页面窗口 只需关注FPS,理论FPS应该为0,否则,说明有冗余刷新容易引起手机发热及栽耗 2)有滚动动画页面窗口 只需关注FPS,FPS处于合适值即可,无需高频刷新。 3)快速滑动页面窗口。 需要关注FPS、Jank及卡顿率。手机交互灵敏度就是来源于此,Android系统才出计划Jank。 一般滑动状态下,帧率越高越好,Jank越小越好。 4)播放视频页面窗口。 需要关注FPS、Jank及卡顿率,视频卡顿直接影响用户。 视频一般帧率18-24帧,Jank=0。比如微信播放视频、视频播放器等。 CPU Usage: 安卓传统CPU利用率,也叫未规范化CPU利用率 计算方法:当前时刻CPu频率下,CPU Usage = CPu执行时间/CPU总时间。 备注:一般Android Studuio或Adb等获取的CPu利用率都是未规范化CPU利用率。 CPU Usage(Normalized):规范化CPU利用率 由于移动设备CPU频率时刻变化,用传统CPu利用率计算方法, 假定在低频率时刻计算出CPU利用率=30%,和在CPU高频时刻计算出CPU利用率=30%。同样都是30%但性能消耗是完全不样的, 明显高频消耗更高。传统CPU利用率已无法真实反映性能消耗。 所以我们需要一种规范化(可量化)的统计方式。将频率因素考虑进去。 cPU Usage(Normalized)=(CPU执行时间/CPU总时间)*(当前时刻所有CPu频率之和/所有CPu频率最大值之和)。 PerfDog两种统计方式都有。CPU Usage默认为未规范化CPu利用率。建议使用规范化CPU利用率作为衡量性能指标。 备注:极少部分手机暂时无法测试规范化CPU利用率,请重启下尝试。 内存 vss - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存) PSS - Proportional Set Size实际使用的物理内存 (比例分配共享库占用的内存) uss - Unique Set Size进程独自占用的物理内存(不包含共享库占用的内存) 一般来说内存占用大小有如下规律:vSS >= RSS >= PSS >= uss 而PerfDog的Memory也就是Android PSS Memory, 也是我们通常来用作代表内存的数据,是实际使用的物理内存大小。 Swap Memory (Swap Memory,部分设备支持Swap功能,在启用Swap功能后,系统会对PSS内存进行压缩, Swap增加,PSS会相应减少,由于压缩会占用CPU资源,同时相应会导致FPS降低) Virtual Memory(VSS)虚拟内存是计算机系统内存管理的一种技术。 它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间)而实际上它通常是被分隔成多个物理内存碎片, 还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换 CPU占用的比较维度 1.App与上个版本的App进行对比 2.和竞品做对比 小程序部署 部署: 测试阶段;上传代码包,到微信公众平台,扫描二维码,就可以测试 上线后,是否可以搜索的到 微信小程序也是安装包,镶嵌微信里面,一般控制代码包 1M以内 需要代码包html+css,上传到 微信公众号平台 ,微信里面才能搜索的到 ,界面测试,功能测试 入口 可以通过微信聊天页面的下拉框找到小程序(如果已经打开过一次);也可以通过“发现”模块下的“小程序”中的搜索框搜索到对应的小程序;还可以通过“附近的小程序”找到小程序 肯德基。。。 是否可以搜索的到(微信公众号平台,设置位置功能) 交易 小程序支持交易,那么它与微信的钱包、卡包都是可以交互的。如果有交易功能,需要验证各种交易场景。 缓存 比如需要验证清空微信的缓存是否对小程序有影响 是否正常使用 安全(sql注入,xss脚本攻击,数据加密) 小程序是内嵌到微信的,但腾讯并未花太多精力在小程序的安全性上,2017年小程序的大漏洞就说明了这一点。不要指望腾讯帮你提升完全性。对于测试人员,安全相关的测试能做的毕竟有限,我们所要做的就是知道小程序有安全隐患就行了,比如小程序运行后在手机上能看到一个wxapkg的一个包,这个包解压后就是可以认为是小程序的源代码。 (微信小程序测试)-抓包(charles) 根据域名去分类去查找 权限(摄像头,短信,通讯录,继承微信的权限) 这里的权限指的是访问权限是否授权,所以权限测试分为“已授权”和“未授权”,所以需要测试在跳转到微信小程序时“允许访问”和“不允许访问”这两种情况下小程序是否各项功能能够正常工作。 屏幕兼容性-界面测试(兼容性,考虑不同屏幕大小跟分辨率) 普通的手机APP会有屏幕兼容性的问题,小程序同样有这样的问题,只不过相对少了些。微信小程序定义了一个新的尺寸单位rpx(responsive pixel)可以适配不同尺寸的屏幕,在页面上定义对象的单位是rpx就可以在不同的屏幕上适配。但1rpx的像素经常在iphone7p上出现断线的情况。因此需要在测试过程中关注1rpx像素的显示。 微信兼容性-考虑微信不同版本的兼容 因为微信小程序SDK的API版本一直都在更新,导致SDK的API有可能有向下的兼容性问题并最终会影响到在最新版本小程序SDK上开发的程序不能在啊低版本的SDK?上像预期的那样运行。所以测试微信版本的兼容性之前要先确定小程序使用的库版本在哪些微信版本号上支持。 操作系统兼容性-覆盖不同手机品牌厂商 这里的操作系统主要是指android系统和iOS系统。小程序运行在微信中,看起来是跟操作系统没关系,实际上还是有关系的,因为底层调用依赖于具体的操作系统。按照官方文档在微信小程序在ios上是运行在JavaScriptCore中但在Android上是通过X5JSCore来解析的。 如果有条件,不仅要覆盖android和iOS,包括主流的Android品牌也要覆盖,比如华为,VIVO等等。覆盖到最新的试用版和当前流行的主要版本 功能测试 和所有功能测试一样 https://zhuanlan.zhihu.com/p/475338295 弱网测试 手机使用时网络不好:电梯,隧道,支付重复 fiddler:模拟弱网测试, 设置-自定义规则-搜索300 上行3000,下行900 模拟2g网 性能测试 相对于游戏 数据篡改 断点的使用: 首先保证环境正常 自动断点 找到篡改数据接口: 复制请求地址-保存响应数据-打开响应信息修改信息保存-配置自动转发-配置自动转发勾选-添加规则-填入url 响应数据 adb命令-安卓调试桥 只有安卓可用 a:android d:debug b:bridge 搭建环境-sdk包安装-配置环境变量 cmd adb测试安装成功 sdk:software development kit 软件开发工具包 adb命令操作 如果是真机,通过数据线连接电脑和手机 在设置中连续点击7次版本好-开启usb调试 要保证手机和电脑处于同一局域网 启动adb:adb server-start 停止adb:adb kill-server 连接设备: 查看已连接的设备:adb devices 连接设备:adb connect 设备的ip port 端口号默认:5555 断开连接:adb disconnect 设备的ip port 安装app adb install 安装包 卸载 查看所有卸载包名:adb shell pm list package com.android开头的是系统包 查看第三方卸载包名:adb shell pm list package -3 卸载:adb uninstall 包名 当连接了多台设备,所有的命令要加 -s 设备ip port 命令 adb -s 127.0.0.1:5555 install 包url 查看日志: adb logcat 或 abd logcat >D: 默认打印系统日志和程序和崩溃的日志:main、system、crash 日志级别:F 致命-fatal E 报错-error W 警告-warning I 普通-info D 调试-debug 日志过滤显示:adb logcat *:E 比过滤级别高的也回显示 进入adb底层linux:adb shell 退出:exit 文件上传下载:adb pull/push adb pull 设备文件目录/sdcard/1.txt 本机的路径/D: adb push D:\abc.txt /sdcard/1.txt