软件测试笔记 --- 移动端 APP 测试
APP 测试
客户端专项测试
用户维度的客户端专项测试及原因
崩溃(crash,弱网)
卡顿(掉帧,gc,cpu)
响应慢(启动时间,交互相应,H5 加载)
发热(CPU,mem,io,network, gps 等硬件的使用)
耗电快(硬件占用)
兼容性测试(机型覆盖,回归测试)
技术维度的客户端专项测试及解决方法
崩溃
自动遍历
monkey 测试
横竖屏切换
快速进退
卡顿
卡顿测试
内存泄漏检查
method profile
响应慢
启动时间
界面切换
h5 性能
发热
method profie
gc 统计
io 统计
流量统计
硬件使用统计
耗电量分析
兼容型问题
兼容性测试
自动化测试,自动化遍历测试
monkey 测试
APP 启动性能分析
APP 的启动流程(Android)
主要流程
Application OnCreate
加载第三方 Sdk
Activity OnCreate
加载自身的逻辑
发送远端数据请求 xxx.json
渲染界面 list
App 启动性能指标
启动类型
冷启动
暖启动
热启动
首屏启动
建议的启动时间
Cold strtup takes 5 seconds or longer
Warm starts takes 2 seconds or longer
Hot starts takes 1.5 seconds or longer
检测方法
adb locat
录屏+视频拆帧
uiautomator 等自动化工具 200ms 巡检界面变化
trancecview
硬埋点
使用 adb logcat(以雪球 APP 为例)
环境准备
package= com.xueqiu.android
清理缓存数据:adb shell pm clear $package
停止进程: adb shell am force-stop $ package
启动 app: adb shell am start -S -W $package/.view.WelcomeActivityAlias
获取数据:adb logcat |grep -i displayed
adb logcat 结果
startTime :记录刚准备调用 startActivityAmdWait()的时间点;
endTime:记录 startActivityAndWait()函数调用返回的时间点;
WaitTime: startActivityAndWait()调用耗时;
WaitTime = endTime - startTime
使用 ffmpeg 拆帧
adb shell am force-stop $package
adb shell screenrecord --bugreport --time-limit 30
adb shell screenrecord --bugreport --time-limit 30
adb shell am start -S -W $pckage/.view.WelcomeActivityAlias
wait
adb pull / data/local/tmp.xueqiu.mp4.
ffmpeg -i xueqiu.mp4 xueqiu.gif
ffmpeg -i xueqiu.mp4 -r 10 frames_%03d.jpg
多平台自动遍历技术测试工具 appcrawler
多平台自动遍历工具 appcrpawles - 开源地址:https://github.com/seveniruby/AppCrawler - 与其他框架的关系 - appcrawier 底层引擎 - appium - adb - macaca - slelenium - appium 底层引擎 - wda - uiautomato2Appca - appCrawler 环境要求 - appcrawlwe 2.5 - java8 appium 1.8.X - 安装方法 - 直接下载 - 从源码编译 - 备注 - 后面提到的 appcrawler 命令或 java -jar appcrawler.jar 皆表示用 jar -jar 命令执行对应版本的 jar 包文件 - java -jar appcrawler-2.4.0-jar-with-dependcies.jar - quick_start - 启动 appium - 启动模拟器或者链接真机 - 开始自动遍历 - appcrawler --capability - "appPackage = com.xueqiu.android.appActivity=.view.WelcomeActivityAlias" - 生成样板配置样式 - 常用事件 - 执行参数与配置文件 - capability 设置:与 appium 完全一致 - appPackage :"com.xueqiu.android" - appctivity:".view.WelcomeActivityAlias" - app: - appium:"http://127.0.0.1:4723/wd/hub" - noREset:true - automationName:uiautomator2 - dontstopAppOnRset:true - testcase:用于启动 APP 后的基础测试用例 - testcase 的完整形态 - given: 所有的先决条件 - when: 先决条件成立后的行为 - then:断言集合 - testcase 的简写形态 - xpath:when 里的 xpath - action:对应 when 的 action - triggerActions: 特定条件触发执行动作的设置 - 执行参数比配置文件优先级别高 - 自动遍历支持 - selectedList: 需要被遍历的元素范围 - firstList: 优先被点击 - lastList:最后被点击 - tagLimitMax: 同祖先(同类型)的元素最多点击多少次 - backButton:当所有元素被点击后默认以后退控件定位 - blackList: 黑名单 - maxDepth:6 遍历最大深度 - 触发器 - triggerAction - 需要特定次数的触发动作 - 通常用于处理弹框 - xpath:指定具体按钮 - action:动作 - times :规则的使用次数 - log 文件解读 - 自动遍历过程 - 信息获取 - 把当前 APP 界面 dump 为 xml 结构 - 获取待遍历元素 - 遍历范围 selectedList - 过滤黑名单 小控件 不可见控件 blackList - 重排控件顺序 firstList lastList - 跳过已点击+ 跳过限制点击的控件 tagLimit - 根据匹配的规则执行 Action - 循环上面的步骤
多设备管理方案
多设备管理平台 STF
简介
源码位置: https://github.com/openstf/stf
OpenSTF 是一个手机设备管理平台-可以对手机进行远管理,调试,远程手机桌面监控等操作
docker 安装
拉取镜像
docker pull opentf/stf:latest
docker pull sorccu/adb:latest
docker pull rethinkdb:latest
启动 rethinkdb
docker run -d --name rethinkdb -v/srv/rethinkdb:/data --net host rethinkdb rethink --bind all --cache-size 8 1 9 2 --http-port 8 0 9 0
启动 stf
docker run -d --name stf --net host openstf/stf stf local --allow-remote
loclhost:7100
跨设备管理方案 selenium Grid
selenium grid 远程运行 selenium test
主旨是在多个机器上并运行运行 selenium
优点
所有测试的中心入口点
管理和控制浏览器运行的 Nodes/环境
扩展
并行运行测试
跨平台的测试
负载平衡
组成
client --> HUB---> NODES
官网: https://www.selenium.dev/downloads/hub
java -jar selenium-server-standalone-3.141.59.jar -role hub node
java -jar selenium-server- standalone-3.141.59.jar -role node -port 5677
配置文件启动 Node
java -jar selenium-server-standalone.jar -role node -nodeConfignode1Config.jison
https://www.selenium.dev/documentation/en/grid/setting_up_your_own_grid/
查看 github 中的项目文档
基于 Jenkins 的自动化调度详解
自动冒烟测试
自动化遍历测试
自动遍历测试运行
兼容性测试
核心依赖资源
设备集群:真机,模拟器,云端设备
管理平台:STF, Jenkins, Selenium Grid
测试用例:遍历工具,测试用例
评论