用户需求:某系统承受最大用户量访问。
业务场景:
1.多用户登录(获取身份验证token);
2.查询任务列表(查询接口);
3.进行任务提交(表单提交);
4.查看任务状态(确认提交成功)。
执行顺序:
在jmeter中从上而下,执行顺序是在该文章中就不一一阐述,若时间充裕的情况下,可以尝试调整顺序会发现很多可以避免的坑。
一、线程组
线程组中,您可以设置并发用户数、循环次数、延迟时间等。根据您的测试需求进行相应的配置。
线程属性:
1.线程数:线程数(Number of Threads)表示同时执行测试的并发用户数。
(假设您将线程数设置为100,那么在测试运行期间,JMeter 将同时模拟100个并发用户执行测试脚本。每个线程(用户)将独立执行测试脚本中定义的请求。)
2.Ramp-Up时间(秒):并发用户逐渐增加的时间
(假设您设置线程组的并发用户数为100,并将 Ramp-Up 时间设置为10秒。那么在测试开始的10秒内,JMeter 将逐步启动并发用户,每秒启动大约10个用户,直到达到100个并发用户。)
3.循环次数:循环次数(Loop Count)指的是执行测试脚本的重复次数
(假设您将循环次数设置为5,那么测试脚本将被重复执行5次。每次执行都会包括线程组中定义的并发用户数并发执行测试脚本。)
举例说明:
设置线程数为100、Ramp-Up时间为10秒、循环次数为2次时,意味着以下情况:
- 在10秒内,JMeter将逐渐增加并发用户,从初始状态逐渐增加到100个线程。
- 一旦达到100个线程,测试脚本将开始执行。
- 测试脚本将被执行2次,每次执行都会有100个并发用户同时执行请求。
因此,总共会执行200个请求(100个线程 x 2次循环)。但并非在10秒内完成200个并发请求,而是在10秒内逐渐增加到100个并发用户,然后执行2次测试脚本,每次都有100个并发用户同时执行请求。
注意:编写脚本时,默认不用配置,脚本配置完成后根据实际需要逐步添加线程数、配置时间、循环次数。
二、全局配置-HTTP请求默认值
在实际项目中编写脚本时,需要添加HTTP请求默认值,是为及时切换测试环境或正式环境所需要的。以达到快速切换环境的作用。我们编写脚本时肯定是先在测试环境进行调试。如图:
基本:
-
Web服务器:这是指您要发送请求的目标服务器的主机名或IP地址。您需要提供正确的服务器名称或IP地址,以便JMeter能够将请求发送到正确的服务器。
-
协议:这是指您要使用的协议类型,例如HTTP或HTTPS。根据您的需求和服务器配置,选择适当的协议。
-
服务器名称或IP:这是指您要发送请求的目标服务器的主机名或IP地址。与Web服务器设置项类似,您需要提供正确的服务器名称或IP地址。
-
端口号:这是指您要发送请求的目标服务器上的端口号。
-
路径:这是指您要发送的HTTP请求的路径部分。您需要在这里提供正确的路径。(默认不填写)
-
内容编码:这是指请求中的内容编码方式。您可以选择适当的内容编码,例如gzip或deflate,以便在请求中进行数据压缩。(默认不填写)
高级:(默认可不做配置)
配置代理:可以再此进行配置,fidder4是常用的抓包工具方便查看请求结果和响应内容。
注意:配置代理需要打开相应代理程序。若不需要则需要去掉该配置
三、全局配置-HTTP信息头管理器
实际项目中,我们只对查询接口,业务接口做性能测试,一般都会添加头部做为全局配置项。
-
ACCEPT:这是指客户端(通常是浏览器或应用程序)希望接收的响应内容类型。它指定了客户端能够处理的媒体类型,例如"text/html"表示接受HTML内容,"application/json"表示接受JSON格式的数据等。通过设置ACCEPT头部,客户端可以告诉服务器它期望接收的响应类型。
-
Content-Type:这是指请求或响应中实体主体的媒体类型。对于请求,Content-Type指定了请求主体的格式,例如"application/json"表示请求主体是JSON格式的数据。对于响应,Content-Type指定了响应主体的格式,例如"text/html"表示响应主体是HTML内容。设置Content-Type头部可以告诉服务器请求或响应的数据格式。
-
User-Agent:这是指发送请求的客户端的身份标识。它通常包含了客户端的应用程序名称、版本号和操作系统信息等。服务器可以使用User-Agent头部来识别客户端类型,以便根据需求提供适当的响应。例如,移动设备的User-Agent可能与桌面浏览器的User-Agent不同,服务器可以根据User-Agent头部来优化响应。
响应后的头部
注意:在实际测试过程中一定要模拟客户端请求身份标识(User-Agent),必要时高并发的情况也可作为csv数据配置文件进行引入。比如“百度”、“京东”。未配置此项多次从jmeter发出请求则返回的安全验证的问题。
四、事务控制器
事务控制器可以包含多个子元素,例如HTTP请求、断言、定时器等。当事务控制器执行时,它会按照顺序执行其中的子元素,并将它们作为一个事务进行计时和度量。
登录场景:
账号、密码(加密)、提取token
某系统业务场景:
编写随机参数,提取响应内容,传递参数
五、配置http请求
接口的获取研发API文档,fidder4抓包、F12。再上述过程中已配置过全局变量-HTTP默认请求,只需要在http请求中配置路径即可,其他配置不做任何操作。如图:
六、响应断言
-
Main sample and sub-samples(主样本和子样本):断言将应用于主请求和所有子请求的响应。
-
Main sample only(仅主样本):断言将仅应用于主请求的响应,而不包括任何子请求。如果您只关心主请求的响应,而不需要对子请求进行断言,可以选择这个选项。(一般默认该项)
-
Sub-samples only(仅子样本):断言将仅应用于子请求的响应,而不包括主请求。如果您只关心子请求的响应,而不需要对主请求进行断言,可以选择这个选项。
-
JMeter variable(JMeter变量):断言将应用于指定的JMeter变量的值。在这种情况下,断言将检查JMeter变量的值是否满足断言条件。您可以在"Variable Name"字段中输入变量名。
测试字段根据实际响应的判断内容进行选择。如上图。登录请求成功后会在响应文本中生成token返回值。
七、正则提取器-提取token
1.引用名称(Reference Name):这是您为提取的值指定的变量名。提取的值将存储在该变量中,以便在后续的请求或操作中使用。您可以在其他元件中使用${引用名称}
来引用该变量。
2.正则表达式(Regular Expression):这是用于匹配和提取响应数据中所需信息的正则表达式。通过编写适当的正则表达式,您可以定义匹配模式以捕获特定的文本内容。
简要声明:
提取纯数字:"响应字段名":(\d+);提取字符: "响应字段名":"(.+?)"
3.模版:默认$1$,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等。
4.匹配数字(Match No):0代表随机取值,1代表全部取值,通常情况下填0。
5.缺省值(Default Value):如果没有匹配到任何内容,或者提取失败,将使用缺省值作为提取结果。您可以设置一个默认值,以便在提取失败时提供备选值。
正则表达式:
检验是否有效可通过监听器-察看结果树-RegExp-Tester来验证。如图:
八、参数传递token
我们从步骤7中提取了token,再HTTP信息头部管理器元件中进行引用,${gettoken},这会和上层的全局配置-HTTP信息头部管理器组成新的头部。如图:
响应后的结果
八、 调试取样器
用法比较多的是对提取的内容进行打印比如:正则提取器、json提取器进行打印。如图:
响应内容。如图:
九、循环控制器-提取多个响应值作为参数传递并引用。
比如我们需要从调试取样器取值id_x的字符。引用变量函数表达式:${__V(id_${__Random(1,32,)})} 或 ${__Random(id_1,id_32,)}
- ${__Random(1,32,)}:这是一个随机数函数,用于生成一个介于1和32之间的随机整数。第一个参数是最小值,第二个参数是最大值。在这个例子中,它生成一个1到32之间的随机整数。
- ${__V(id_${randomNumber})}:这是一个变量引用函数,用于创建一个包含随机数的变量名。${randomNumber} 是前面生成的随机数变量,它将被插入到变量名中。例如,如果 ${randomNumber} 的值是 10,那么最终生成的变量名将是 id_10。
十、监听器
察看结果树
"察看结果树"是Apache JMeter中的一个元件,它提供了关于HTTP请求的详细信息,包括请求参数、响应数据和头部信息等。它可以帮助你理解和调试你的测试。
"察看结果树"的主要部分包括:
-
采样结果:这部分显示了请求的基本信息,如请求的URL、请求方法(GET、POST等)、响应代码(如200、404等)、响应消息(如OK、Not Found等)、请求的开始时间、结束时间、花费的时间等。
-
请求:这部分显示了发送给服务器的完整HTTP请求。这包括请求头信息和请求体(如果有的话)。
-
响应数据:这部分显示了服务器返回的HTTP响应。这包括响应头信息和响应体。
你可以根据这些信息来调试和优化你的测试。例如,如果你看到一个请求返回了404错误,你可能需要检查你的请求URL是否正确。或者,如果一个请求的响应时间过长,你可能需要优化你的服务器或者调整你的测试。
需要注意的是,虽然"察看结果树"对于调试和理解测试非常有用,但是它也会消耗大量的资源。因此,在进行大规模的性能测试时,通常建议关闭它,只在需要调试时开启。
聚合报告
"聚合报告"是一个非常有用的监听器,它提供了关于HTTP请求性能的详细统计信息。这些信息可以帮助你理解你的测试的性能,并找出可能的瓶颈。
"聚合报告"的主要部分包括:
-
Label:这是请求的名称,通常来自于HTTP请求采样器的名称。
-
#Samples:这是已经发送的请求的总数。
-
Average:这是所有请求的平均响应时间。
-
"Median":这一列代表的是中位数响应时间,单位是毫秒(ms)
-
Min:这是所有请求中响应时间最短的,单位是毫秒(ms)
-
Max:这是所有请求中响应时间最长的,单位是毫秒(ms)
-
Error %:这是请求错误的百分比。
-
Throughput:这是每秒处理的请求量。"Throughput 51.8/min"就表示系统平均每分钟处理了51.8个请求
-
Received KB/sec:这是每秒接收的数据量,单位是"千字节/秒"(KB/sec)。
-
Sent KB/sec:这是每秒发送的数据量,单位是"千字节/秒"(KB/sec)。
这些信息可以帮助你理解你的测试的性能。例如,如果平均响应时间过长,或者错误率过高,你可能需要优化你的服务器或者调整你的测试。另外,通过观察最大、最小和平均响应时间,你可以了解到系统在压力下的表现,以及系统性能的稳定性。
需要注意的是,"聚合报告"也会消耗一些资源,但是相比于"察看结果树",它的资源消耗要小得多,因此它更适合用于大规模的性能测试。
注意:
-
平均响应时间(Average):这是所有请求响应时间的平均值,单位通常是毫秒。这个指标可以帮助你了解系统的一般性能。
-
中位数响应时间(Median):这是所有请求响应时间的中位数,单位也是毫秒。这个指标可以帮助你了解大多数请求的响应时间,排除了极端值的影响。
-
最大响应时间(Max):这是所有请求中响应时间最长的一个,单位是毫秒。这个指标可以帮助你了解系统在最糟糕情况下的性能。
-
吞吐量(Throughput):这表示系统在单位时间内处理的请求数量,单位通常是"请求/秒"或"请求/分钟"。这个指标可以帮助你了解系统的处理能力。
-
错误率(Error %):这是出错请求的百分比。错误可能由各种原因引起,例如服务器错误、网络错误等。错误率应尽可能低。
-
接收和发送的数据量(Received KB/sec and Sent KB/sec):这两个指标分别表示每秒接收和发送的数据量,单位是"千字节/秒"。这些指标可以帮助你了解系统的网络负载和带宽使用情况。
这些只是一些基本的指标,具体需要关注哪些指标还取决于你的具体需求和系统的特性。例如,如果你的系统是一个实时系统,你可能需要更关注最大响应时间和错误率;如果你的系统是一个高吞吐量的系统,你可能需要更关注吞吐量和网络负载。
jp@gc - Active Threads Over Time
"jp@gc - Active Threads Over Time"是JMeter的一个插件,它是JMeter Plugins(也被称为 jp@gc)的一部分。这个插件可以帮助你实时地监控和可视化JMeter测试过程中的活跃线程数量。
具体来说,"Active Threads Over Time"监听器会生成一个图表,图表的Y轴表示活跃线程的数量,X轴表示时间。每个线程组会以不同的颜色表示在图表上,这样你可以清楚地看到在整个测试过程中各个线程组的活跃线程数量是如何变化的。
这个工具对于理解和调优你的负载模型非常有帮助,特别是当你在使用复杂的线程模型或者在进行长时间的负载测试时。例如,你可以用它来观察线程的启动速度、线程的持续时间、线程的结束速度等等。
需要注意的是,要使用这个插件,你需要先下载并安装JMeter Plugins。安装完成后,你可以在JMeter的监听器菜单中找到"jp@gc - Active Threads Over Time"选项。
jp@gc - PerfMon Metrics Collector
"jp@gc - PerfMon Metrics Collector"是JMeter的一个插件,它允许你收集并可视化各种系统性能指标,如CPU使用率、内存使用情况、磁盘I/O、网络I/O等。这个插件可以帮助你更好地理解系统在负载测试期间的性能表现。
要使用这个插件,你需要先在要监控的系统上启动一个ServerAgent,这个ServerAgent会收集系统的性能数据并发送给JMeter。你可以在JMeter中添加一个"jp@gc - PerfMon Metrics Collector"监听器,并配置它连接到ServerAgent,这样你就可以在JMeter中看到系统的性能数据了。
在"jp@gc - PerfMon Metrics Collector"监听器中,你可以选择要收集的性能指标,如CPU、内存、磁盘、网络等。你也可以选择数据的采集频率,以及如何显示数据(例如,你可以选择以图表的形式显示数据)。
请注意,要使用这个插件,你需要先下载并安装JMeter Plugins。安装完成后,你可以在JMeter的监听器菜单中找到"jp@gc - PerfMon Metrics Collector"选项。
使用 jp@gc - PerfMon Metrics Collector插件进行收集系统性能并先下载zip包ServerAgent-2.2.3.zip
链接:https://pan.baidu.com/s/1wKT4v8y4EqIIYzyLbOgvHA?pwd=hnsz
提取码:hnsz
通过shell客户端访问后台服务器地址。新建文件夹jmeter_test1
mkdir jmeter_test1 # 创建文件夹
ls # 查看
如图:
从Windows上传ServerAgent-2.2.3.zip包。如图:
输入命令 unzip ServerAgent-2.2.3.zip。如图:
进入ServerAgent-2.2.3文件夹./startAgent.sh
授权最高权限 chmod 777 startAgent.sh,再次./startAgent.sh 。如图:
注意:再启动startAgent.sh时需要依赖环境java,最后和你当前本地主机java版本一致
输入:apt search openjdk。如图:
输入sudo apt install openjdk-8-jdk。如图
输入java -vesion.如图:
这样就启动成功了,jp@gc - PerfMon Metrics Collector就可正常收集系统性能信息
注意。这里的IP是默认localhost本机地址。一定要改成你监控的服务IP地址。
这些指标都是用来评估和监控计算机系统性能的重要参数:
-
CPU(Central Processing Unit):这是计算机的主要处理部分,负责执行大部分计算和逻辑操作。CPU使用率是一个重要的性能指标,它表示CPU正在执行任务的时间占总时间的比例。如果CPU使用率一直很高,那可能意味着你的系统正在运行一些计算密集型的任务,或者有一些程序占用了过多的CPU资源。
-
Memory:这是计算机的主要存储部分,用于存储正在运行的程序和数据。内存使用率是一个重要的性能指标,它表示已使用的内存占总内存的比例。如果内存使用率一直很高,那可能意味着你的系统正在运行一些内存密集型的任务,或者有一些程序占用了过多的内存资源。
-
Disks I/O(Input/Output):这是计算机读写磁盘的操作。磁盘I/O的速度直接影响到数据的读取和写入速度,因此也是一个重要的性能指标。如果磁盘I/O速度慢,那可能会导致数据的读取和写入速度慢,影响到系统的性能。
-
Network I/O:这是计算机进行网络通信的操作。网络I/O的速度直接影响到数据的上传和下载速度,因此也是一个重要的性能指标。如果网络I/O速度慢,那可能会导致数据的上传和下载速度慢,影响到系统的性能。
-
Swap:Swap 是一种虚拟内存技术,当物理内存不足时,操作系统会将一部分内存中的数据移动到硬盘上的 Swap 区域,以释放出更多的物理内存。如果系统频繁地使用 Swap,那可能意味着物理内存不足,需要增加物理内存或优化内存使用。
-
TCP:TCP(Transmission Control Protocol)是一种网络通信协议,用于在网络上发送和接收数据。通过监控 TCP,你可以了解网络的状态,比如连接的数量、数据的传输速度等。