从事过多年性能测试,被面试过,也面试过别人。整理了一份被问得多的面试题,希望对你有用!
性能测试的项目经历
描述下在那个项目背景下进行了性能测试;
用的是什么性能工具(比如:jmeter、loadrunner);
测试的场景涉及到哪些业务(比如:登录,注册,下单等);
一般会监控哪些指标(平均响应时间,TPS,交易成功率,CPU、内存、数据库慢sql);
会产出什么文件(测试脚本、测试场景、测试报告、调优报告)
loadrunner/jmeter使用过程中,用了哪些协议?使用那些函数?
loadrunner测试过程中使用socket、webservice、http协议(需要熟悉下这些协议脚本的编写);
比如,会用lr_eval_string(),进行返回结果的判断,多用在断言;
jmeter测试过程中使用dubbo协议和http协议;
比如:__Random随机函数
__RandomDate随机日期,一般用在在参数化部分;
__javaScript函数用来做数据的格式处理
脚本开发中哪些是最基本的?
一个完整的脚本从业务开始,梳理清楚要测试的业务。用录制的方式或自己编写的方式进行开发。
过程中基本的点:参数化、关联、断言都是最基本的。
需要注意的是,参数化,最好不要使用beanshell去生成,最好还是外部引用的方式。自己写的脚本也有可能成为性能瓶颈。
jmeter压测数据库是怎么操作的?
需要对应数据库的jdbc安装,之后对数据库进行链接;
编写对应的sql操作,对数据库进行压测;(一般测试查询类的会多一点),主要关注是否是有慢sql,对数据库服务器的压力;
性能测试过程中关注那些指标?你是怎么监控这些指标?
服务器一般关注:CPU、内存使用率、FGC等情况;
中间件一般关注:redis的读写情况;具体看项目用的什么中间件。
业务方面会对接口的平均响应时间,90%响应时间,TPS,交易成功率进行监控;
数据库关注:服务器CPU、内存使用情况,是否有慢sql。
监控方式:看公司,如果小型公司,服务器一般会采用nmon或者top命令进行实时或者持续的数据监控;
运维团队完整的公司,有自己的平台,会用granfana、pinpoint等进行监控。
目前很多服务器是在阿里云部署,阿里云也支持平台监控(包括服务器资源、慢sql这种);
监控的基准是什么?怎么获取这些基准信息?
如果有运维数据,就会根据运维数据设置指标。比如:线上的下单导致服务器最高在多少,那么压测的时候可以将这个数据,作为基准。
如果没有数据支持,像平均响应时间(采用常规约定:2~5~8规则),CPU在80%以下,做为基准(80%是服务器能良好运行,也是高额负荷的一个阶段)
性能测试场景怎么设置的?根据什么指标,设置性能测试场景?
性能场景的设置:一般根据业务指标,或者线上数据配比、或者同类型系统数据得到;
设置的场景一般包括:基准测试(主要是看在最基础的情况下,单用户迭代100次的TPS响应时间,即属于冒烟测试,也是为混合场景的业务配比做基准参考)
单场景测试(目的是获取接口所能达到的最优结果)
混合场景测试(混合场景的测试业务配比可能是根据TPS来配置,也可能是根据业务上的并发线程数来配置)主要目的是为了验证在混合的业务里面,对接口是否有很大的性能影响,找到一些单场景测试不出来的性能瓶颈;
稳定性场景测试(去混合场景中最优的一组,设置24、48小时等,进行测试。主要目的是未来验证系统是否存在内存泄漏)
测试过程中会使用哪些linux命令进行问题排查?
top(CPU的监控)、free(内存的监控)、iostat(磁盘读写监控)、jstact、jstack
top命令的使用场景?怎么使用?
top命令一般用在性能测试实时观察CPU等指标的时候;
执行top命令可以看到进程、CPU、内存的使用信息;再根据ps N (N 是进程编号),查看详情;也可以通过top获取的进程,进行jstack查看进程信息
性能测试计划包括那些?
一般包括:时间、负责人、压测的数据准备、脚本准备、场景准备、方案、报告的编写(主要是时间规划)
压测的数据来源?接口来源?
数据、接口来源:一般是业务方提供,或者生产数据推理(比如:大促的时候会对接口进行整理,可以得到接口的实际调用量,得到一些接口占比。数据量和监控指标也是类似)
压测测试数据怎么造
sql插入、自己跑性能脚本或自动化脚本造数据,或者自己洗生产上的数据到测试环境。具体情况,具体分析。
测试数据包括两部分:一个是铺底数据,一个是参数化数据。
性能测试过程中的难点、痛点
前期的需求调研、后期的调优、及脚本和参数文件的管理,都是痛点;
需求的调研,影响着场景的设置(很多情况下也对方并不知道自己要什么,所以只能在有限的基础上,一直加压,获取接口顶峰数据(比如:CPU在80%,响应时间满足2、5、8定律,失败率不能高于3%))
调优是需要多方共同协作的事情,比如压测某个接口,在压测过程中,100的虚拟用户并发TPS不高,但是服务器、数据库CPU的使用率很高。此时需要对链路进行分析,查看整个调用链路,那个接口耗时长,需要足够的耐心,一步步分析,调优,再压。
压测结束,对性能测试脚本、参数文件的管理,因为会涉及到文件的复用、公用问题。最好的方式是开发一个性能测试平台,在上面进行性能的压测,脚本的存储。
稳定性测试是为了测试什么?
稳定性测试,一般采用的场景是压测的最优数据进行(比如:TPS满足的情况下,CPU在80%左右的场景),稳定性场景压测最短在24小时,主要是为观察是否有内存泄露问题的存在;
会编写性能测试报告吗?会涉及那些内容?
性能测试报告一般包括:背景、压测的目的、压测的环境、压测的拓扑图、压测涉及的数据量、压测的场景、不同场景压测的结果、压测数据总结。