03_压测问题总结

2018-11-14  本文已影响0人  王康健_0124

在做压测中遇到格式各样的问题,因此总结一下,以备以后可以避免!

1. 压单接口,须要token怎么办?

我们在做接口压测的时候有时候需要token,token呢又是需要登录才能产生,如果我把登录接口也写压测脚本中,在压测时也会大量的请求登录接口,很占用系统资源!

① 在线程组中设置一个"仅一次控制器",把获取token的接口放到“仅一次控制器”中,然后在获取token的接口后面添加一个“后置处理器-JSON Extractor”,提取获得的token给下个接口用!


② 在线程组中设置一个“循环控制器”,把需要压测的接口放到“循环控制器”中,设置循环次数,每个线程都只会执行一次登录,然后会按照“循环控制器”中设置的循环次数去执行!

2. 压单接口,每个接口发送都须要一个相对应的token,登录接口又只支持很小的并发,如果关联起来,登录脚本报错压测的接口也报错怎么办?

解决方法:使用jmeter后置处理器中的JSON Extractor和BeanShell PostProcessor
JSON Extractor:提取json报文中的token
BeanShell PostProcessor:把提取的token保存到本地

//log.info("................."+vars.get("tokenid")+"..............");
///log.info:打印变量使用,为了看代码对变量值的修改是否正确
FileWriter fstream=new FileWriter("${datadir}/Token.csv",true);
// ${datadir}是我在测试计划中报错的相对路径变量
BufferedWriter out =new BufferedWriter(fstream);
log.info("................."+vars.get("tokenid")+"..............");
out.write(vars.get("tokenid")+"\n");
out.close();
fstream.close();

然后在用csv文件读取本地的token进行压测

3. 使用非GUI模式执行,上个执行结果忘记删除,导致新执行的日志追加到上一个日志中

当用非GUI模式执行脚本的时候,我们会把jmeter执行的结果保存到日志中,但是往往会忘记把上个执行结果的日志删除,这样就导致了新执行的日志追加到上个日志中!用jmeter查看的日志结果就会不准确!

解决方法:

①.在测试计划中新增一个时间变量名time:变量值:${__time(MM)}-${__time(dd)}_${__time(HH:mm:ss)}
②.保存日志的文件名引用测试计划中的time变量名。

4. 怎么快速的确定cpu80%以上需要多少并发

先进行小批量的并发,例如:200个(看实际情况),然后看一下cpu使用率,大概可以按照 1/当前cpu使用率*200而得到cpu100%时大概需要多少并发(准不准不清楚,目前我是这样弄的),然后再去慢慢调试!

5. 被压接口增加100并发,cpu都会有变法,为什么并发数一直再增加,被压系统cpu未增加也不报错!

这个需要看是否有别的因素限制了性能:

① 关注jmeter服务器的CPU、内存、磁盘、NAT的性能、EIP的性能,有木有达到瓶颈?保证首先性能瓶颈不在发端。
② RDS的cpu:数据库cpu达到瓶颈,会影响被压接口的实例cpu
③ RDS的内存:同上
④ Redis的cpu:同上
⑤ Redis的内存:同上
⑥ 带宽:同上
还有就是你的硬件性能太好啦,100只是毛毛雨看不出什么

6. bug:压测登录接口导致所有接口都很卡

token过多后,redis访问接口使用错误(具体原因忘记了)

7.查看了数据库监控, 数据库CPU满载

解决方法:
① 数据库增加缓存机制:缓存的介质一般是内存,所以读写速度很快。缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。
② 增加索引
③ 升级数据库配置

8. 数据库删除压测报名数据后,报名任然提示已报名

原因:redis缓存没有做相应的清空

什么操作最耗费数据库资源?是查询。查询中的子查询、多表查询,条件中的Group by、order by,以及limit等操作都会消耗不少的数据库资源。

上一篇下一篇

猜你喜欢

热点阅读