当前位置:网站首页>记录一次压测经验总结
记录一次压测经验总结
2022-07-06 22:47:00 【banana-man】
1. jemeter页面
2. 线程组
右键单击测试计划–>添加–>线程–>线程组
线程组属性
线程数:x 总共启用x个线程
Ramp-Up:y y秒内将x个线程全部启动
循环次数:z x个线程循环请求z次
注意:循环次数的“永远”不要打勾,该选项和调度器配合使用,当勾选了永远时,调度器填写的持续时间为m,表示x个线程不停的发起请求,直到请求的时间达到m则停止。这里测试并发的时候,容易造成压测机卡死。
setUP线程组在测试任务ThreadGroup 运行前先被运行。通常用在运行测试任务前,做初始化工作。例如建立数据库连接初始分化工作
tearDown线程组在测试任务线程组运行结束后被运行。通常用来做清理测试脏数据、登出、关闭资源等工作。例如关闭数据库连接
这里我的运用场景是 setup线程组添加登录请求,tearDown线程组添加登出请求,释放sessionId的缓存。
3. 取样器–http请求
右键单击线程组–>添加–>取样器–>HTTP请求
4.取样器—TCP请求
TCP请求这里我用于发送指令文本到网关,实现设备上线的操作。
添加步骤:右键单击线程组–>添加–>取样器–>TCP取样器
TCPClient classname:TCP报文格式类名,默认前缀org.apache.jmeter.protocol.tcp.sampler.
① TCPClientImpl:普通文本,默认传输格式。一般用来发json串;
② BinaryTCPClientImpl:十六进制报文,指定包结束符;
③LengthPrefixedBinaryTCPClientImpl:继承BinaryTCPClientImpl类,并在BinaryTCPClientlmpl前面增加两个字节数据长度。可在jmeter.properties配置文件中tcp.binarylength.prefix.length设置;
服务器名或IP:服务器主机名称或者服务器ip地址
端口号:服务器端口号
连接:与服务器套接字应用连接的超时时间(单位毫秒,0 表示禁用超时)
响应:服务器响应的超时间(单位毫秒,0 表示禁用超时),这个值的设置跟行尾(EOL)字节值有关系,如果行尾(EOL)字节值中的值设置不正确,会导致JMeter一直在等待无法结束,但是如果指定了Response Timeout这个值的话,在到达这个值的时候就关闭连接。
Re-use connection:如果勾选的话,就代表在一个线程组里,复用一个连接,在要求TCP长连接的时候需要用到这个。
关闭连接:如果勾选的话,一个取样器就只会用一个TCP连接,也就是发送完报文以后,就关闭TCP连接
设置无延迟:参考java.net.Socket.setTcpNoDelay(),如果选中,它将会禁用Nagle’s算法(利用缓存功能),反之
SO_LINGER:该配置项用于控制在关闭连接之前是否要等待缓冲区中的数据发送完成。如果SO_LINGER选项指定了值,则在得到关闭连接的请求之后还会等待指定的秒数以完成缓冲区中数据的发送,在指定的SO_LINGER秒数完成后,关闭连接。因此,如果把该选项设置成0,那么所有连接在收到关闭连接的时候都会立即关闭,避免产生很多处于TIME_WAIT状态 (等待状态)的套接字,单位为秒。
行尾(EOL)字节值:判断行结束的byte值,如果设置值在-128到127之外将会跳过EOL检测。可以在jmeter.properties文件中增加属性eolByte进行设置,如果在TCP Sampler Config(TCP 取样器配置)中也设置这个属性,那么TCP Sampler Config中设置的将会奏效。比如服务器端返回的字符串都是以回车符结尾,那么可以将该选项设置成10。例如我这应答的最后一个字节是十六进制的44,转换为十进制则是68。
要发送的文本:需要发送的数据
5.http请求注意:
jemeter默认的文件类型有:application/x-www-form-urlencoded(参数可以在Parameters或Body Data里输入)、multipart/form-data
但application/json不是默认的文件类型,所以需要告诉服务器我们发送的请求信息是哪种格式的,当接口的contentType为application/json时,需要添加一个http信息头管理器。
6.监听器
监听器常用的是结果树、聚合报告、BeanShell监听器。添加步骤:右键http请求/线程组–>添加–>监听器
作用范围:以结果树为例,结果树的作用范围取决于添加在取样器下还是线程组下。
结果树:查看每一个请求的请求内容和响应结果。
聚合/汇总报告:请求响应时间的统计,包含最大响应时间、最小响应时间、中值、平均值等。
BeanShell:分前置处理器、后置处理器、断言。
7.BeanShell断言
配合json提取器使用,在调用了登录接口后,将sessionId设置为全局变量
添加步骤:添加–>后置处理器–>Json提取器
用于提取请求响应文本的sessionId值,并赋值给变量sessionId
BeanShell用于将json提取器获取的sessionId设置为全局变量。
添加步骤:右键单击http请求–>添加–>断言–>BeanShell断言(这里添加断言或者beanShell后置处理器都行)
将响应文本中的sessionId设置为全局变量,脚本 KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(se…{sessionId},)}
//${__setProperty(变量名,值} 全局变量赋值,跨线程调用,可以再任意地方调用,但不能跟在import xxx后面
${__property(sessionId)}函数返回Jmeter的属性值。
8.断言
除了上面提到的beanShell断言外,还有其他的断言。
以响应断言为例。添加一个响应断言,判断响应文本是否包含“请求成功”,若返回的结果中不包含请求成功,则断言不通过。
以断言持续时间为例。判断响应时间是否低于200ms,若响应时间高于200ms,则断言不通过。
9.计数器
在实际的应用场景中,添加数据时有部分字段要求不能重复,此时计数器的应用可以避免繁琐的更改参数值操作。
这里设置了引用的名称,在参数中引用可以通过${upNum}对该值进行引用。设置开始的和递增值,最大值可以根据需要设置。当值增加到上限时,停止自增,回到初始值继续自增。
10.总结
对于压测,找瓶颈可以通过添加线程组的线程数和循环次数对接口加压,查看聚合报告的吞吐量是否继续增加,若增加了很大的循环次数后,吞吐量还有提高的空间,则可以加线程数,线程数一般加到20已经很高了,直到吞吐量不再增加或者增加的幅度很小则可以确定瓶颈,
参考博文:https://blog.csdn.net/weixin_39607473/article/details/111108192
边栏推荐
- How to package the parsed Excel data into objects and write this object set into the database?
- leetcode 53. Maximum subarray maximum subarray sum (medium)
- 3.基金的类型
- 3GPP信道模型路损基础知识
- Ansible报错:“msg“: “Invalid/incorrect password: Permission denied, please try again.“
- 指针与数组在函数中输入实现逆序输出
- 深入解析Kubebuilder
- 当 Knative 遇见 WebAssembly
- 动态生成表格
- 九章云极DataCanvas公司摘获「第五届数字金融创新大赛」最高荣誉!
猜你喜欢
01机器学习相关规定
深入解析Kubebuilder
Liste des hôtes d'inventaire dans ansible (je vous souhaite des fleurs et de la romance sans fin)
Sublime tips
批量归一化(标准化)处理
Lessons and thoughts of the first SQL injection
When knative meets webassembly
mpf2_ Linear programming_ CAPM_ sharpe_ Arbitrage Pricin_ Inversion Gauss Jordan_ Statsmodel_ Pulp_ pLU_ Cholesky_ QR_ Jacobi
窗口可不是什么便宜的东西
3GPP信道模型路损基础知识
随机推荐
[Yugong series] go teaching course 005 variables in July 2022
sscanf,sscanf_ S and its related usage "suggested collection"
Analysis -- MySQL statement execution process & MySQL architecture
Vscode automatically adds a semicolon and jumps to the next line
Test interview | how much can you answer the real test interview question of an Internet company?
[Android kotlin collaboration] use coroutinecontext to realize the retry logic after a network request fails
app内嵌h5---iphone软键盘遮挡输入文字
Sublime tips
STM32 system timer flashing LED
Ansible reports an error: "MSG": "invalid/incorrect password: permission denied, please try again“
窗口可不是什么便宜的东西
一文搞懂常见的网络I/O模型
NiO related knowledge points (I)
Tree map: tree view - draw covid-19 array diagram
Oracle -- 视图与序列
R语言主成分pca、因子分析、聚类对地区经济研究分析重庆市经济指标
【數模】Matlab allcycles()函數的源代碼(2021a之前版本沒有)
leetcode 53. Maximum subarray maximum subarray sum (medium)
npm ERR! 400 Bad Request - PUT xxx - “devDependencies“ dep “xx“ is not a valid dependency name
JDBC link Oracle reference code