性能测试
性能测试考虑的是正常的使用场景
性能测试的定义
在一定的设备基础上,检验被测软件/应用做的怎么样(比如:能否承受多少的用户量/多用户发送请求处理时,响应时间是否正常等)
1. 性能测试在什么时候测?
功能测试之后,系统比较稳定的时候再做
2. 性能测试是测系统的所有模块/功能,还是部分?性能测试测哪些模块?项目的哪些功能做过性能测试?
用户使用频繁的功能模块来做性能测试,比如:登陆,打开系统首页,搜索,提交订单。
3. 性能指标:性能测试需求达到的标准–>哪里来?
- 实施人员从客户那边得到
- 产品经理的需求文档提及到
- 开发、测试、产品等讨论得出
4. 并发用户数:同一时间内操作某些事
相对并发:同一时间内操作不同的事情。例:多用户操作同一系统的不同功能,一个登陆,一个在浏览商品
绝对并发:同一时间内操作相同的事情。例:多个用户操作同一系统的同一功能
- 绝对并发
5. 性能指标有哪些?
- 事务成功率100%(出错率3%以下)
- 系统资源占用70%以下(CPU、内存、网络、IO(磁盘读写))
- 响应时间(RT)(3s以内)
- 并发用户数、吞吐量(TPS)
- 吞吐量:单位时间内(单位:秒)处理的事务(请求)数
- 响应时间(RT:Response Time):客户端发送请求到服务器响应回客户端的时间
- 点击率(Hits):单位时间(s)内用户发送的请求数
- 集合点==绝对并发数
把先到达的虚拟用户拦截下(等待),在规定时间内等待后面的用户达到一定的用户数释放请求
- 一个接口的响应时间多少?—> 100ms以内
6. 性能测试的描述
功能测试–软件是否实现,且准确适用
性能测试–被测软件/应用做的怎么样
7. 性能测试环境在哪?
外网–>租赁的服务器(阿里云、腾讯云、华为云)
8. 性能测试场景设计;
- 基准测试:验证功能测试在用户循环多次,执行过程中能否达到性能指标
- 负载测试:验证系统的最大并发用户数。
- 压力测试:验证系统超过最大并发用户数持续运行一段时间(5-15分钟)
- 疲劳测试:验证服务器长时间(一周)处于运行状态,各项指标是否正常
- 工作基准测试过程中,要是性能指标不达标的情况下,后续的并发 将不用进行
9. 性能测试流程:(性能测试怎么做?压力测试怎么做)
首先了解客户的需求,和项目开会讨论确定性能测试需求(测试点,性能指标,测试时长),最终定版
- 熟悉性能测试需求,编写测试计划
- 搭建性能测试环境(jmeter,JDK)
- 准备测试数据(接口文档,性能测试的场景)
- 编写Jmeter性能测试脚本,并优化(参数化,断言,关联,集合点),使用插件监控服务器的cpu、内存、磁盘的io读写能力、TPS、响应时间、点击率等;
监控工具的使用:
①将jmeterPlugins-Standdard.jar–>jmeter安装目录下的lib/ext下;重启jmeter选择对应的监控插件;
②在linux上安装ServerAgent代理工具,找到ServerAgent.sh文件,并赋予执行权限,再启动就可以了- 设计性能测试场景(先基准测试,再负载测试)
- 搭建分布式压力测试环境:
当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。要解决这个问题,可以使用分布式测试,使用多台机器运行所谓的Agent来分担JMeter自身的压力,并借此来获取更大的并发用户数;- 分析性能测试结果,提交性能测试bug单,跟踪问题单直到问题被解决;
- 输出性能测试报告。
10. 性能分布式环境如何搭建
- 首先控制机和压力机的Jmeter,JDK版本要一致
- 主控制电脑(控制机)跟代理机(压力机)在同一个局域网(192.168.1.XXX)
- 如果电脑上安装了虚拟机,则主控制机跟代理机要禁用虚拟IP(虚拟网络)
- 主控制机Jmeter的bin目录下的jmeter.properties,修改里面的remote_host=本机IP,代理机IP,保存
- 启动主控制机的Jmeter的bin目录下的jmeter_server.bat(远程服务)
- 代理机的Jmeter的bin目录下的jmeter.properties,修改里面的remote_host=本机IP,保存
- 启动代理机的Jmeter的bin目录下的jmeter_server.bat(远程服务)
- jmeter脚本文件和数据结果放在同一个路径(控制机和代理机都要有)
- 重启主控制机的Jmeter,打开控制机的jmeter,运行-远程全部启动
p.s. 如果分压机启动jmeter-server.bat文件,提示:找不到系统文件,就需要修改分压机目录下的文件jmeter.properties文件,添加server.rmi.ssl.disable=true
(控制机运行代理机时,产生的压力服务器都是同一个服务器)
11. 怎样分析性能测试结果?
思路:
- 查看聚合报告和服务器的资源使用图,检查响应时间、事务成功率、CPU;
- 内存和IO使用率是否达到要求,如果出错率达到了总请求数的3%;
- 检查是什么原因导致的,修改好后,重新测试;
- 如果出现了性能瓶颈,比如响应时间,或者CPU使用率不达标;
- 从服务器上导出日志,分析是哪个地方导致响应时间过长,
- 如果分析不出来,就叫上开发一起讨论,确定问题后,就提单给开发修复,
- 修复好了就进行回归测试。
12. 性能测试脚本的错误率不高于总体的3%
错误率高于3%的原因:
- 性能测试脚本场景设计有问题(缺失思考时间,断言有问题,绝对并发过大)
- 并发用户数量过大
- 服务器未启动或者网络不通畅
- 思考时间:模拟用户在操作过程中的停顿(思考)时间
13. Jmeter如何让事务中多个请求依次发送?
勾选Generate选项,把事务控制器的所有请求当作是一个业务流程
14. 接口、性能测试中遇到有验证码的请求怎么处理?
- 通过验证码接口获取验证码关联下一个接口
- 让开发屏蔽验证码(测试环境),生产环境时恢复验证
- 让开发提供一个万能验证码
15. 性能测试环境在哪?
外网–>阿里云、华为云、腾讯云等
16. 并发用户数怎么计算?怎么得到的?
- 实施人员(项目经理)从客户那边得到
- 取在线用户或注册用户数的10%
- 通过公式计算得到:C=NL/T
N表示平均系统每天的用户访问数,L表示平均每个用户使用时长,T表示用户正常使用的时长
17. TPS上升不了的原因是?
- 并发用户数太大了
- 响应时间(网络+服务器处理)过长
18. 性能测试遇到的问题
- 响应时间不达标
- CPU使用率不达标
- 程序在单用户场景下运行成功,多用户运行则失败,提示连不上服务器。
原因:程序没有做多线程处理。- 程序实现的功能是:随机给用户分配不同的任务–>单用户运行时,能成功分配;多用户并发申请任务时,所有用户得到的任务都是一样的。
原因:程序存在线程同步的问题。- 系统并发200个用户,服务器返回 http status-code = 500
原因:数据库连接没有来得及关闭,就有用户访问上来了,导致数据库崩溃 。这个是数据库的链接这块开发没有处理好
19. 如何分析性能测试瓶颈?(性能测试遇到的问题?)
20. 项目的最佳的并发用户数是多少?
例:做2000个并发用户的时候,查询功能的响应时间超过了性能指标2秒多,原因是几个表的索引建的不合理导致的,重新建索引后,问题就解决了。我们当时做到2000并发用户后,就没在再继续增加用户量了
21. 如何实现200用户的并发?
在请求的前面添加集合点,设置并发用户数为200
22. 如何确定系统能够承载的最大用户数?
通过负载测试,不断增加用户数,随着用户数的增加,各项性能指标也会相应产生变化,当出现了性能拐点,比如,当用户数达到某个数量级时,响应时间突然增长,那么这个拐点处对应的用户数就是系统能承载的最大用户数。
23. 吞吐量和并发用户数的关系是怎样的?
一个项目的吞吐量是有个极限的,就像一条马路,假设最多能同时通行5辆车,那么这条马路的最大吞吐量就是5辆车;当并发用户数没达到吞吐量的极限时,随着并发用户数增加,吞吐量就是增加;达到吞吐量的极限后,吞吐量会保持平稳
24. 如何监控服务器资源
首先在Jmeter安装资源监控插件,比如:服务器资源的监控插件(CPU/内存/IO等)、事务通过率的监控插件、点击率、响应时间的监控插件等。然后在Linux服务器上安装ServerAgent代理工具,对工具进行解压、赋权,最后开启代理服务,运行Jmeter脚本,就可以通过Jmeter插件监控到服务器的资源了
25. 如何判断系统的性能是变好了还是变坏了
做回归测试时,看系统的TPS是不是增加了。
26. 估算TPS
-
QPS(TPS)= 并发数(事务数)/平均响应时间
-
在性能测试中通常使用
二八原则
来量化业务需求。-
二八原则:指80%的业务量在20%的时间里完成。
业务量一般要取系统业务高峰的值,才能代表系统的实际处理能力。例:系统在10点的访问高峰PV约5208,那么这个时段的TPS=5208/3600≈1.45吗?
答案是否定的,因为在一小时内的吞吐量未必是平均的。
如果采集到的业务量数据能够细分到每分钟,TPS就越准确。如果不能,可以按照
二八原则
。即80%的业务在20%的时间内完成
,TPS=(520880%)/(360020%)≈5.8。
-
27. Jmeter如何防止内存溢出(OOM:out of memory)
- Jmeter安装目录下的bin目录下找到jmeter.bat,右键–>编辑
- 搜索 set HEAP,把内存设置大点(Xms最小,Max最大)
28. 性能测试脚本上午运行没问题,下午运行时报错且脚本没有修改过以及开发没有改动过代码,请问如何排除?
解决:
- 检查网络是否通畅
- 检查服务器是否启动
- 检查服务器CPU、内存等是否过高
- 项目版本是否被调包了
- 测试环境地址是否正确
29. jmeter分压无法返回响应数据
启用jmeter.properties文件的mode_Standard
30. Jmeter运行方式
有界面运行jmeter–>GUI(可视化界面)模式
- jmeter分压的执行时通过命令行(cmd窗口)去执行的
①先通过远程访问到192.168.1.193服务器上–连接成功
②调用DOS窗口(cmd命令窗口),在后台程序运行jmeter -n -t xxx.jmx -R 192.168.1.193… (线程数是通过xxx.jmx脚本来决定)
③运行完成后,把结果通过网络返回给控制机- jmeter是在Windows有没在linux运行过?–CLI模式(命令)
jmeter -n -t xxx.jmx -l 日志文件
jmeter -n -t jmx文件 -l [结果文件.jtl ] -R 127.0.0.1,192.168.1.192 -e -o [输出文件夹路径]
-l 结果文件.jtl------可不填(产生结果直接在控制台输出)
-R 远程ip地址-----可不填(不需要用到分压时)
-e -o 输出文件夹路径—输出HTML报告(文件夹目录一定要为空)-----可不填(不生成HTML报告)
31. 性能测试做的是前台还是后台?
- BS的项目:主要做的是后台服务器的性能,浏览器端不做性能测试;
- APP的项目:手机端和服务器端的性能
手机端:用monkey来做;
服务器端:用Jmeter来做的
为什么用linux:
- 提取日志,定位问题
- 独立搭建测试环境
- 性能测试监控系统资源