图文详解压力测试工具JMeter的安装与使用

简介: 压力测试是目前大型网站系统的设计和开发中不可或缺的环节,通常会和容量预估等工作结合在一起,穿插在系统开发的不同方案。压力测试可以帮助我们及时发现系统的性能短板和瓶颈问题,在这个基础在上再进行针对性的性能优化,也可以帮助我们预估系统的承载能力,使我们能根据其做出一些应对措施。

压力测试是目前大型网站系统的设计和开发中不可或缺的环节,通常会和容量预估等工作结合在一起,穿插在系统开发的不同方案。压力测试可以帮助我们及时发现系统的性能短板和瓶颈问题,在这个基础在上再进行针对性的性能优化,也可以帮助我们预估系统的承载能力,使我们能根据其做出一些应对措施。

JMeter简介

JMeter是一个使用Java开发的Apache开源软件,用于软件的性能评估和压力测试。它最初是为测试Web应用程序而设计的,但此后又扩展到其他测试功能。

JMeter可用于静态和动态资源、Web动态应用程序的性能测试,例如:HTTP、 HTTPS、LDAP、TCP、FTP、SMTP、POP3、IMAP、Shell脚本、数据库、Java 对象,也可以用于对服务器、服务器组、网络或对象上的巨大负载,以测试在不同强度的压力测试下它们的强度和整体性能。

另外,JMeter还可以对应用程序做功能回归测试,通过创建带有断言的脚本来验证你的程序是否返回了你期望的结果。为了最大限度的灵活性,JMeter还支持使用正则表达式创建断言。

下载JMeter

访问JMeter的官网:https://jmeter.apache.org/download_jmeter.cgi,下载最新版本的JMeter,如下图:

运行JMeter

在运行JMeter之前,需要安装JDK8,详细安装步骤见图文详解在Windows系统中安装JDK

解压压缩包以后,进入bin目录,双击运行jmeter.bat,首先启动一个CMD窗口,如下图:

然后又启动了JMeter的GUI,如下图:

其中,注意CMD窗口中的提示:

================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

英文看着不是顺畅,作为一个资深暖男给大家翻译一下:

不要使用GUI运行压力测试!GUI仅用于压力测试的创建和调试。执行压力测试使用CLI模式,就是非GUI。使用下面的命令来执行测试:

 jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

并且在批处理文件中修改当前环境变量:

HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"

JMeter默认是英文的,也可以修改为简体中文,通过点击Options->Choose Language进行修改,如下图:

创建第一个压力测试

为了演示写了一个网站,URL为http://127.0.0.1:8080/hello,当QPS大于100时HTTP状态码返回429(使用 Alibaba Sentinel实现 )。

1.添加线程组

右键测试计划,点击添加-->线程(用户)-->线程组,如下图:

设置线程数为10,Ramp-Up时间(秒)为10,循环次数为100,如下图:

线程数:一个用户占一个线程, 10个线程就是模拟10个用户。

Ramp-Up时间(秒): 设置线程需要多长时间全部启动。如果线程数为10 ,准备时长为10 ,那么需要1秒钟启动1个线程。也就是每秒钟启动1个线程。

循环次数:每个线程发送请求的次数。如果线程数为10 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。

2.添加元件

右键线程组,点击添加-->配置元件-->HTTP请求默认值,如下图:

设置协议为HTTP,服务器名称或IP为127.0.0.1,端口号为8080,如下图:

当所有测试的访问域名和端口都一样时,可以使用该元件,一旦服务器地址或端口变更,只需要修改该HTTP请求默认值即可。

3.添加取样器

右键线程组,点击添加-->取样器-->HTTP请求,如下图:

设置请求类型为GET,路径为/hello,如下图:

4.添加响应断言

右键线程组,点击添加-->断言-->响应断言,如下图:

设置测试字段为响应代码,模式匹配规则为相等,测试模式添加200,如下图:

5.添加察看结果树

右键线程组,点击添加-->监听器-->察看结果树,如下图:

6.添加汇总报告

右键线程组,点击添加-->监听器-->汇总报告,如下图:

7.启动压力测试

先点击保存按钮,把测试计划保存起来。然后点击启动按钮,如下图:

测试计划就跑起来了。

8.查看报告

察看结果树,请求成功的,如下图:

察看结果树,请求失败的(QPS过高,被Alibaba Sentinel限流),如下图:

再看一下汇总报告,如下图:

9.执行测试计划

前面提到执行测试计划不能使用GUI,必须使用CLI模式,执行以下命令:

jmeter -n -t ../plan/万猫学社.jmx -l ../plan/result.txt -e -o ../plan/webreport

其中,../plan/万猫学社.jmx为测试计划文件,../plan/result.txt为测试结果文件,../plan/webreport为web报告目录。

执行过程如下图:

最后生成的网页报告如下图:

使用CSV参数化

为了演示对之前的网站进行增强,URL为http://127.0.0.1:8080/hello/{name},其中{name}是一个参数,所以URL可以是http://127.0.0.1:8080/hello/Lucy,也可以是http://127.0.0.1:8080/hello/Lily,同样当QPS大于100时HTTP状态码返回429(也是使用 Alibaba Sentinel实现 )。

1.创建CSV文件

创建一个文本文件,内容为:

1,Alice
2,Eva
3,Jane
4,Lily
5,Lucy

分别为5行,每行分别是id和名称,用英文逗号分隔。然后,对之前的测试计划进行修改。

2.创建CSV Data Set Config

右键线程组,点击添加–>配置元件–>CSV Data Set Config,如下图:

文件名称填入刚刚创建的文件,文件编码选择UTF-8,变量名称输入id,name,分别表示与文本文件中每一行的idname两个变量,如下图:

3.修改HTTP请求

修改之前的HTTP请求中的路径/hello/${name},如下图:

4.查看报告

启动测试计划,可以在察看结果树中看到URL的路径已经被替换了,如下图:

使用HTTP请求参数化

为了演示对之前的网站新增一个接口,URL为http://127.0.0.1:8080/getName,该接口会随机返回上述文本文件中某个名字,返回格式为JSON,例如:

{"id":1, "name":"Alice"}

对之前的测试计划再进行修改:

1.添加HTTP请求

右键线程组,点击添加–>取样器–>HTTP请求,添加一个新的HTTP请求,名称设置为HTTP请求-getName路径设置为/getName。为了区分把之前添加的HTTP请求的名称修改为HTTP请求-hello,如下图:

2.添加JSON提取器

右键HTTP请求-getName,点击添加–>后置处理器–>JSON提取器,如下图:

  • Names of created variables是创建变量的名字,要和HTTP请求-hello的路径/hello/${name}保持一致,所以设置为name
  • JSON Path expressions是需要提取的key,参照getName接口返回的JSON字符串,设置为$.name
  • Match No.是在JSON中同样的key取第几个,这里设置为1。
  • Default Values是没有找到key时的默认值,这里设置为OneMore。

最终配置如下图:

4.查看报告

启动测试计划,可以在察看结果树中看到一次getName返回的name是Lily,如下图:

接下来,调用hello接口时传入的参数就为Lily,所以返回的就是Hello, Lily,如下图:

总结

JMeter的功能很强大,还有很多值得大家继续挖掘的。不过,你如果掌握了本文所讲述的功能,基本上可以应付一般的Web压测了。

相关文章
|
11月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
858 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
11月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
822 6
|
12月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
2198 10
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1676 23
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
监控 Java 数据挖掘
利用Jmeter工具进行HTTP接口的性能测试操作
基础上述步骤反复迭代调整直至满足预期目标达成满意水平结束本轮压力评估周期进入常态监控阶段持续关注系统运转状态及时发现处理新出现问题保障服务稳定高效运作
1383 0
|
数据可视化 测试技术 Go
Go 语言测试与调试:`go test` 工具用法
`go test` 是 Go 语言内置的测试工具,支持单元测试、基准测试、示例测试等功能。本文详解其常用参数、调试技巧及性能测试命令,并提供实际项目中的应用示例与最佳实践。
|
弹性计算 JavaScript Ubuntu
WebSocket协议相关的测试命令工具使用简介
本文介绍了针对WebSocket的测试工具wscat和websocat的基本使用方法,以及通过curl命令测试HTTP/HTTPS协议的方式。对于WebSocket,直接使用curl测试较为复杂,推荐使用wscat或websocat。文中详细说明了这两种工具的安装步骤、常用参数及连接示例,例如在ECS上开启8080端口监听并进行消息收发测试。此外,还提供了curl命令的手动设置头部信息以模拟WebSocket握手的示例,但指出curl仅能作为客户端测试工具,无法模拟服务器。
4136 5
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
2285 24
|
人工智能 数据可视化 测试技术
UAT测试排程工具深度解析:让验收测试不再失控,项目稳稳上线
在系统交付节奏加快的背景下,“测试节奏混乱”已成为项目延期的主因之一。UAT测试排程工具应运而生,帮助团队结构化拆解任务、清晰分配责任、实时掌控进度,打通需求、测试、开发三方协作闭环,提升测试效率与质量。本文还盘点了2025年热门UAT工具,助力团队选型落地,告别靠表格和群聊推进测试的低效方式,实现有节奏、有章法的测试管理。