浅谈Jmeter
什么是Jmeter
JMeter 是 Apache 软件基金会开发的一个开源软件,用于负载测试和性能测试。它被设计用来模拟多种请求到服务器、网络或对象,以测试其性能。JMeter 可以用于测试静态和动态资源,并且可以模拟各种协议的请求,包括但不限于:
- HTTP 和 HTTPS:测试Web应用
- FTP
- SMTP
- IMAP
- JMS
- LDAP
- WebSockets
JMeter 还提供了多种功能,如:
- 多线程测试:能够模拟多个用户同时访问应用程序。
- 测试计划和脚本的保存:可以保存测试计划和脚本,供以后重用。
- 结果分析:提供了多种图表和报表来分析测试结果。
- 插件支持:JMeter 社区提供了许多插件,增强了其功能。
JMeter 适用于开发人员、测试工程师和系统管理员,帮助他们了解应用程序在不同负载下的表现,从而优化性能和稳定性。
运行环境:需要安装JDK8 以上
Jmeter目录
bin:核心可执行文件,包含配置 jmeter.bat: windows启动文件(window系统一定要配置显示文件拓展名) jmeter: mac或者linux启动文件 jmeter-server:mac或者Liunx分布式压测使用的启动文件 jmeter-server.bat:window分布式压测使用的启动文件 jmeter.properties: 核心配置文件 extras:插件拓展的包 lib:核心的依赖包
配置文件修改
bin目录 -> jmeter.properties
语言问题
默认 #language=en
改为 language=zh_CN
响应乱码问题解决
# sampleresult.default.encoding=ISO-8859-1的注释去掉,
改成:sampleresult.default.encoding=UTF-8
PS
-
JMeter 不是浏览器,它在协议级别工作
-
对于 Web 服务和远程服务而言,JMeter 看起来像一个浏览器
-
JMeter 并不执行浏览器支持的所有操作,不像浏览器那样呈现 HTML 页面,不执行 HTML 页面中的 JS
Jmeter5.X核心功能组件+线程组和Sampler
核心功能组件
- 测试计划(Test Plan):这是JMeter测试的起点,所有测试元素都包含在测试计划中。
- 线程组(Thread Group):代表虚拟用户组,可以设置线程数、Ramp-Up 期(启动时间)和测试的循环次数。
- 配置元件(Config Element):用于设置测试环境,如HTTP请求默认值、数据库连接等。
- 前置处理器(Pre Processors):在请求发送前对请求进行修改或添加信息。
- 后置处理器(Post Processors):在请求发送后对响应进行处理。
- 断言(Assertions):用于验证响应结果是否符合预期。
- 监听器(Listeners):用于查看和分析测试结果,如查看请求和响应数据、生成图表等。
- 定时器(Timers):控制请求之间的间隔时间。
- 控制器(Controllers):用于组织Samplers,如逻辑控制器、循环控制器等。
线程组(Thread Groups)
线程组是模拟用户行为的核心组件,以下是其主要功能:
- 名称:线程组的标识。
- 线程数(Number of Threads):模拟的虚拟用户数。
- Ramp-Up 期(Ramp-Up Period):所有线程启动所需的时间,用于平滑启动测试。
- 循环次数(Loop Count):每个线程执行的请求次数,可以设置为永远循环(Forever)。
- 调度器(Scheduler):可以设置测试开始的时间。
Samplers
采样器是实际执行请求的组件,以下是一些常用的Samplers:
- HTTP请求(HTTP Request):用于模拟对Web服务器的请求。
- FTP请求(FTP Request):用于模拟FTP服务器的请求。
- JDBC请求(JDBC Request):用于模拟数据库请求。
- LDAP请求(LDAP Request):用于模拟LDAP服务器的请求。
- JMS点对点(JMS Point-to-Point):用于模拟JMS消息传递。
- WebSocket请求(WebSocket Request):用于模拟WebSocket通信。
- TCP请求(TCP Request):用于模拟TCP协议的请求。
- 自定义Sampler:用户可以编写自定义的Sampler来满足特定需求。
每个Sampler都可以配置具体的请求参数,如URL、方法(GET、POST等)、请求头、请求体等。Sampler执行请求后,会生成响应数据,这些数据可以被后续的监听器捕获并展示。
JMeter 5.x 版本在之前的基础上增加了对现代应用程序的支持,如WebSockets和分布式测试的改进,以及用户界面和性能的优化。使用JMeter进行性能测试时,可以根据测试需求选择合适的组件和配置。
互联网公司高并发业务的Jmeter压测流程痛点
痛点一:本地测试环境与生产环境差异
痛点二:Linux服务器命令行压测配置复杂性
痛点三:JMX脚本和参数化文件管理
痛点四:测试报告生成和存储
痛点五:不同环境下的测试一致性
痛点六:性能优化后的再测试