性能测试问题
什么是性能测试?为什么要进行性能测试?
性能测试是基于系统功能已经完备或者已经趋于完备之上的
在功能还不够完备的情况下没有多大的意义。因为后期功能完善上会对系统的性能有影响
过早进入性能测试会出现测试结果不准确、浪费测试资源
因此,性能测试首先是基于功能测试的,必须了解其功能需求才能开展性能测试
性能测试的类型有哪些?
列举下用户会面对的性能问题和性能瓶颈?
- 数据库的瓶颈一般在磁盘IOPS过高造成进程阻塞
- 系统进程数过多一般会消耗系统的内存空间
- 消息队列和缓存服务,开启持久化后会需要考察磁盘IOPS,不开启持久化则需要考察内存占用
- 频繁的管道开辟和销毁会导致CPU占用较高
- 有部分程序结构上不能利用多个CPU
考虑每个业务点或者结构点会不会有大量的数据访问,会不会产生压力,我们的设计会不会产生性能瓶颈
列举下性能测试中常涉及的性能计数?
性能测试中并发用户点击量是什么?如何实现?
性能测试进入和结束的标准是什么?
说一下在选择性能测试工具之前需要考虑哪些东西?
在性能测试中,如何识别性能瓶颈?
在对应用程序进行性能测试期间一般会执行哪些活动?
解释下什么是耐力测试和尖峰测试?
性能测试关注的指标是什么?
- 从外部看,性能测试主要关注:
- 吞吐量:每秒钟系统能够处理的请求数、任务数
- 响应时间:服务处理一个请求或一个任务的耗时
- 错误率:一批请求中结果出错的请求所占比例
- 从服务器的角度看,性能测试主要关注
- CPU
- 内存
- 服务器负载
- 网络
- 磁盘IO等
性能测试怎么做的?/ 如果你要进行性能测试,你是如何展开操作的?
- 确定关键业务,关键路径
- 确定测试的关键数据比如
并发量,响应时间,循环次数
等 - 准备测试环境,完成脚本录制或脚本开发
- 执行测试,观察或监控输出参数,比如吞吐量,响应时间,资源占有率等
- 对执行结果进行分析,分析性能问题
怎样分析性能测试结果?
- 查看聚合报告和服务器的资源使用图,检查响应时间,事务成功率,CPU,内存和IO使用率是否达到要求,如果出错率达到了总请求的3%,我们会检查是什么原因导致的,修改好后,重新测试
- 如果出现了性能瓶颈,比如响应时间,或者CPU使用率不达标,我们会从服务器上导出日志,分析是哪个地方导致响应时间过长,如果分析不出来,就叫上开发一起讨论,确定问题后,就提单给代发修复,修复好了就进行回归测试
如何判断网络是否存在瓶颈?
查看在整个性能测试过程中,网络的吞吐量是多少,如果网络的吞吐量占到了服务器的70%以上,我们就认为网络存在瓶颈,通常会增加带宽或者压缩传输数据
如何判断响应时间不达标?
根据性能测试结果先检查看下是否是服务器带宽存在问题,如果带宽存在瓶颈,则会考虑增加带宽或者压缩传输数据,如果带宽没有问题的话,我们会从服务器上导出日志,开发一起讨论分析是哪个地方导致响应时间过长,确定问题后,就提单给开发修复,修复好了就进行回归测试
如何判断CPU使用率不达标?
CPU使用率不达标,我们会从服务器上导出日志,分析是哪个地方导致CPU使用率不达标,如果分析不出来,就叫上开发一起讨论,确定问题后,就提单给开发修复,修复好了就进行回归测试
app的性能测试怎么做的?
APP的性能测试分为服务器端的性能和手机端的性能
服务器端的性能:jmeter工具进行测试的,和web端性能测试的方法一样的
手机端APP的稳定测试:使用monkey做
用monkey做app测试,怎么做的?如果有问题的话怎么定位?
- 先使用
adb logcat -c
清空手机的logcat日志 - 接下来使用
adb logcat -v time
获取logcat
日志,并导入本地文件使用monkey
运行被测应用adb shell monkey -p
包名-v
100000
并将执行结果导入到本地测试- 如果中途失败了就要去看monkey日志中有没有
crash
或者anr
的关键字 - 如果还需要定位到是什么原因导致的anr或者crash的问题,将相关日志和logcat日志与进程号提交给开发定位
- 如果是anr的问题,还需要从安卓中获取
/data/anr/traces.txt
文件提交给开发定位
app出现ANR的原因?
线程阻塞,内存不足,CPU满负荷(现在手机基本都是8核CPU,基本不会出现CPU满负荷的情况)
app出现CRASH的原因?
空指针值,数组越界,内存不足,CPU满负荷(现在手机基本都是8核CPU,基本不会出现CPU满负荷的情况)
APP常见崩溃原因?
- 设备碎片化:由于设备极具多样性,App在不同的设备上可能有不同表现形式
- 宽带限制:宽带不佳的网络对App所需的快速响应时间不够
- 网络的变化:不同网络的切换可能会影响App的稳定性
- 内存管理:可能内存过低,或者是授权的内存位置的使用可能会导致App失败
- 用户过多:连续数量过多可能会导致App崩溃
- 代码错误:没有经过测试的新功能,可能会导致App在生产环境中失败
- 第三方服务:广告或弹出屏幕可能会导致App崩溃
说几个常用的adb指令?
adb install(apk的文件路径)
安装软件到手机或者模拟器adb uninstall(包名)
卸载手机或模拟器上的某款软件adb devices
查看与当前电脑连接的移动设备adb ,adb start-server
启动adb,adb kill-server
杀死adb logcat
查看日志adb logcat -v time process >
软件覆盖安装的adb命令?
adb install -r xx.apk
覆盖低版本的adb install -r -d
覆盖高版本的
性能测试的adb命令?
adb shell dumpsys cpuinfo
查看手机cpu的使用情况adb shell getprop|findstr dalvik
手机系统自己运行的内存使用
说几个monkey指令?
Adb shell monkey -p
包名Adb-shell–ignore-crashes
忽略崩溃Adb-shell–ignore-timeouts
忽略延时Adb-shell–ignore-throttle
延时毫秒值Adb-shell–pct-touch–pct-motion
触摸与滑动事件的比例
弱网情况下你是如何测试的?
- 2G的网速
150kbps
,折合下载速度15-20k/s
- 3G的网速
1-6mbps
,折合下载速度120k/s-600k/s
- 4G的网速
10-100mbps
,折合下载速度1.5m/s-10m/s
- 使用真实的SIM卡,运营商网络来进行测试
- 通过代理的方式模拟弱网环境下进行测试(Charles延迟)
- 链接模拟弱网的热点进行测试(如360WiFi助手可以设置)