jmeter性能测试⾯试题⼆【多测师_王sir】1.什么是性能测试?
测试系统有没有性能问题
考虑时间空间
服务端资源是否⾜够?
响应时间是否超时?
系统是否⾜够稳定?
2.性能测试的核⼼原则是什么?
基于协议,多线程,场景设计
协议:所有的请求都是基于协议发出去 http,https,udp,tcp,mqtt
多线程:压⼒测试是基于java多线程原理,通过线程去模拟⽤户的⾏为
基于场景:控制器+定时器设计各种场景满⾜压测要求
并发场景
负载场景
稳定性
压⼒测试
。。。。。。
jmeter⼯作原理:基于协议,通过多线程的⽅式模拟⽤户⾏为,设计各种场景压测服务端,得到性能数据,分析性能瓶颈
3.性能测试的应⽤领域有哪些?
能⼒验证:⼄⽅向甲⽅交付项⽬时,声明项⽬的性能数据。
例如:向甲⽅声明能⽀撑500⼈1s内同时登录,响应时间在2s以内。出具性能测试报告去证明我声明的能⼒。
瓶颈分析:在能⼒验证的过程中可能会发现⼀些瓶颈,通过技术⼿段分析瓶颈,得到分析数据,为后
续调优做理论依据。
响应超时:什么负载量的时候出现超时现象?
tps达到瓶颈,波动剧烈:tps瓶颈点在哪⾥?,在什么地⽅出现性能衰减?
性能调优:在得到瓶颈分析数据之后,做性能调优。
降低超时,提⾼tps,减少抖动。。
容量规划:基于未来。为将来的⽤户激增提前做准备
数据库扩容
多愁善感的你
服务端硬件优化(增加cpu,扩充磁盘,提升带宽,分布式,负载均衡。。。)
4.压⼒⼯具的⼯作原理是什么?
jmeter⼯作原理:基于协议,通过多线程的⽅式模拟⽤户⾏为,设计各种场景压测服务端,得到性能数据,分析性能瓶颈
5.性能测试基本思路是什么?
测什么:明确测试⽬标(明确需求)
怎么测:怎么设计场景?
测试计划,测试⽤例,测试⽅案
数据准备
参数化,表达式,断⾔
场景设计(并发,负载,压测)
得到性能测试结果
测试结果验证
验证结果数据是否符合预期
如果预期响应时间是3s,但是实际结果响应时间达到了5s 不合格
预期最⼤tps需要达到500,但是实际最⼤的tps只有300 不合格
6.交付⼀个性能测试项⽬,请阐述你的性能测试流程
1:明确测试需求
2:基于需求设计测试⽤例,测试⽅案,测试计划
3:准备测试数据,测试账号(预估并发量),设计测试脚本(参数化,表达式,断⾔,控制器)
4:运⾏测试脚本,数据监听(响应时间,tps,活动线程),结果分析(判断性能瓶颈)
5:基本性能瓶颈做调优(tomcat线程池,jvm内存,swap内存,带宽)
6:调优之后做性能回归,和前期结果做对⽐,是否有明显的优化。
7:代码问题优化(⾃⼰定位或者交给开发定位)
8:性能测试报告。整理性能测试数据(包括调优之前和调优之后)
9:构建持久化的性能监听平台,监听线上的服务性能
性能测试贯穿项⽬始终,从需求分析到上线之后,都需要持续跟踪分析发现问题,响应解决问题
7.测试哪些关键场景?
浏览器层⾯:
web端和app端(H5页⾯)
关注⾸屏时间(页⾯打开到完全呈现)
脚本加载时间,cpu占⽤,fps频率(帧频率越⾼,流畅度越⾼)
接⼝层⾯
权限划分
普通⽤户权限(⾮常多的的⽤户)
⼤并发场景:包括查询,表单提交
数据量也需要考虑(电商平台,门户⽹站)
负载场景:⽤户长期在线访问,对资源的要求会很⾼
拔剑神曲
管理员权限(⼏个⽤户)
⼤数据量的场景(管理⼏⼗万⽤户数据)
列表查询时间,分页时间
数据下载(excel,数据导出)是否会内存溢出
mysql数据库是否会死锁,sql查询是否异常
超管(1个)
⼤数据量的场景(管理⼏⼗万⽤户数据)
8.前端性能测试关注哪些点?了解哪些前端性能优化⽅法?
⾸屏时间:页⾯完全展现需要的时间
⽩屏时间:页⾯第⼀帧画⾯出现之前的时间
脚本加载时间,fps,cpu,network
前端性能优化:使⽤缓存,压缩图⽚,压缩js,css,gc回收优化,js前置
9.解释常⽤的性能指标的名称与具体含义
⽤户⾓度
响应时间(rt)从发起请求,到接⼝响应,到页⾯渲染
错误率(error)
服务端⾓度
rps(request persecond)每秒请求数,⽤户发起的
tps(transaction persecond)每秒完成事物数,服务端决定的
通过rps指标,来测试tps,从⽽衡量服务端性能。
浏览器层⾯
qps(query perecond)每秒查询接⼝数(uv pv)
刷新⼀次页⾯,调⽤了三个接⼝
hps(hit persecond)每秒点击率
10.性能测试类型有哪些?按顺序描述
并发数先确定
基准测试(得到性能数据,为后续的回归测试做理论依据)
单接⼝基准测试
容量基准测试
负载测试
不断增加负载量(压⼒),⼀直到瓶颈点出现,可以停⽌
压⼒测试
1:稳定性压测
假设瓶颈点在300tps,⽤对应的负载量的80%-90%做持续性(⼏⼩时或者⼏天)的压测。⽬的是发现稳定性问题(内存溢出等等)        2:破坏性压测
⽤对应负载量的100%或者150%做压测,直接让服务器出现异常。⽬的是及早的暴露问题
失效恢复测试
服务端出现异常之后能不能及时恢复
11.什么是集合点?设置集合点有什么意义?jmeter中如何设置集合点?
集合点更多的运⽤在并发测试
为了让压⼒尽可能的落在同⼀个时间点
12.什么是固定等待和隐式等待?
固定等待:超时时间=0
线程数⼀定要>=集合数。⼀定要集合完毕才发起请求
隐式等待:超时时间>0
达到超时时间范围,⽆论集合多少线程都会发起请求
13.什么是负载?有哪些负载模式?
负载就是压⼒
1:⽤户模式。不断增加的⽤户数带来的压⼒
1个⽤户1s内发起20个请求,rps=20/s
2:请求模式,不断增加的请求数带来的压⼒
10个⽤户,1s⽤户1s内发起1个请求,rps=10/s
不能单纯的通⽤⽤户去衡量压⼒,直接通过每秒请求数去衡量压⼒。直接从服务端考虑
14.你在测试中遇到过哪些性能问题?
h5页⾯响应时间过长
h5的分页经常卡死,sql查询过多,数据量过⼤
导出excel时间过长,页⾯503,后台报内存溢出
功能涉及到算法的时候,⼀定要在测试环境⽤⼤量数据去模拟
123456789
23456789
3456789
点击按钮,任意两个数字之和等于5,就展⽰出来
只要点击,后台cpu⽴刻就是300%
15.你在性能场景设计中⽤到哪些⽅法?
参数化,关联,断⾔,jdbc连接
16.什么是关联,如何动态关联?有哪⼏种关联的⽅法?
正则关联,json关联,xpath关联
保证接⼝上下游是衔接的
17.jmeter负载测试中怎么保持session会话?
${__setProperty(cookie${counter},${COOKIE_beegosessionID},)} 存储session花名未闻主题曲
${__P(cookie,)} 从属性表提取session
18.什么是Ramp up?你如何设置?
线程启动的时间
ramp越⼤,单位时间内的压⼒越⼩。ramp=0表⽰单位时间压⼒⽆穷⼤,线程启动时间⽆穷⼩。ramp=0不代表时间为0 19.如何识别性能瓶颈?
1:随着负载不断升⾼,tps也是不断升⾼的,正常逻辑
2:随着负载不断增加,tps不再增加,甚⾄下降。表⽰单位线程的tps实际在衰减。tps的瓶颈点
20.⾮gui下如何参数化运⾏场景?
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
21.简述堆区的空间分配和gc原理
年轻代
1个eden
2个存活区(S1和S2)
⽼年代
GC(垃圾回收)
内存溢出:OOM(OUT OF memory)
1:运⾏内存>当前空间剩余内存
2:垃圾不能及时回收
年轻代GC:
1:最初的对象是存活在eden;伊甸园空间满了之后,会进⾏第⼀次GC;
2:第⼀次GC之后,依然存活的对象,会被丢到S1(第⼀个存活区);
3:S1初次满了之后,会进⾏第⼆次GC(年轻代GC)
4:第⼆次GC之后,依然存活的对象,会被丢到S2(第⼆个存活区),同时清空伊甸园和S1;
5:S2满了之后,会进⾏第三次GC,依然存活的对象,会再次被丢到S1,同时清空伊甸园和S2;
年轻代⾥⾯的垃圾碎⽚都是⽐较⼩;⽼年代的碎⽚⽐较⼤;
让垃圾尽可能的在年轻代⾥⾯进⾏回收;否则会影响⽼年代空间的整理;
⽼年代GC:
1:年轻代的GC年龄超出阈值(默认16次),会把年轻代依然存活的对象扔到⽼年代;
2:对象的尺⼨超出了阈值;对象尺⼨超出了阈值,会直接进⼊⽼年代;
3:对象的⼤⼩超出了年轻代剩余的空间⼤⼩,直接进⼊⽼年代;
⽼年代GC=fullGC(⼀般默认)
1:⽼年代剩余空间不⾜以对象进⼊;⽼年代会直接进⾏⼀次fullGC;
2:⽼年代的对象⽆法进⾏GC;⽼年代会进⾏⼀次fullGC;
⽼年代的对象尺⼨都⽐较⼤,所以gc时间会很长,同时所有线程会出现暂停;
jvm调优是为了规避fullgc的频繁出现;会影响到tps;
jstat -gcutil pid 1000 监听gc情况
jmap -heap pid 查看内存空间分配情况
jvm参数调优
调堆内存空间,调年轻代的gc年轻,调空间分配⽐例(⽼年代:年轻代 / eden:存活区);调gc回收器,并⾏回收机制22.什么是内存溢出
1:运⾏需要的内存⼤于空间剩余内存;会出现内存溢出
2:垃圾⽆法进⾏GC;会出现内存溢出
23.简述cpu的⼯作原理
分析cpu参数:lscpu
CPU(s):                2 cpu个数
Thread(s) per core:    1 每核的线程
Core(s) per socket:    1 每个卡槽的核
Socket(s):            2 每个cpu的卡槽
双cpu,4核多线程;每个cpu是双核;
cpu负载和利⽤率
可运⾏的进程(双r)+不可中断的进程(block)
running(运⾏中的)+runnable(等待运⾏的)+block(等待io)=cpu的负载
利⽤率:cpu双线程如果都在调度java进程,表⽰当前cpu利⽤率是100%;
cpu双线程如果只有⼀个java进程在调度,表⽰当前cpu利⽤率是50%;
最理想的情况:每个cpu线程都调度⼀个java进程,此时的负载=4;
不理想的情况:java进程数远⼤于cpu线程数,此时负载会远远超出cpu线程数;不能及时调度的进程就会排队;
cpu会给运⾏中的和等待运⾏的进程数均匀分配时间⽚;
cpu调度是以时间⽚为基准的;假设调度时间为1ns,调度超出1ns之后,进程会被挂起;切换到下⼀个进程
白桦林 朴树队列越长,cpu时间⽚就越⼩,调度时间就会越短,切换的越快;切换的过于频繁,cpu利⽤率就会很低,线程也会暂停进程是最⼩资源分配单元;
线程最⼩调度单元;
24.什么是上下⽂切换?哪些场景会存在上下⽂切换?
1:线程的切换
切换的时间加载寄存器和计数器
保存数据和位置信息,然后切换到下⼀个线程并读取它的数据和位置信息
2:进程切换
3:特权切换
系统调⽤(切换两次上下⽂)
⽤户空间向内核空间发起申请,内核空间返回api给⽤户空间调⽤;26.什么是swap空间?oomkiller了解吗?怎么开启swap空间
swap:从磁盘空间开辟的虚拟⽤户空间。
cat /proc/sys/vm/swappiness 查看swap⽐例
当内存空间使⽤超出了⽐例,会启⽤swap空间(内存交换)六月天空
so 换出
si 换⼊
swapon -a 启⽤swap
sudo sysctl vm.swappiness=10  临时修改swappiness⽐例
vim /f  永久修改swappiness⽐例
27.什么是进程优先级?
pr和ni
ni范围 -19---+20,ni值越⼩,进程优先级越⼤;ni越⼤,进程优先级越⼩;优先级越⾼的进程,优先调度cpu,时间⽚分配的越多;
28.吞吐量⼤幅度波动有哪些原因?
上下⽂切换的过快;
gc次数过于频繁;
29.哪些现象说明了IO瓶颈?
await=io等待时间=io处理时间+io队列时间
svctm=io处理时间
await与svctm的差值越⼤,表⽰队列时间越长
util磁盘繁忙度,值越⼤,磁盘越繁忙;
30.了解哪些资源监控命令?
top家族
top,htop,atop,iftop(查看⽹络),iotop(查看io)
sysstat家族
vmstat vmstat 1 10
mpstat mpstat -P ALL 1 10 查看逻辑cpu
iostat iostat -x -k -d 1 10 查看io处理
gone with the sinnetstat 查看⽹络情况
pidstat 查看进程
31.如何⽤命令⾏⽣成测试报告?
jmter -J{参数名} -r{host} -n -t XX.jmx -l XX.jtl -e -o httpreport
简历:
1:断句,⾔简意赅,让⾯试官能⼀眼到关键词
2:突出主题
3:突出能⼒
4:⼯作经验突出价值。从字⾥⾏间看出⼀个⼈在团队中从事的⾓⾊和价值最low的词汇:参与,做了,完成。。。
正确的词汇:负责XXX,带领XXX,参与核⼼功能的XXX测试
5:项⽬经验要由远及近,由低到⾼;看出⼀个⼈的经历和成长
6:细节问题:标点,错别字,字体调整,简历格式
7:技能⼀定要在项⽬经验⾥⾯体现,关联