负载测试
日常需求:负载测试!
对于桥的负载测试:我给你20t的一排车辆,看你能不能撑得住20t!
对于系统的负载测试:
逐步增加负载,便于问题的发现和定位,不要操之过急。逐步增加负载是这负载测试和压力测试中常见的方法。这种方法有助于观察和评估系统随着负载增加而发生的变化。但是,仅仅因为逐步增加负载,并不意味着你总是在进行负载测试;这同样可以应用于压力测试。
一定要在逐步增加负载的过程中保证除TPS以外其他指标也满足条件,在满足条件的情况之下找到最大的TPS(就是测试系统所能承受的最大吞吐量,可以视为最大负载量的直观体现),如果该TPS也满足指标条件,才能说通过了负载测试。
主流性能测试工具
Loadrunner
优点是详细,且支持IP欺骗,能够更为真实地模拟不同ip用户使用接口的情况。但是,收费!
JMeter
JMeter有九大元件!
前置处理/后置处理:相对于取样器,也就是相对于发出的请求!发请求之前需要对请求参数做处理,发请求后需要对响应结果进行提取。
编写性能脚本
基础练习
在我们之前使用JMeter进行接口测试中,我们使用的是POST请求中的form表单格式,所以才能直接在参数列表中添加,这个和GET使用方法一样,但只是POST的使用情况之一。
请求头设置不是必须的,按照实际情况设置。
注意当使用POST请求传递form表单格式的时候,不能仅仅看到请求返回200就认为是正确的,我们需要查看请求头和请求体,尤其是请求头的Content-type是不是form表单格式:
作者检查了一下,发现自己真的做错了(注意检查请求的Request Headers,作者一开始检查的是相应数据,真傻x,浪费时间):
这个请求头是很重要的,因为它告诉服务器如何解析接收到的数据。错误的Content-Type
头可能会导致服务器无法正确解析数据,从而导致错误或未预期的行为。
所以,在JMeter中,确保设置正确的Content-Type
头是很重要的,以模拟真实的用户交互和避免潜在的问题。我们可以添加HTTP信息头管理器,以正确规定信息头的值:
成功:
JSON断言
响应断言
更为全面,能够对任意格式的响应结果进行断言,相应地,真™麻烦:
1. 忽略状态:不让jmeter自动化测试。为什么要有这个选项呢?因为我们有时候就是要测试状态码为4xx或者5xx时的信息。如果默认让jmeter自动测试,则jmeter会自动将状态码作为断言判断的一部分,直接报错不看后面的内容,就没有任何意义了。
2. 如果有多个预期结果,且在模式匹配中勾选“或“选项,则满足任意一个结果就行;否则所有结果必须同时满足!
其实编写性能脚本就是设置线程组、HTTP请求等等组件,组件再搞一些元件,详情请见黑马相关视频。
端口配置
课上那些ip端口不适用于本地程序,所以读者就本地Springboot程序介绍一下端口配置。作者的应用正在本地的8085端口上运行,并且希望使用JMeter的PerfMon插件来收集其性能指标。
首先,我们需要了解PerfMon插件的工作原理:
- PerfMon Server Agent:它是一个独立的进程,需要在你想要监控的服务器上运行。它会收集性能指标并发送给请求它的JMeter客户端。
- PerfMon Metrics Collector in JMeter:这是JMeter中的一个Listener,它连接到PerfMon Server Agent并请求性能指标。
我们需要在同一台机器上运行Springboot应用、PerfMon Server Agent和JMeter。
下面是步骤:
启动应用:确保应用正在本地的8085端口上运行。
启动PerfMon Server Agent:选择一个不同于8085的端口运行PerfMon Server Agent,例如
4444
。这是默认的,你可以使用startAgent.bat
直接启动它。注意,一定是不同于8085的端口,因为,我们在startAgent.bat配置的或者是它默认的端口,都是它自己的端口,不是它监听的端口,是它自己的端口啊!
所以一旦它也选择Springboot项目的端口,就会产生端口重用的问题!
配置JMeter:
打开JMeter。
添加你的线程组和HTTP请求sampler等。
添加
PerfMon Metrics Collector
listener到你的测试计划。在PerfMon Metrics Collector的配置中:
Server IP or Hostname
:输入localhost
。Server Port
:输入PerfMon Server Agent的端口,例如4444
。这个端口号一定要与startAgent.bat
配置的端口号相同,二者才能连接。
- 选择你想要监控的指标,例如CPU, Memory等。
运行JMeter测试:当JMeter测试运行时,PerfMon Metrics Collector会从本地的PerfMon Server Agent收集指标,并在JMeter中显示。
注意:应用使用8085,PerfMon默认使用4444。除非你有特定的需求,否则通常不需要改变这些默认设置。作者设置的是4445端口,简而言之,如下图:
插件用的全是插件的端口,4444是默认值;JMeter的HTTP请求还是请求的本地Springboot的ip和端口:localhost和8085。
实践感悟
作者昨天晚上开始学习,看起来很简单的过程,心态崩了好几次,今天早上才做完。目标是性能测试中实现下图:
作者之前写了一个简单的Springboot加密解密的本地程序信息安全第三周_Joy T的博客-CSDN博客,想着为之后本地程序接口测试、性能测试练习一下,但是遇到了很多错误,在本篇,作者将错误和注意事项讲一下,具体实现过程建议听老师的课。(作者使用的是windows的本地程序)
1.JAVA版本
这是最槽蛋的,为了实现上图,需要安装插件:
但是,这个插件只是用来收集性能监听数据的,重点还是要在服务器上部署一个叫做ServerAgent-2.2.3的监听程序,通过startAgent.bat文件打开。这两个文件是一切槽蛋的来源!大多数人都会发现这个.bat文件打开之后闪退,其实就是JAVA版本的问题,没有别的原因!
™这个2.2.3的文件,不适合现在高级的JAVA版本,甚至作者从JAVA17开始退到11,再从11退到8都不行,JAVA8都不行啊读者朋友们!
巨离谱,这里的解决方法是下载一个1.8的JRE。请参考这篇文章:Jmeter一点击运行ServerAgent就闪退关闭退出问题的解决 - blazerrr - 博客园 (cnblogs.com)
这里唯一一点那位高人没讲的,就是在JRE/bin下运行时,不能直接照抄startAgent.bat文件的第二行,因为存在语法错误!
一定要把后面的%*去掉才能够在JRE下运行,否则会报错:
如果不是这个提示,而是:
那就是CMDRunner.jar的位置没搞好,一定是这个原因,其他原因不用找了。..\..\不能有间隔!
这个错误来自于作者想投机取巧直接把CMDRunner.jar放在JRE/bin下,但是,它的运行需要找其所在目录的文件,使用这个命令的话,其所在目录是JRE/bin而不是ServerAgent-2.2.3文件夹,所以找不到那些文件,无法打开。
2.不要着急
作者看网上的帖子,无一不是查找了很久很久才配置好的,所以大家遇到麻烦一定不要灰心,不就是版本不对吗,重新搞不就行了!
一定不要烦,哦对了,JAVA还有一点就是,你在卸载JDK的时候,一定不能只卸载表面的安装文件夹,它会有残留文件,这些残留文件百分之九十九都会造成后面的安装或者使用错误!一定要找到电脑系统中的程序,把带JAVA的那种空白的看不出来是啥的那些残留文件全删的干干净净。