压测工具平台案例库
原创JMeter脚本编写
http cookie manager获取响应头的cookie值,引用正确的情况下仍然获取不到
【问题描述】
使用http cookie manager获取登陆接口响应头中的cookie值,cookie引用变量名正确,但获取到的cookie没有生效,接口仍然报错401
【原因分析】
bin目录下的jmeter properties文件默认cookiemanager.save.cookies=false,导致获取到的cookie值没有被保存
【问题解决】
将该行注释去掉,改成cookiemanager.save.cookies=true
csv数据文件设置取到的值是文件中的参数名
【问题描述】
使用csv数据文件保证脚本参数化,但是从依赖文件中获取的uid等字段值不对,仍然是uid参数名
【原因分析】
依赖文件首行设置了参数名,而在csv设置中忽略首行选择了false
【问题解决】
当依赖文件首行设置了参数名时,csv数据文件设置中忽略首行选择true;依赖文件首行没有设置参数名,csv设置选择false
批量跑登陆接口获取cookie,始终有部分cookie是已失效状态
【问题描述】
批量运行登陆接口获取一批有效的cookie数据,登陆账号和密码正确且不重复,但获取到的部分cookie始终已失效
【原因分析】
使用了2000个账号和密码,持续运行5min,导致部分账号和密码循环使用,造成部分生成的cookie被覆盖
【问题解决】
1)要么增加账号,防止出现账号循环使用的情况
2)要么线程组中的loop count设置成次数,按照次数运行,保证每个账号生成唯一的cookie
coding运行jmx脚本,未执行压测任务就结束
【问题描述】
coding平台运行jmeter脚本,执行压测时任务构建结束,脚本跑不起来
【原因分析】
脚本中使用了csv数据文件,文件路径写错了:jmeter/xxx.csv,coding平台找不到依赖文件
【问题解决】
将路径改成/jmeter/xxx.csv,这里是绝对路径
公司网络jmeter请求时报错
【问题描述】
在公司网络jmeter请求是总是保存,但是不用公司网络又可以请求成功
【原因分析】
部分网络问题,需要本地添加host才能访问
【问题解决】
在Shift+Command+G 三个组合按键,并输入 Hosts 文件的所在路径:/etc/hosts,修改hosts配置
在postman请求成功而jmeter请求报错
【问题描述】
同样的接口,配置同样的参数,通过 postman 调试请求成功,但通过 jmeter 调试脚本却报错
【原因分析】
对比了header、入参,都是一致的,经排查发现入参中含有中文,没有设置UTF-8无法解析中文字符
【问题解决】
在 jmeter 中配置编码UTF-8
利用Jmeter处理加密请求出现报错
【问题描述】
对于需要加密和解密的接口,出现加密失败和解密失败的情况
【原因分析】
对于接口的加密和解密需要使用调用 jar包,并且在beanshell里写入代码逻辑
【问题解决】
在此处调用jar包:
加密逻辑如下:
第三行是 需要加密的参数 的输入格式
第四行是 具体的加密算法使用方式,依照项目所使用的jar包不同对应的加密算法也会有不同
解密逻辑如下:
直接通过第二行的方式对 response 进行解密
如何在jmeter配置阶梯摸高压测
【问题描述】
有时候需要对接口进行摸高操作,这里可以使用JMeterPlugins-Standard插件
【原因分析】
- 需要在 https://jmeter-plugins.org/downloads/old/ 中下载对应的JMeterPlugins-Standard,一般下载最新版本即可,下载完成后,解压zip包,把JMeterPlugins-Standard.jar包放到Jmeter的lib/ext目录下
- 测试计划 - 添加 - 线程(用户)- Stepping Thread Group
【问题解决】
如何在jmeter配置host访问
【问题描述】
压测过程中,经常需要用IP+host的方式来访问,比如要压测中间链路的某个云组件。
【原因分析】
在分布式集群上修改host文件比较麻烦,更好的方式是在jmeter脚本里面修改,简单快捷
【问题解决】
- 在【http信息头管理器】配置host
- 在【HTTP请求】配置相应的IP
Jmeter如何以轮询的方式访问不同的参数(如session/token/ip)
【问题描述】
当参数数量有限时,如session、token和ip等
【原因分析】
可以使用【添加】->【前置处理器】->【用户参数】
【问题解决】
PS:线程数要超过用户数量才会被轮询到
Jmeter如何在日志里面统计耗时
【问题描述】
当想拿到耗时长的请求的信息
【原因分析】
接口请求时间过长,可以使用prev打印更多信息
【问题解决】
参考: jmeter 获取全部响应_Jmeter 记录请求和响应信息
Jmeter计数器和随机数的使用
【问题描述】
在压测脚本编写过程中可能需要对个别产生进行参数化
【原因分析】
为保障测试数据更真实,需要对脚本进行参数化处理
【问题解决】
1.有规律的数据,使用计数器,请求到达最大值后,又从初始值开始,循环计数。
2.无规律的数据,使用随机数
${__Random(510000000050000000,590000000000000000)}
将某文件上传到接口压测脚本中
【问题描述】
http请求里面参数设置文本以外参数
【原因分析】
在压测时如果需要上传文本以外参数,需要使用不同的MIME类型
【问题解决】
1. 添加http请求,填写参数。
2. 根据上传不同文件类型,填写不同MIME类型。
1)数据文件是excel,MIME类型是
application/vnd.ms-excel
2)数据文件是图片,MIME类型是
application/octet-stream
3)数据文件是txt,MIME类型是
text/plain
4)数据文件是.doc,MIME类型是
application/msword
3. 数据文件和脚本必须存放在同一目录。
处理http请求时如何选择content-type类型和传参方式
【问题描述】
在使用不同传参方式时,要选择对应的content-type类型
【原因分析】
如果不选择传参方式对应的content-type类型在请求时会出现报错
【问题解决】
POST请求中content-type的三种数据类型:
第一种类型:
content-type:application/x-www-form-urlencoded
如果不指定content-type类型,默认用此类型。
参数方式:Parameters参数格式和body data格式(key1=value1&key2=value2)均可。
注意:所以使用Parameters参数格式时,要么不设置content-type类型,要么设置content-type:application/x-www-form-urlencoded,不能用content-type:application/json类型去请求,否则报错!!!
第二种类型:
content-type:application/json
以Json格式编码数据体,方便传输结构化数据(相比键值对)。
参数方式:body data为json格式
{ "key1":"value1", "key2":"value2" }
注意:使用Body Data时,Content-Type可传application/x-www-from-urlencoded或application/json,两者的区别是数据格式不同
第三种类型:
content-type:multipart/form-data
需要在表单中进行文件上传时,就需要使用该格式。
参数方式:Parameters参数格式
示例:
接口耗时低,qps却上不去
【问题描述】
压测时发现接口请求耗时较低,但是qps始终上不去,低并发下反而qps更高,这里可能是jmeter脚本写得有问题
【原因分析】
经过验证,提供的脚本文件中有一个返回值解析的脚本,对接口返回值做转码,逐字符解析,某接口返回几千个字符,导致脚本性能急剧下降
【问题解决】
优化解析脚本,简化逻辑,解析内容提前处理,如需要返回值,可提前提取出来放入csv文件中
Jmeter脚本本地调试OK,集群跑错误率100%
【问题描述】
某jmeter脚本本地调试是没有报错,但是放集群上就出现全部报错
【原因分析】
路径下的“/interface/”只能放“路径”中,不能放“服务器名称或ip”中,“路径”中只放服务器路径,如网关信息需放“服务器名称或ip”中
【问题解决】
路径/interface/放在”服务器名称或者IP"后面在本地是可以跑起来,但是在集群上跑不起来,需要把位置挪到“路径”中
抓包工具导致本地跑接口报connection refused 错误
【问题描述】
抓包工具和jmeter同时使用时,抓包工具的代理导致jmeter请求失败
【原因分析】
在本地jmeter调试脚本,返回connection refused 错误,如下图,可以看到访问的是本地IP+8866端口
【问题解决】
更改抓包工具代理或者关掉抓包工具,jmeter请求成功
Jmeter中所使用的csv文件读取失败
【问题描述】
因为某压测项目中的生产环境的数据多样性需许多同学手动获取提供,故采用腾讯文档进行共享编辑,而后直接导出csv文件
【原因分析】
导出的文件格式不对,jmeter无法读取
【问题解决】
在调试脚本时发现,jmeter无法成功地从csv文件中读取多个变量的数据。最终采取的方式是,把数据复制到新建的空txt文件中,就成功地解决了这个问题
请求为长链接,jmeter脚本中需勾选上KeepAlive,否则容易导致端口数耗尽
【问题描述】
查看结果树中出现下图所示错误:
【原因分析】
端口数一般可用区间为 3w-6w,最大是65535。若采用短链接去请求,接口响应时间长,端口被占用,没有释放,会把端口数耗尽,导致后续的请求无端口可用,连接不上。
【问题解决】
请求为长链接时,jmeter脚本中需勾选上KeepAlive
Jmeter 5.4.3版本不支持将URL配置在服务器名称或者IP处
【问题描述】
Jmeter 5.1.1版本配置的脚本可以请求通过,Jmeter 5.4.3版本配置的脚本请求接口不通过,出现如下图所示的报错
【原因分析】
在Jmeter 5.4.3版本的脚本配置中,server name中包含了path路径,无法识别导致报错。
【问题解决】
将server Name和path分开写即可。
Jmeter没有配置超时时间导致请求响应时间超过1分钟仍然没有报错
【问题描述】
请求响应时间超过1分钟没有报错,QPS出现断层。
【原因分析】
在Jmeter脚本中没有配置超时时间,请求长时间没有收到响应,连接数被占用,没有发起新的请求,QPS出现掉坑。
【问题解决】
在Jmeter脚本中配置连接和响应的超时时间:
Coding平台问题
git上传文件,执行push命令时报错:rejected
【问题描述】
脚本依赖文件大于20M无法上传至coding平台,通过git上传文件,push时总是报错:rejected
【原因分析】
远程库和本地库的代码不一致导致
【问题解决】
在执行push命令前,把远程库中的更新合并到本地,执行如下命令:git pull --rebase origin master
构建项目失败,报错“Engine is busy”
【问题描述】
查看构建日志时发现报错“Engine is busy”
【原因分析】
在此任务前执行的任务是高并发(200并发)去执行,jmeter-suite的缺点就是,高并发压测结束后自己停不下来。
【问题解决】
把master和salve重启
没有上传csv文件导致在coding平台构建计划失败
【问题描述】
在coding构建压测计划时没有反应,查看日志无压测数据
【原因分析】
在执行任务前重新部署了jmeter-suite,导致事先传进pod里的参数文件被清除,在构建计划时读取不到数据,就构建失败。
【问题解决】
重新上传参数文件到pod里
启动非分布式压测任务,coding流水线中上传数据文件报错User cannot list resource "pods" in API group "" in the namespace "default"
【问题描述】
1.coding流水线中上传数据文件报错为user100025741106-1655275126没有访问default空间权限。
2.云平台使用该云账号登陆,查看应用jmeter-suite返回当前用户没有访问应用列表的权限。
【原因分析】
云平台中,导出的集群kubeconfig配置文件中保存了当前操作用户信息,在coding平台构建计划时,使用配置文件中用户信息去访问集群,而该云账号没有访问default空间的权限,导致报错。
【问题解决】
创建集群/应用的云平台账号为导出kubeconfig配置文件的账号分配访问云平台default空间权限,问题解决。
压测集群问题
集群创建jmeter-suite应用不成功
【问题描述】
集群创建jmeter-suite应用不成功,可能是权限不够
【原因分析】
查看报错信息,发现权限不够,需要项目组给权限,最好admin权限
【问题解决】
获取admin权限后再创建集群和创建应用问题解决
内存爆满把pod打挂,导致压测机启动不起来
【问题描述】
内存爆满把pod打挂,导致压测机启动不起来
【原因分析】
压力过大,内存资源不够
【问题解决】
把状态为Terminating的pod杀掉或者重新创建jmeter-suite应用
集群大批量pod处于Evicted状态
【问题描述】
集群大量pod处于Evicted状态
【原因分析】
当节点出现异常时,kubernetes将有相应的机制驱赶该节点上的Pod,多见于资源不足时导致的驱赶。
【问题解决】
把处于 Evicted 状态的 pod 删除,具体命令是:
kubectl delete pod -n namespace pod-name
怎么在腾讯云账号上登录压测集群的Pod
【问题描述】
有时候需要进到pod里面去查看jmeter压测过程中的相关日志
【原因分析】
1.首先在“ 容器服务 ”里面找到压测集群
2.进入到“工作负载”界面,点击Deployment,选择
***-distributed-jmeter-server
3.从pod列表里面任选一个,点击“远程登录”即可
【问题解决】
压测时请求接口报错“Non HTTP response code:iava. net. SocketException”
【问题描述】
使用coding执行压测,报错"用户详细信息接口 失败,返回码:Non HTTP response code: iava. net. SocketException"
【原因分析】
查看报错信息,是由于建立连接失败报错导致,定位原因是执行机IP未在服务端安全组中,导致压测机无法访问目标接口
【问题解决】
提供所有压测机IP列表,负责服务端 运维 同学将IP加入白名单,问题解决。
任务构建不起来,查看日志报错:killed
【问题描述】
某集群应用重装后,脚本无法构建成功,查看日志报错killed
【原因分析】
重装应用的时候,没有更改yaml文件中的内存大小,集群配置是2c2g,应用中配置默认为8g,这里需要调整
【问题解决】
更改yaml文件中内存大小为1g,并且pod配置中的内存limit大于等于yaml内存,小于2g
Grafana展示数据问题
grafana没有展示数据,甚至application都没有想要的值
【问题描述】
压测是发现grafana没有展示数据,甚至application都没有想要的值,Individual Transaction还可能报错
【原因分析】
使用了特殊符号或者部分influxdb或者grafana不支持的符号,如influxdb不支持英文括号,grafana不支持/等
【问题解决】
http请求名称尽量不要使用符号,尽量简洁
coding运行jmx脚本,压测结束后grafana面板看不到压测数据
【问题描述】
coding平台运行jmeter脚本,压测结束后grafana面板看不到压测数据
【原因分析】
本次项目压测集群配置了多个命名空间,只有defalut下配置了grafana监控面板,因此除了defalut以外,其余命名空间下执行的结果不显示
【问题解决】
将后端监听器中的influxdbUrl从http://jmeter-influxdb:8086/write?db=jmeter更改为:http://jmeter-influxdb.default:8086/write?db=jmeter
JMX脚本配置错误导致Grafana面板中Summary部分无压测数据
脚本中后端监听器禁用
【问题描述】
在Coding平台上进行压测,由于jmx脚本中后端监听器中的influxdbUrl配置错误,导致压测结束后grafana面板看不到压测数据
【原因分析】
- 案例一:当压测集群配置了多个命名空间时,非defalut命名空间下执行的脚本中下配置了influxdbUrl的配置为从http://jmeter-influxdb:8086/write?db=jmeter,导致无法在grafana面板上显示压测数据
- 案例二:jmx脚本中influxdbUrl的配置错误
【问题解决】
无论压测集群有几个命名空间,后端监听器中的influxdbUrl的值统一配置为:http://jmeter-influxdb.default:8086/write?db=jmeter
后端监听器中的influxdbUrl配置错误
【问题描述】
在Coding平台上进行压测,由于jmx脚本中后端监听器中的influxdbUrl配置错误,导致压测结束后grafana面板看不到压测数据
【原因分析】
- 案例一:当压测集群配置了多个命名空间时,非defalut命名空间下执行的脚本中下配置了influxdbUrl的配置为从http://jmeter-influxdb:8086/write?db=jmeter,导致无法在grafana面板上显示压测数据
- 案例二:jmx脚本中influxdbUrl的配置错误
【问题解决】
无论压测集群有几个命名空间,后端监听器中的influxdbUrl的值统一配置为:http://jmeter-influxdb.default:8086/write?db=jmeter
Grafana面板上Summary中有数据,transaction中没有记录
【问题描述】
在Coding平台上进行压测,脚本之行正常,grafana面板上summary部分显示正常,但是transaction中无脚本中对应的值
【原因分析】
案例一:后端监听器配置中summaryOnly参数的值填写成true,导致监控面板只有summary部分的数据
案例二:jmx脚本中influxdbUrl的配置错误
【问题解决】
无论压测集群有几个命名空间,后端监听器中的influxdbUrl的值统一配置为:http://jmeter-influxdb.default:8086/write?db=jmeter
grafana查看不到数据,influxdb series 超限
【问题描述】
grafana查看不到数据,查看Influxdb的日志出现报错为:max-series-per-database limit exceeded:(1000000)
【原因分析】
触发到Influxdb 数据库 连接数的上限,series写入不了数据
【问题解决】
新增如下图的配置,把Influxdb数据库的连接数放开,重新部署整套jmeter-suite
如果数据库满了,可以使用如下两条命令清理
【问题描述】
grafana线程数显示处出现断层,或者出现502的报错
【原因分析】
可能Influxdb数据库存储满了,一般能存储1g左右的数据
【问题解决】
Coding上执行“清理集群数据库”构建计划即可,执行前需做好数据截图
grafana面板加载缓慢,刷新后频繁报错502
【问题描述】
grafana面板频繁出现502报错,且压测数据断层
【原因分析】
怀疑influxdb数据库满了,需要清理数据
【步骤1】
Coding上执行“清理集群数据库”构建计划清理数据,报错:container not found
【步骤2】
登陆到后台查看influxdb所在节点,发现同样报错:container not found。查看监控果然cpu接近100%(压测节点是20个,不存在单节点压测的情况。)
【问题解决】:
优化了sql语句,查看grafana 的时候尽量不要查看时间范围太大。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
-
JMeter脚本编写
-
http cookie manager获取响应头的cookie值,引用正确的情况下仍然获取不到
-
csv数据文件设置取到的值是文件中的参数名
-
批量跑登陆接口获取cookie,始终有部分cookie是已失效状态
-
coding运行jmx脚本,未执行压测任务就结束
-
公司网络jmeter请求时报错
-
在postman请求成功而jmeter请求报错
-
利用Jmeter处理加密请求出现报错
-
如何在jmeter配置阶梯摸高压测
-
如何在jmeter配置host访问
-
Jmeter如何以轮询的方式访问不同的参数(如session/token/ip)
-
Jmeter如何在日志里面统计耗时
-
Jmeter计数器和随机数的使用
-
将某文件上传到接口压测脚本中
-
处理http请求时如何选择content-type类型和传参方式
-
接口耗时低,qps却上不去
-
Jmeter脚本本地调试OK,集群跑错误率100%
-
抓包工具导致本地跑接口报connection refused 错误
-
Jmeter中所使用的csv文件读取失败
-
请求为长链接,jmeter脚本中需勾选上KeepAlive,否则容易导致端口数耗尽
-
Jmeter 5.4.3版本不支持将URL配置在服务器名称或者IP处
-
Jmeter没有配置超时时间导致请求响应时间超过1分钟仍然没有报错
-
Coding平台问题
-
git上传文件,执行push命令时报错:rejected
-
构建项目失败,报错“Engine is busy”
-
没有上传csv文件导致在coding平台构建计划失败
-
启动非分布式压测任务,coding流水线中上传数据文件报错User cannot list resource "pods" in API group "" in the namespace "default"
-
压测集群问题
-
集群创建jmeter-suite应用不成功
-
内存爆满把pod打挂,导致压测机启动不起来
-
集群大批量pod处于Evicted状态
-
怎么在腾讯云账号上登录压测集群的Pod
-
压测时请求接口报错“Non HTTP response code:iava. net. SocketException”
-
任务构建不起来,查看日志报错:killed
-
Grafana展示数据问题
-
grafana没有展示数据,甚至application都没有想要的值
-
coding运行jmx脚本,压测结束后grafana面板看不到压测数据
-
JMX脚本配置错误导致Grafana面板中Summary部分无压测数据
- 脚本中后端监听器禁用
- 后端监听器中的influxdbUrl配置错误
-
Grafana面板上Summary中有数据,transaction中没有记录
-
grafana查看不到数据,influxdb series 超限
-
如果数据库满了,可以使用如下两条命令清理
-
grafana面板加载缓慢,刷新后频繁报错502
-
grafana面板加载缓慢,刷新后频繁报错502
-
如果数据库满了,可以使用如下两条命令清理
-
grafana查看不到数据,influxdb series 超限
-
JMX脚本配置错误导致Grafana面板中Summary部分无压测数据
-
coding运行jmx脚本,压测结束后grafana面板看不到压测数据
-
grafana没有展示数据,甚至application都没有想要的值
-
任务构建不起来,查看日志报错:killed
-
压测时请求接口报错“Non HTTP response code:iava. net. SocketException”
-
怎么在腾讯云账号上登录压测集群的Pod
-
集群大批量pod处于Evicted状态
-
内存爆满把pod打挂,导致压测机启动不起来
-
集群创建jmeter-suite应用不成功
-
启动非分布式压测任务,coding流水线中上传数据文件报错User cannot list resource "pods" in API group "" in the namespace "default"
-
没有上传csv文件导致在coding平台构建计划失败
-
构建项目失败,报错“Engine is busy”
-
git上传文件,执行push命令时报错:rejected
-
Jmeter没有配置超时时间导致请求响应时间超过1分钟仍然没有报错
-
Jmeter 5.4.3版本不支持将URL配置在服务器名称或者IP处
-
请求为长链接,jmeter脚本中需勾选上KeepAlive,否则容易导致端口数耗尽
-
Jmeter中所使用的csv文件读取失败
-
抓包工具导致本地跑接口报connection refused 错误
-
Jmeter脚本本地调试OK,集群跑错误率100%
-
接口耗时低,qps却上不去
-
处理http请求时如何选择content-type类型和传参方式
-
将某文件上传到接口压测脚本中
-
Jmeter计数器和随机数的使用
-
Jmeter如何在日志里面统计耗时
-
Jmeter如何以轮询的方式访问不同的参数(如session/token/ip)
-
如何在jmeter配置host访问
-
如何在jmeter配置阶梯摸高压测
-
利用Jmeter处理加密请求出现报错
-
在postman请求成功而jmeter请求报错
-
公司网络jmeter请求时报错
-
coding运行jmx脚本,未执行压测任务就结束
-
批量跑登陆接口获取cookie,始终有部分cookie是已失效状态
-
csv数据文件设置取到的值是文件中的参数名
-
http cookie manager获取响应头的cookie值,引用正确的情况下仍然获取不到