软件测试--性能测试

性能测试的基础知识:
性能测试:使用自动化工具,模拟不同的场景,对软件各项性能指标进行测试和评估的过程

QPS:即Queries Per Second的缩写,每秒能处理查询数目。是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。每秒钟处理完请求的次数;注意这里是处理完,具体是指发出请求到服务器处理完成功返回结果。可以理解在server中有个counter,每处理一个请求加1,1秒后counter=QPS。QPS = 并发量 / 平均响应时间

TPS:即Transactions Per Second的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息作出的评估分。

RPS:即Requests Per Second的缩写,每秒能处理的请求数目。等效于QPS。

PV:page view,页面浏览量,用户每一次对网站中的每个页面访问均被记录1次。用户对同一页面的多次刷新,访问量累计。

UV:Unique visitor,独立访客,通过客户端的cookies实现。即同一页面,客户端多次点击只计算一次,访问量不累计。

IP:Internet Protocol,本意本是指网络协议,在数据统计这块指通过ip的访问量。 即同一页面,客户端使用同一个IP访问多次只计算一次,访问量不累计。

RT:响应时间,处理一次请求所需要的平均处理时间

面试题:
1、描述一下你们公司的性能测试流程?
1)分析性能需求(用户使用最频繁的场景进行测试),确定性能指标(例如:事务通过率100%,top99%是5秒,最大并发是2000,CPU和内存都是70%以下)
2)制定性能测试计划,明确测试时间、测试环境和测试工具
3)编写测试用例
4)搭建测试环境,准备测试数据、编写测试脚本
5)测试脚本优化:设置检查点,参数化,关联,集合点,事务,调整思考时间等
6)设计测试场景,运行测试脚本和监控服务器
7)分析测试结果,收集相关日志提单给开发
8)回归测试
9)编写测试报告

2、如果确定系统最大负载?
通过负载测试,不断增加用户数,随着用户数的增加,各项性能指标也会相应产生变化,当出现了拐点,如:当用户数达到某个数量级时,响应时间突然增长,那这个拐点就是系统的最大用户数

3、并发数是怎么确定的?
1)先上线一段时间,根据收集到的用户访问数据进行预估
2)根据需求来确定(使用高峰期,登录用户数,响应时间)

4、性能测试在什么环境执行?
我们一般会搭建一套独立的性能测试环境进行测试

5、性能测试什么时候执行?
功能测试之后,系统比较稳定的时候做性能测试

6、性能测试需求的来源?
1)客户提供需求
2)开发提供需求

** 7、如何实现300用户的并发?**
绝对并发:在脚本对应的请求后添加集合点
相对并发:线程组设置300线程数

8、什么情况下要做关联,关联是怎么做的?
当脚本的上下文有联系则用关联;如:登录的token关联,增删改查主键ID

9、有验证码的功能,怎么做性能测试?
1)将验证码暂时屏蔽,完成性能测试后,再恢复
2)使用万能的验证码

10、性能测试指标有哪些?分别是什么含义?
tps:每秒事务量,代表了系统的处理能力,tps越高,性能越好
响应时间:从发出请求到接受到系统响应数据所花费的时间,响应时间越短,性能越好
吞吐量:网络上行和下行流量的总和,吞吐量是网络瓶颈定位的重要指标
错误率:在压测过程中系统出现错误的比例

11、如果判断系统瓶颈?
从TPS指标分析,TPS即系统单位内处理事务的数量,观察当随着用户数的增长期系统每秒可处理的事务数是否也会增长

12、如何分析性能测试结果?
首先看事务通过率,然后分析响应时间、CPU、内存等指标是否满足需求,如果结果不可信,则分析异常原因并复测
确定性能结果可信之后,如发现以下问题,按下面思路来定位问题:
1)响应时间不达标:首先看事务所消耗的时间主要是在网络传输还是服务器,如果是网络,就需要结合网络吞吐量图,计算宽带是否存在瓶颈,如果存在就需要考虑增加宽带;如果不存在则有可能是网络不稳定导致的。如果是服务器,就要分别查看web服务器和数据库服务器的CPU、内存的使用率是否过高,因为过高的CPU,内存必定会造成响应时间过长、
2)服务器CPU指标异常:把web服务器对应上对应的用户操作日志取下来,发给开发定位
3)数据库CPU指标异常:把数据库服务器对应上对应的日期取下来,发给开发定位
4)内存泄漏:把内存的heap数据取下来,分析是那个对象消耗内存最多,然后发给开发定位
5)程序在单用户场景下运行成功,多用户运行失败,提示连不上服务器:程序可能是单线程处理机制

13、你在性能测试中遇到哪些性能问题?
响应时间过长、tps过低、内存溢出、CPU使用率过高
h5页面响应时间过长
h5的分页经常卡死,sql查询过多,数据量过大
导出excel时间过长,页面503,后台报内存溢出
功能涉及到算法的时候,一定要在测试环境用大量数据去模拟
只要点击,后台cpu立刻就是300%

14、性能测试如何防止数据污染?
生产数据备份、数据隔离、挡板

15、怎么根据线下环境评估线上环境的性能?
1)首先线下必须有专门的性能测试环境
2)线下环境单台机器配置和线上不能相差很大,可以通过单台的机器性能推 算出多台机器性能
3)如果线下机器配置差,只能测试出程序有无性能问题,这样搞线下测试处后来的数据对线上没有太大参考意义
4)如果想获取比较准确的线上性能情况,建议最好做线上的性能测试

16、出现内存泄露的根本原因是什么?你是怎么定位内存泄露原因的?
一.内存泄漏:是指在程序代码中动态申请的、堆上的内存 由于某种原因、在使用后没有被释放,进而造成内存的浪费。少部分的内存泄漏不会影响程序的正常运行,不过如果是持续的内存泄漏会耗光系统内存,最终会导致程序卡死甚至系统崩溃。如果程序在正常地使用过程中,占用的内存随着时间推移不断增长,一般就说明存在内存泄漏的情况。
例:
1.使用 malloc 申请的内存要主动调用 free,new 申请的内存要主动调用 delete,否则就会导致内存泄漏
2.使用 new 申请的数组,释放的时候要用 delete[] 删除,如果错误地使用 delete 删除,就会造成内存泄漏

原因:内存泄漏的根本原因是jvm中存在着大量存活的对象,这些对象不能被GC回收掉,从而占满了整个内存,造成jvm一直处于FGC的状态,程序没有响应,服务器报oom错误
定位问题:主要通过分析老年代中占用空间最大的类都有哪些,然后去代码中找对应的类的创建。通常可以使用jdk提供的jvisualvm和jmap进行堆内存的分析

17、tps压不上去,可能有哪些方面的原因?
1)压力机本身性能瓶颈
2)网络IO瓶颈
3)中间件(tomcat/nginx/mysql)连接数限制
4)Java线程的阻塞、等待
5)本系统资源的瓶颈(cpu、内存、磁盘、网络等)

18、性能场景怎么设计?一般都有哪些性能场景?
基本的场景包括:基准测试、单交易测试、混合测试、稳定性测试、高可用性测试、异常测试等

19、什么是集合点,什么场景下需要用集合点?
集合点是测试脚本中的一个标记,当每个虚拟用户执行到标记处时,会停留在标记处等待其他的虚拟用户,当达到预期设置的并发数时,标记处的所有用户同时启动执行后续的请求
集合点会产生瞬间高并发,但是也会降低平均压力。所以在压测过程中,如果有要求瞬间高并发的业务,就需要使用集合点,比如抢购,秒杀之类的业务

20、服务器的cpu使用率和load(负载)是什么关系?
通常情况下,cpu使用率和load值是正比关系,即cpu使用率越高,load值越高。但是在一些特殊情况下,也会出现cpu使用率不高,但是load值较高的情况,比如某系统只能使用CPU中的单核运行,它可以占用单核cpu100%,但从整体cpu使用率来看,只是使用了一小部分。而随着并发的增大,单核CPU的任务队列会越来越长,造成了load值较高

21、性能测试脚本中为什么要做参数化?
参数化把测试脚本中的请求数据动态化,避免使用单一固定参数进行压测。这也是为了更加真实的模拟用户的请求

22、性能脚本中的乱码问题怎么解决?
1)如果在脚本中不使用或不判断乱码部分的数据,那可用忽略此问题,因为乱码并不影响性能
2)如果需要使用乱码数据,可以通过压测工具提供的一些方法进行编码转换

23、在性能测试工具中,使用线程和进程压测有什么区别,Loadrunner和Jmeter分别使用什么进行发压?
1)Loadrunner同时支持进程和线程发压。当选择进程时,每个虚拟用户单独启动一个进程,当选择线程时,每50个线程启动一个进程
2)Jmeter只支持线程发压;进程和线程的主要区别为,进程之间是独享内存的,线程之间是共享内存的。使用进程压测占用的资源会大一些。在高并发下,会减少压测工具自身的异常情况

24、性能测试脚本中,定义事务的原则是什么?
在测试脚本中,事务定义的业务流程越短越好。同时脚本中不要写过多复杂的逻辑,对于一个复杂的场景,可以考虑把脚本拆解成多个简单的脚本
25,怎么进行性能场景设计?
1) 单接口测试场景
2) 混合接口测试场景
3) 高可用性场景(集群情况下)
4) 网络异常场景
5) 稳定性场景
6)其他业务相关场景

25、性能测试包含的方法有哪些(至少列举5种)?
SEI 负载测试计划过程,RBI方法,性能下降曲线分析法,Loadrunner和segue提供的性能测试方法,PTGM模型。

26、一个web系统,用户从打开浏览器输入网址页面显示在浏览器中,这个过程当中,页面给用户总的响应时间通常可以细分为哪些?
从客户端到服务端的请求时间(请求网络传输时间request),从服务端返回数据到客户端的时间(响应网络传输时间response),页面渲染时间(客户端浏览器加载页面的时间),处理器的处理时间(应用服务器+数据库服务器处理时间)。

27、软件为什么会有性能问题?
软件在高负载访问下,业务逻辑比较复杂。软件是运行在环境当中的,不同的软硬件资源都会引起性能问题,还有软件本身的代码、数据库等引起的性能问题。

28、响应时间和吞吐量直接的关系是什么?
吞吐量图显示的是虚拟用户每秒钟从服务器接收到的字节数。当和响应时间比较时,可以发现随着吞吐量的降低,响应时间也降低,同样的,吞吐量的峰值和最大响应时间差不多在同时出现。
平均响应时间越短,系统吞吐量越大;平均响应时间越长,系统吞吐量越小;

29、如何识别性能瓶颈?
找出最先出问题的点,即短板,再进行分析。
首先,要先做一份现有系统的性能测试报告,如CPU消耗、内存消耗、磁盘I/O、网卡I/O、带宽、页面交换等,如果发现其中一项或多项达到瓶颈,那么就要考虑是硬件不够导致性能上不去,还是系统实现不合理导致满了;如果是硬件问题,那么就早考虑扩容;如果是资源都没到极限或确认系统实现有问题,那么就要针对性的对系统相应功能进行相应的拆解或者是监控函数级的耗时。
比如:
随着负载不断升高,tps也是不断升高的,正常逻辑
随着负载不断增加,tps不再增加,甚至下降。表示单位线程的tps实际在衰减。tps的瓶颈点

30、 请描述压力测试和负载测试的区别?
压力测试的预期结果就是系统出现问题,我们考察的是系统处理问题的能力。
负载测试是考察软件系统在既定负载下的性能表现。
压力测试是能让我们识别系统的弱点和在极限负载下程序将如何运行

31、对于一个缺乏性能明确需求的项目,你是如何提取性能需求的?
与客户交流,查看历史日志,跟同类产品对比,根据以往的经验。

32、什么是点击率
点击率是指客户端每秒钟向服务器提交的HTTP请求数

33、性能测试准入与退出标准
性能测试开始应该是从系统设计开始准入的。
准出条件是判断测试的结果是否达到性能目标,或者说是否达到可容忍标准。

34、jmeter压力工具的工作原理是什么?
jmeter工作原理:基于协议,通过多线程的方式模拟用户行为,设计各种场景压测服务端,得到性能数据,分析性能瓶颈

猜你喜欢

转载自blog.csdn.net/m0_57028677/article/details/128649682