性能测试——需求内容、日志内容、 告内容

与功能测试需求分析一样,性能测试同样需要针对被测对象进行需求分析细化。

这就需要性能测试工程师结合用户需求及性能测试活动本身需求进行显性与隐性性能测试需求的分解与提取。

在性能测试工作实施过程中,需从不同的用户层面分析待测需求。

性能测试工程师主要从以下两个用户方确定性能测试需求:

需求内容

业务用户

1. 用户频繁使用,且存在大量用户使用的业务流程;

2. 交易占比较高,日常占比在80%以上甚至更高的业务流程;

3. 特殊交易日或峰值交易占比80%以上甚至更高的业务流程;

4. 性能较差且有过调整的业务流程;

5. 特殊业务场景;

6. 核心业务发生重大流程调整的业务流程。

以上是从业务用户层面,考虑的可能需要进行性能测试地点。

实际实施过程中,如果可能,可向终端用户调研。比如,项目团队

1. 对架构设计的业务比较了解;

2. 逻辑复杂,关键的是业务;

3. 可能消耗大量资源的业务;

4. 与外部系统存在接口调用,且有大量数据交互的业务;

5. 调用第三方业务组件,逻辑复杂的业务。

以上从项目开发角度考虑可能需要进行性能测试业务流程,性能测试工程师需对被测对象深入了解,并且需要研发团队配合。

除上述两种用户,

还可能包括运营团队,调研未来业务发展规划,系统需满足未来业务需求的可能性

日志内容

跑稳定性之前要检查的环境

1、压力机磁盘空间(因为跑稳定性过程中生成的result文件的数据不断增加,如果压力机磁盘空间不够就会导致压力停止)

2、清空服务器日志,日志改成error模式,检查服务器空间大小。定时任务需要定时删除日志

3、查看数据库表空间是否足够

4、清空gc日志(方便观察稳定性的 gc情况)

5、如果执行过程中会生成数据并且数据保存在磁盘上,则需要考虑写个定时任务定时删除数据(如果这些数据可删除的情况下)

6、稳定性测试目的:HPJmeter分析日志是否能正常回收,能的话说明不存在内存溢出问题。gc时间百分比和fullgc时间百分比不超过5%则是正常的

批处理

1、了解生产环境上的数据是怎么分布的,才能在测试环境更好的模拟

2、从数据库上验证结果,哪些表的哪些字段改变了,数据增加了还是减少了多少,这个值与预期的是否一致,用sql记录跑批前后的数据量,验证数据的流向是否符合业务逻辑

3、批处理的处理流程,数据先到哪个表,再到哪个表,表的数据要依赖哪个表

4、例如存储加工:也就是 表跑数, 表跑数需要原系统表里有数据才能跑 表跑数, 表卸数的话是要 表结果表里有数据才能卸数

5、数据不够怎么造数

6、批处理测试关注批处理时间、批处理效率、批处理总量

波动

1、稳定性运行过程中tps掉了一个坑,15分钟后恢复正常。检查波动那个时间段后台是否有在做批处理。如果是,这波动是正常的(批处理导致cpu增大,tps减少)

脚本 错

1、压力执行过程中刚开始没 错,后来持续 错

2、检查日志是否满了或者表空间满了

3、是否是数据太多,返回结果太多造成的

稳定性过程中有支交易的响应时间越跑越高

1、检查该交易的最高响应时间是否超时,如果超时则要优化,如果不超时,可否优化

2、单跑该交易,观察响应时间是否越跑越高

3、检查该交易是要处理数据还是查询数据,依赖哪些表,是不是依赖地表的数据增加才导致该交易响应时间增加的

4、重测场景,去掉会增加数据的交易,看该交易响应时间是否增加

5、如果能优化最好,如果不能优化,应该在测试 告中说明

6、通过分析得出该交易响应时间的增长是因为其他表的数据增长造成的,生产上每天凌晨都会清理一定的数据,所以该交易的响应时间增长不会造成生产超时的存在

脚本调试

1、根据脚本模板替换 文,到日志中去查找对应的 文

2、编译脚本看是否存在语法错误,如果有,检查语法和 文的格式

3、运行脚本看是否存在错误,如果有,查看应用服务器日志,具体是什么原因 的错日志都有显示

4、常见的错误是数据库里没有数据,这时需要根据错误提示去数据库修改数据(耗费的时间也是最多的)

5、保证要测试交易数据库表里的数据足够(数据跟生产环境一致)

6、检查哪些字段需要参数化,找到该字段对应的表,从数据库里查询需要参数化的数据(耗费的时间也很多,你需要知道字段对应的表和数据的流向才能正确的拼凑出对应的sql语句,表的关联很多)

负载测试超时

1、从最简单的地方开始分析:检查压力机、应用服务器、数据库服务器是否存在硬件瓶颈,是否存在 络瓶颈

2、检查该交易对应的表的数据是否过多,超时大部分是数据库原因造成的

3、重压超时的交易,启动awr监控(数据库)

4、分析awr 告,查看哪些表没有索引、全表扫描等。如果有索引,查看是否有的数据没走索引

5、如果走索引,检查该交易是否查询的字段太多(比如:业务要求一次性处理365条数据,操作比较大)

6、参数化数据太少了,数据库有行锁导致响应时间超时,加上足够的参数化数据即可

7、参数化数据太少了,引起对数据库表的使用,造成死锁,所以 超时错误,加上足够的参数化数据即可

8、数据库表锁、行锁、锁等待、死锁都会造成超时(数据库的用对应的sql查询是否有这些问题存在)

1、稳定性测试过程中,发现整体交易处理能力随着时间的推移呈逐步下降趋势。经过对测试结果中各交易进行排查,确定导致tps下降的交易只有一只,该交易在测试模型中占比达到45%,当该交易响应时间逐步增长后,其交易能力呈反比下降,最终导致整体处理能力下降

2、分析服务器日志,统计该交易在服务器端的时间基本都是稳定状态,并且没有发现堆内存溢出情况,由此可排除程序问题

3、使用jconsole进程监控,发现进程在运行过程中存在频繁加载、卸载类的情况

4、正常情况下Java进程是不应该频繁加载和卸载类的。由于测试脚本调用引用的Java框架使用了大量的类,当Java内存中的永久保持区过小时,就会导致经常被引用的类频繁加载和卸载。由于堆内存过小,频繁new对象时容易产生大量内存碎片,从而导致new对象时效率逐步降低

5、解决方法:扩大-XX:MaxPermSize值

6、重新执行测试,整个测试过程中该交易运行平稳,未出现响应时间增长,处理能力下降的情况

PS:堆内存大小到低需要配置多少并没有一个固定标准,并不一定越大越好,需要根据被测交易特性,并发数量以及压力机配置等进行不断测试分析后再进行相应的合理划分

Java占用内存分析

很多人误认为-Xmx和-Xms参数指定的大小就是程序占用的内存,实际只是Java堆对象将会占用的内存。堆只是影响Java程序占用内存大小的一个因素。要更好的理解你的Java程序会占用多大的内存需要先了解以下因素:

对象(objects)

类(classes)

线程(threads)

本地数据接口(native data structures)

本地代码(native code)

这些因素对内存的影响又会随着城乡、环境和平台的变化而变化。想要精确地计算总的内存大小并不是那么容易的,因为你只能控制堆大小(-Xmx)、类占用的内存(-XX:MaxPermSize)、线程栈(-Xss控制每个线程占用的内存),但如果栈太小时会导致栈溢出。所以计算公式为:(-Xmx)+(-XX:MaxPermSize)+线程数*(-Xss)+其他内存

其他内存取决于本地代码占用内存,它大约占JVM内存的5%左右

线程池占满

1、监控tomcat中间件是为了监控线程池的使用情况,如果tomcat里还配置了数据库连接池也要监控数据库连接池的使用情况。假如配置了300个线程池,那么如果监控到这300个线程池都属于繁忙状态,那说明线程池不够用了,后面的请求都属于排队状态,排队需要等待,会导致响应时间增长。但如果配置的线程池太大,则会浪费资源。所以需要减少不必要的线程池的浪费

3、访问
http://localhost:8080/manager/status进行监控

4、acceptCount=”300″,指的是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了就直接refuse connection

场景1:接受一个请求,此时tomcat启动的线程数还没有达到maxThreads,tomcat会启动一个线程来处理该请求

场景2:接受一个请求,此时tomcat启动的线程数已经达到了maxThreads,tomcat把该请求放入队列,等待空闲了再来处理

场景3:接受一个请求,此时tomcat启动的线程数已经达到了maxThreads,且acceptCount也达到了最大,此时tomcat会拒绝此次请求,返回refuse connection错误

5、调整tomcat最大连接数,可以增加maxThreads和acceptCount,并且使acceptCount大于等于maxThreads

6、maxTreads的值应该根据流量的大小,如果值过低,将没有足够的线程来处理所有的请求,请求将进入等待状态,只有当一个处理线程释放后才被处理;如果设置的太大,tomcat的启动将花费更多的时间。所以该值需要实际测试分析得出,可通过前面讲的managerstatus监控页面得到。切记不能一味的扩大该值,瓶颈无法突破时,可以使用tomcat集群来提升性能

系统负载总是很高

1、系统运行一段时间后发现服务器的负载总是很高,而且后台出现错误日志。临时解决方案:重启机器,但是过了一段时间之后发现负载还是很高

2、不压测时看系统负载高不高,如果还高那就是系统本身有压力,看是什么导致负载高

LoadRunner响应时间和用户体验时间不一致

1、测试过程中发现loadrunner测试响应时间和客户端实际的用户体验时间不一致的现象,客户体验时间远远超过loadrunner测试的响应时间

2、分析:用户通过浏览器访问web服务器时,时间包括用户感应时间、浏览器处理时间、 络传输延时和后台服务处理时间。而loadrunner测试响应时间不包括浏览器的JS文件解析执行、渲染、以及人眼识别时间,只包括 络延时和后台服务处理时间。因为loadrunner主要是用来测试后台服务器性能的

3、一般情况下loadrunner测试响应时间都会小于用户实际体验时间

如果测试目的要求获取用户体验时间,则需要在loadrunner测试时间的基础上,考虑添加误差因子

如果用户实际体验时间远大于loadrunner测试响应时间,则需要重点分析排查JS解析执行、渲染、布局等问题

如果loadrunner测试响应时间较长,则分析是什么原因导致超时

告内容

性能测试 告,至少应该包含如下内容:

(1)测试基本信息:包含测试目的、 告目标读者、术语定义、参考资料。

(2)测试环境描述:包含服务器软/硬件环境、 络环境、测试工具、测试人员

(3)性能测试案例执行分析:需要详细描述每个测试案例的执行情况,以及对应的测试结果分析。

(4)测试结果综合分析及建议:对本次性能测试做综合分析,并给出测试结论和改进建议。

(5)测试经验总结。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月22日
下一篇 2022年4月22日

相关推荐