测试核心要点
2022-08-20 22:19:20 0 举报
AI智能生成
测试面试资料
作者其他创作
大纲/内容
接口测试
双十一 主互动电力值玩法——/cgi-proxy/xxx修改mission code后发送可以直接领取部分任务的电力值
/cgi-proxy/xxx提现请求并发有两次成功
发红包接口并发成功
身份认证接口,人脸识别可以跳过
用户购买获得分销权限,然后订单退款后,分销链接依然可以生效
退款接口cgi-agency/xxx接口的价格参数price=0时可以提交成功,与产品需求逻辑不符
modify_xxx接口,下架课程这里能够跨机构操作成功
接口没有做身份校验,可以通过这些接口爬取KA课程全部学生的身份信息
用户通过接口/cgi-proxy/xxx请求"session_id": "100"的分数,必现的可以把自己分数刷成满分
通过接口依然能够领取未开始和已结束的红包
前端多次调用同一个接口,以及后台接口没有做限频处理
分页时对count没做数量限制,存在风险
服务接口压力测试
缓存热key
由于访问同一数据,导致请求均落到该数据分片,造成分片负载过高
超时雪崩
下游服务超时后上游不断重试,瞬间多出几倍的请求直接压垮服务
日志写入过多
日志分级不合理,无用信息过多,现网打开debug日志等
sql语句慢查询
sql语句设计不合理,联表查询未做优化,没有合理的索引
大促玩法-加入团队接口压测报错:
bug原因:风控事务加团, 并发执行事务插入和更新同一条记录的操作, 造成死锁
解决方案:尝试插入团信息不需要与更新团人数在一个事务内, 两者可独立开, 避免锁升级造成的死锁
bug原因:风控事务加团, 并发执行事务插入和更新同一条记录的操作, 造成死锁
解决方案:尝试插入团信息不需要与更新团人数在一个事务内, 两者可独立开, 避免锁升级造成的死锁
go_xxx服务存在并发性问题,调用SecCheck接口异常:超时和拒绝连接:
bug原因:RPC调用超时设置太短,导致tcp链接异常
解决方案:timeout从100ms调整到500ms,解决问题
bug原因:RPC调用超时设置太短,导致tcp链接异常
解决方案:timeout从100ms调整到500ms,解决问题
【性能测试】300qps下ExecBoost接口偶现没有写入数据库情况
bug原因:redis中上一次压测的脏数据部分漏删导致流程没法走到写db这里,
解决方案:下次压测前确认先删除脏数据再压测
bug原因:redis中上一次压测的脏数据部分漏删导致流程没法走到写db这里,
解决方案:下次压测前确认先删除脏数据再压测
HomeRecommendFeeds接口300ms超时。压测的时候错误请求笔数700+,失败率9.85%
解决方案: 请求海豹(seal)接口使用旧PB,使用qapp端口和命令字不对导致请求失败,已更换最新pb,更新七彩石配置,请求使用trpc协议,问题修复。
解决方案: 请求海豹(seal)接口使用旧PB,使用qapp端口和命令字不对导致请求失败,已更换最新pb,更新七彩石配置,请求使用trpc协议,问题修复。
播放上报接口每秒钟1000QPS生产消息,KAFKA消息堆积:
bug原因:kafka消费端需要些更新db,消费慢,导致kafka服务端消息堆积
解决方案:使用kafka消费协程池解决,协程池数量Apollo可配置
bug原因:kafka消费端需要些更新db,消费慢,导致kafka服务端消息堆积
解决方案:使用kafka消费协程池解决,协程池数量Apollo可配置
协程池,简单来说就是由多个协程实现的池化技术
连接池是指预先分配一批连接,并将它们放入一个缓冲区中循环使用,形成池化效应
“内存池”和“进程池”都带有“池”字?其实,这两种技术都属于“池化技术”。
它通常是由系统预先分配一批资源并循环利用,达到资源“池化”的目的,以解决高并发下,
由于大量分配资源,导致性能开销过大的问题
它通常是由系统预先分配一批资源并循环利用,达到资源“池化”的目的,以解决高并发下,
由于大量分配资源,导致性能开销过大的问题
安全问题
越权漏洞
逻辑漏洞
信息泄漏
XSS
埋点测试
上报空指针异常
点击事件透传
短视频预览时长和录制时长不一致
细微的业务数据偏差
APP性能测试(软件方法,还有硬件方法)
android
内存信息
adb shell dumpsys meminfo pid
CPU信息
1 top 获取cpu信息
2 adb shell dumpsys cpuinfo pid
3.通过读取/proc/pid/stat文件
流量
recv:被测应用的下行流量
send:被测应用的上行流量
通过读取 /proc/pid/net/dev 文件(低版本直接使用接口TrafficStats.getUidRxBytes())
流畅度
fps:用户可见的每秒显示帧数
电影帧率一般是24帧。电影帧单帧耗时为 1000ms/24≈41.67ms。
电影帧率是一个临界点。低于这个帧率,人眼可以感觉出画面的不连续性。
电影帧率是一个临界点。低于这个帧率,人眼可以感觉出画面的不连续性。
一般手机是60帧,一帧时间是16.6ms
首先 FPS 并不是越高越好,也不是越低就越差。
它反映的是一种视觉惯性现象,FPS 值应当是越稳定越好
它反映的是一种视觉惯性现象,FPS 值应当是越稳定越好
dumpsys SurfaceFlinger --latency SurfaceView
com.youku.phone/com.youku.ui.activity.DetailActivity
可以准确获取到视频窗口的帧绘制信息。
com.youku.phone/com.youku.ui.activity.DetailActivity
可以准确获取到视频窗口的帧绘制信息。
jank:卡顿发生次数
通过 dumpsys gfxinfo packageName 获取到的 janky frames如下。
这里的Janky frames是当一帧的时间大于16.67ms时,就计为一次 Janky frame
这里的Janky frames是当一帧的时间大于16.67ms时,就计为一次 Janky frame
启动时间
adb logcat 过滤出 DisplayManager 对应测试包相关信息
除了 DisplayManager 的打印时间方法后,还有通过关注 am 的启动时间及 DisplayManager 打印的结束时间,
通过两者时间之间想减也能得到应用的启动时间
通过两者时间之间想减也能得到应用的启动时间
耗电量
1.通过adbshell dumpsys battery
2.基于Android提供的PowerManager.WakeLock来进行
3.功耗的计算=CPU消耗+Wakelock消耗+数据传输消耗+GPS消耗+Wi-Fi连接消耗
iOS(xcode instruments)
耗电量
UIDevice
api 提供了获取设备电池的相关信息,包括当前电池的状态以及电量。
获取电池信息之前需要先将 batteryMonitoringEnabled 属性设置为 YES,
然后就可以通过 batteryState 和 batteryLevel 获取电池信息。
获取电池信息之前需要先将 batteryMonitoringEnabled 属性设置为 YES,
然后就可以通过 batteryState 和 batteryLevel 获取电池信息。
优点:api简单,易于使用。
缺点:粗粒度,能够采集到的数据较少,不符合需求。
缺点:粗粒度,能够采集到的数据较少,不符合需求。
IOKit
是一个iOS 系统的私有框架,它可以被用来获取硬件和设备的详细信息,
也是与硬件和内核服务通信的底层框架。通过它可以获取设备电量信息,精确度达到1%
也是与硬件和内核服务通信的底层框架。通过它可以获取设备电量信息,精确度达到1%
优点:可以获取较多的电池相关的数据。
缺点:因为要访问私有api,不能通过苹果审核,只能在线下取值。
获取到的值是设备的电池数据,无法达到应用级别的数据获取。
缺点:因为要访问私有api,不能通过苹果审核,只能在线下取值。
获取到的值是设备的电池数据,无法达到应用级别的数据获取。
越狱
通过iOSDiagnosticsSupport 私有库,Runtime 拿到 MBSDevice 实例,
获取电量日志信息表,日志信息表中包含了 iOS 系统采集的小时级别的耗电量
获取电量日志信息表,日志信息表中包含了 iOS 系统采集的小时级别的耗电量
优点:可以获取到应用的耗电量。
缺点:获取到的耗电量是以小时为单位的,时间间隔太长,不符合需求。
缺点:获取到的耗电量是以小时为单位的,时间间隔太长,不符合需求。
最后,为了能够采集更多的电池数据,我们选择的方案是通过访问IOKit的私有api获取数据,
并且在提交到app store时将这部门代码从包里移除掉,以免影响app的审核结果。
并且在提交到app store时将这部门代码从包里移除掉,以免影响app的审核结果。
cpu
iOS的线程技术是基于Mach 线程技术实现的,在 Mach 层中thread_basic_info
结构体提供了线程的基本信息,并且每个线程中包含线程的cpu_usage。
获取当前App的占用率就是所有线程的cpu_usage之和
结构体提供了线程的基本信息,并且每个线程中包含线程的cpu_usage。
获取当前App的占用率就是所有线程的cpu_usage之和
内核提供了 task_threads API 调用获取指定 task 的线程列表,
然后通过thread_info API 调用来查询指定线程的信息
然后通过thread_info API 调用来查询指定线程的信息
内存
获取内存数据同样也可以通过mach_task_basic_info结构获取resident_size值
作为当前App已占用的内存大小
作为当前App已占用的内存大小
启动时间
通过计算启动时间和didFinishLanched的时间
核心概念 Mach Task
可以理解为是一个线程容器,提供了api来获取线程信息
web 性能测试
codereview
测试真言
看见了If,就想Else
看见malloc,就去找Free
函数调用要小心,需要看看返回值
看到for循环,就找边界值
看见return要注意,要去前面找资源
看见数组把神提,问题往往在下标
不要小看字符串,长度是个大问题
得到函数不要急,看看变量初始化,各种路径要小心
赋值函数最危险,变量没有初始化
九句句真言不孤立,相互结合显神威
真实案例
if else条件为恒真或恒假的情况
对象重复创建,资源没有释放
传参越界
数组边界越界
空指针、野指针被调用的情况
兼容测试
黑屏白屏监控原理
web
1.页面渲染绘制上屏的时候判断屏幕内绘制的元素是不是纯色(白色或其他颜色)来判定当前页面是不是白屏
2.Dom内容是否为空
检测时机是当页面加载完成,即页面顶部的进度条消失的时候
APP
像素点检测就是利用最朴素的检测思想,对一张图片的黑色、白色、异常像素进行统计进行比较
openVC 支持像素统计
0 条评论
下一页