简介:面向性能测试工程师与运维人员的 Apache JMeter 2.11 版本压缩包,用于快速开展 Web 应用的负载与压力测试,帮助验证系统在高并发场景下的稳定性和响应速度。压缩包约 30.49MB,包含启动脚本、依赖库、使用文档、源码及测试用例等核心模块,解压配置后即可搭建基础压测环境,省去自行收集安装的麻烦。JMeter 支持 HTTP、FTP、SMTP、JDBC 等多种协议,可通过图形界面或命令行运行;配合线程组、断言、定时器、监听器等组件,可模拟成千上万并发用户,并基于聚合报告分析响应时间、吞吐量、错误率等关键指标。包内文件组织直观,学习者可借此熟悉性能测试工具的标准目录结构与扩展方式,开发者也能直接查阅源码理解实现细节。已有151人浏览或学习,对需要快速掌握 JMeter 部署、脚本编写与结果解读的读者尤为实用。 「jmeter-2.11.zip」这个名字,在测试圈子里出现的频率比很多人想象得高。搜一下就能发现,老教程、老环境、运维交接文档、面试题里,到处都是它的影子。这个zip包说白了就是JMeter 2.11的绿色解压版,没有安装向导,解压就能用。今天这篇就用这个具体版本聊透两件事:怎么把它跑起来,以及真正用起来之后会遇到哪些坑。
1. 为什么是jmeter-2.11.zip:版本定位与选型
1.1 2.11这个版本到底是什么来头
JMeter 2.11发布于2014年下半年,属于JMeter 2.x时代比较成熟的一个版本。它的主要价值在于:兼容JDK 6/7,体积小,启动快,核心压测功能齐全。虽然现在JMeter已经出到5.x甚至更高版本,但很多老旧项目的自动化回归脚本、面试题库里的默认配置、培训机构的老教程,都还停留在2.11这个版本上。所以你在下载站、网盘、公司内部知识库里看到jmeter-2.11.zip,非常正常。
这个版本也是最“朴素”的JMeter。没有后来3.0之后的Dashboard Report(就是直接生成HTML报告那个功能),没有内置的JSON Extractor,后端监听器Backend Listener也要到2.13才开始出现。换句话说,很多新版本里“开箱即用”的东西,在2.11里需要自己动手补,或者借助插件。
1.2 zip包形态有什么优势
我见过不少人问:JMeter官网明明有安装包,为什么非要用zip压缩包?其实zip包就是官方发布的一种分发形式,它和exe安装包没有本质区别,甚至更省事。
- 不需要管理员权限:解压到用户目录就能跑,适合公司电脑权限受限的场景。
- 方便多版本共存:解压两份2.11和5.6,互不干扰。做版本兼容性测试时特别有用。
- 迁移成本低:整个目录拷走,换台机器照样用,不需要重新安装。
- 便于排查问题:JMeter本身的运行日志、证书文件、配置文件都在同一个目录下,出了问题一目了然。
如果你的环境对“干净”有要求,zip解压版反而是最合适的选择。
1.3 哪些场景选2.11,哪些场景建议换新版
先泼一盆冷水:如果你的项目没有任何历史包袱,我建议直接上最新稳定版。新版本在性能采集、HTML报告、JSON处理、WebSocket协议支持上都比2.11强太多。
但下面这些场景,2.11依然有存在的意义:
- 公司生产环境限定了JDK版本,只能用JDK 7运行,JMeter新版本对JDK 8+都有要求,2.11反而是能跑起来的那一个。
- 历史脚本就是用2.11录制的,包含了大量旧版插件和特殊配置,强行升级需要额外改脚本。
- 面试或培训场景里,很多教材基于2.11讲解,你需要一个能对照操作的版本。
场景决定选型,不要为了“新”而新,也不要为了“老”而老。
2. 安装与启动:把zip包变成能用的JMeter
2.1 先解决JDK版本和JAVA_HOME
jmeter-2.11.zip解压后的目录里没有JRE,它需要外部的JDK才能运行。2.11对JDK的要求是6以上,实测最稳定的是JDK 7和JDK 8早期版本。如果你用的是JDK 9以上的高版本,大概率会遇到类加载问题或者某些组件无法使用,所以稳妥起见,给2.11配一个JDK 8。
环境变量配置很简单,以Windows为例:
- 安装JDK 8,记住安装路径,比如
C:\Program Files\Java\jdk1.8.0_202。 - 新建系统变量
JAVA_HOME,值填上面对路径。 - 在
Path变量里追加%JAVA_HOME%\bin。 - 打开命令行,输入
java -version,看到版本号说明环境变量生效。
这里有个容易踩的坑:如果你电脑上装了多个JDK,一定要确认java -version输出的版本和你预期一致。很多时候JMeter启动报错,不是JMeter本身的问题,而是JAVA_HOME指向了错误的JDK。
2.2 解压结构与启动命令
下载jmeter-2.11.zip后切忌直接双击压缩包看文件,要把整个压缩包解压出来,建议路径不要带中文和空格,比如D:\tools\apache-jmeter-2.11。
解压后的核心目录如下:
bin:启动脚本、配置文件、证书文件都在这。lib:JMeter运行依赖的所有JAR包,包括插件的存放位置。docs:本地离线文档。extras:辅助脚本,比如Ant相关工具。printable_docs:可打印的PDF版文档。
在Windows环境双击bin\jmeter.bat启动GUI;Linux或Mac环境在命令行执行bin/jmeter.sh。
启动后如果看到JMeter的图形界面,说明安装成功。如果只是闪一下窗口就消失,大概率是JAVA_HOME没配好,或者JDK版本不兼容。在命令行手动执行jmeter.bat,能看到具体的报错信息,方便定位问题。
2.3 首选项配置:中文界面、编码、内存
2.11默认是英文界面。想改成中文,打开bin\jmeter.properties,找到这一行:
language=en改成:
language=zh_CN然后重启JMeter,界面就变中文了。注意这个文件里还有大量配置项,修改前建议先备份。
还有两个必改项。第一个是编码,2.11默认采样器结果编码是ISO-8859-1,如果接口返回中文,结果树里会乱码。在jmeter.properties里找到sampleresult.default.encoding,改成UTF-8。第二个是内存,修改bin\jmeter.bat里的HEAP参数,默认是-Xms512m -Xmx512m,并发线程多的时候建议改成-Xms1024m -Xmx1024m。
3. 用2.11完整跑一遍压测流程
3.1 最小脚本:线程组、HTTP请求、结果树、聚合报告
第一次上手不需要搞太复杂,核心链路就四样组件:测试计划、线程组、HTTP请求、监听器。
线程组负责模拟用户数量。右键测试计划,添加-线程-线程组,里面有三个关键参数:
- Number of Threads (users):线程数,代表多少个并发用户。
- Ramp-Up Period (in seconds):启动所有线程所需时间。比如10个线程5秒内启动,就是每秒2个。
- Loop Count:每个线程循环执行的次数。
建议勾选“调度器”,设置持续压测时间,避免脚本无限跑下去。
HTTP请求部分,协议、服务器名称或IP、端口、方法、路径填好。如果接口需要GET请求参数,可以直接把参数加到请求URL后面,也可以在下方的Parameters区域填写。热词里有人问“get请求中的参数随机取值”,最简单的方式是用${__Random(1,100)}函数,比如page=${__Random(1,100)},每次请求就会随机取值。
监听器里最常用的是“查看结果树”和“聚合报告”。结果树适合调试脚本,能看每个请求的请求头和响应体;聚合报告适合压测后看统计数据,包括平均响应时间、中位数、吞吐量、错误率。
注意一点:正式压测时不要开着GUI和结果树监听器,它们会吃掉大量内存,影响压测结果。正确的做法是命令行压测,后面会说。
3.2 参数化文件:CSV Data Set Config的正确用法
接口压测很少用写死的参数,更多是从文件里读取数据。这里用CSV Data Set Config。
准备一个test.csv文件,内容如下:
username,password user01,pass123 user02,pass456在测试计划里右键线程组-添加-配置元件-CSV Data Set Config:
- Filename:填CSV文件的绝对路径。
- Variable Names:填
username,password,用逗号分隔。 - Delimiter:默认逗号。
- Recycle on EOF:读完文件后是否循环。如果压测需要全部数据只跑一遍,选False。
- Stop thread on EOF:读完文件后是否停止线程。
然后在HTTP请求的参数值里写${username}、${password},JMeter每次迭代会从CSV里取一行。这里有个经典坑:CSV文件编码必须是UTF-8,否则中文参数会出现乱码;另外绝对路径在Windows下要写D:/data/test.csv或D:\\data\\test.csv,别用单反斜杠。
3.3 模拟登录后跑查询接口:Cookie与Token提取
热词里有“jmeter模拟登录后同时跑5个线程跑查询接口”,这是很典型的登录态维护问题。
第一步,在线程组下添加“HTTP Cookie管理器”,右键线程组-添加-配置元件-HTTP Cookie管理器。这样登录接口返回的Set-Cookie会被自动保存,后续查询接口自动带上。
如果登录接口返回的是Token而不是Cookie,就需要手动提取。登录接口的响应通常是JSON,例如:
{ "code": 0, "token": "abc123xyz" }2.11版本里没有高版本那种JSON Extractor,我的做法是用“正则表达式提取器”。右键登录请求-添加-后置处理器-正则表达式提取器,配置:
- Apply to:Main sample only。
- Reference Name:填
token。 - Regular Expression:填
"token":"(.*?)"。 - Template:填
$1$。
这样后续接口就能用${token}引用登录返回的token。如果接口要求把token放到Header里,再添加一个HTTP Header Manager,新增一行Authorization: Bearer ${token}。
5个线程并发跑查询接口的配置很简单,线程组里线程数填5,Ramp-Up填0或2,循环次数按需配置。但要注意,如果5个线程共用同一个登录token,其实模拟的是5个并发请求共享一个会话,不是真实的多用户并发。更严谨的做法是每个线程独立登录,这样更接近真实场景。
3.4 命令行压测与报告生成
GUI模式跑压测只是用来调试脚本,真正的压测要用命令行模式。2.11的命令行压测命令如下:
jmeter -n -t test.jmx -l result.jtl -j log.txt解释一下:
-n:非GUI模式。-t:指定jmx脚本文件。-l:输出结果文件,格式是jtl。-j:日志文件。
有同学问“jmeter能出测试报告吗”,答案是分版本。2.11不能像新版本那样用-e -o直接生成HTML报告,只能在压测结束后打开GUI,在聚合报告里点击“Browse”按钮加载result.jtl查看结果。想要好看的HTML报告,可以借助JMeterPlugins的CMDRunner工具,或者干脆把结果数据导到InfluxDB+Grafana展示。但如果你用2.11还想要开箱即用的HTML报告,说实话更建议升级新版。
4. 和zip、JAR“缠斗”的排障经验
4.1 “invalid zip archive: could not find eocd”到底怎么回事
这个报错是热词里出现频率最高的一个:caused by: invalid zip archive: could not find eocd。它背后的原理不复杂,EOCD(End Of Central Directory)是zip文件末尾的一个记录块,解压程序靠它来定位整个压缩包的目录结构。如果找不到EOCD,说明这个文件根本不是一个完整的zip。
常见原因和对应解法:
- 下载不完整:文件还没下载完就解压,或者下载中途断线。重新下载,比对文件大小是否和官方一致。
- 文件被伪装:有些网站懒得传zip,直接把一个别的格式文件改名成zip。用7-Zip打开看真实格式,或者用文件识别工具判断。
- 磁盘或内存问题:压缩包在传输过程中损坏,尝试用7-Zip的“修复压缩文件”功能,或者重新下载。
- 分卷包没下全:如果原始文件是分卷压缩的,只下载了第一个分卷就解压,同样会报这个错。
这类报错不仅出现在JMeter安装包上,OTA刷机包、Android固件zip、R语言包下载时都很常见。排查思路一模一样,先把文件完整性验了。
4.2 解压乱码、分卷z01、rar转zip的处理
热词里有用户说“zip包用306压缩软件解压后,韩文命名的文件显示乱码”,这本质是编码问题。zip压缩包里的文件名编码由压缩时使用的工具决定,Windows自带压缩和解压工具通常走本地编码,第三方工具往往默认UTF-8。解压乱码时,优先换用7-Zip或Bandizip这类支持自动识别编码的工具,解压时手动切换编码格式,一般能解决。
分卷压缩的问题也很典型:提示必须有下列压缩分卷z01。这是分卷包不完整导致。把所有分卷文件下载完整,文件名顺序不能乱,放在同一个目录,然后解压part1或.001文件,解压软件会自动寻找后续分卷。
至于“rar怎么转换zip”,直接用7-Zip或WinRAR打开rar文件,选择解压到目录,再选中解压出来的文件重新压成zip。不需要依赖任何在线转换工具,本地操作又快又安全。
4.3 JAR损坏与“jar manifest missing”
JMeter启动或加载插件时报错error opening zip file or jar manifest missing : dac-agent.jar,这类问题通常是lib目录下的jar包损坏或缺失。
我遇到过的场景是:压缩包从旧服务器拷贝到新电脑时,个别jar文件丢失,或者杀毒软件误删了某些jar。排查步骤很简单:
- 打开
lib目录,确认报错提到的那几个jar文件是否存在。 - 如果存在,用7-Zip打开jar文件,看能否正常读取内部结构。jar本质就是zip,打不开说明文件损坏。
- 损坏的jar从原压缩包里重新提取覆盖,或者把整个lib目录还原一次。
另外,JMeter 2.11的插件安装路径同样是lib目录,和JMeter本身的jar混在一起。装上不兼容的插件也容易出现manifest missing,这时候排查顺序是:先移除最近安装的插件jar,再考虑环境损坏。
5. HTTPS证书与安卓模拟器抓包
5.1 电脑端HTTPS证书导入
JMeter在录制或访问HTTPS接口时,最麻烦的就是证书问题。2.11版本启动后,在bin目录下会生成一个ApacheJMeterTemporaryRootCA.crt,这就是JMeter的根证书。
双击证书文件,点击“安装证书”,选择“本地计算机”,然后手动把证书放入“受信任的根证书颁发机构”。注意一定要选“受信任的根证书颁发机构”,选到其他区域会导致HTTPS请求仍然报证书错误。安装完重启浏览器和JMeter,再访问HTTPS接口应该就不报SSL握手异常了。
有同学说证书导入后仍然失败,先检查系统时间。电脑时间不准确会导致证书有效期校验失败,这是最容易被忽视的原因。
5.2 安卓模拟器抓App接口步骤
“jmeter抓取安卓模拟器的app接口”是热词里的高频需求。思路很简单:让模拟器的流量走JMeter代理,JMeter记录下所有请求。
具体步骤:
- 在JMeter里添加HTTP代理服务器:测试计划-添加-非测试元件-HTTP代理服务器,端口填8888。
- 把
ApacheJMeterTemporaryRootCA.crt传到模拟器里,安装到系统证书。安卓7+对用户证书有限制,可能需要刷入系统证书或者用支持旧版系统的模拟器,这一点容易卡很久。 - 打开模拟器的WiFi设置,长按当前连接的WiFi,修改代理,手动填写电脑的局域网IP和端口8888。
- 在JMeter代理服务器页面点“开始”,然后在模拟器里操作App,请求就会被录制下来。
录制完成后,代理服务器会自动生成对应的HTTP请求脚本。需要注意的是,模拟器里的App和电脑必须在同一局域网,不然代理根本连不上。
6. 常见问题速查表与一点使用习惯
6.1 高频问题速查
我把操作中经常遇到、以及热词里反复出现的问题整理成一张表,方便你定位问题:
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| JMeter启动没反应/闪退 | JAVA_HOME未配置或指向错误JDK | 检查java -version,重配环境变量 |
| 界面空白或字体异常 | JDK版本过高 | 换用JDK 8 |
| 响应中文乱码 | 采样器编码不是UTF-8 | 改jmeter.properties里的sampleresult.default.encoding=UTF-8 |
| 接口请求403/证书错误 | 证书未正确安装 | 按第5节方法重新导入受信任根证书 |
| CSV参数读取不到 | 文件路径错误或编码不对 | 用绝对路径,文件统一UTF-8编码 |
| 登录后查询接口401 | Token未提取或Header未传 | 检查正则提取器和Header Manager配置 |
| 压测时GUI卡死 | 内存不足或监听器开太多 | 改用命令行模式,关闭多余监听器 |
| 安装包解压报could not find eocd | 下载不完整或文件损坏 | 重新下载,比对文件大小,用7-Zip修复 |
| JAR包报manifest missing | lib目录jar损坏或缺失 | 重新解压原包,覆盖lib目录 |
6.2 用2.11养成的好习惯
最后分享几个我吃了亏之后才养成的习惯。第一,不管是jmeter-2.11.zip还是别的工具包,下载完先核对文件大小,再去解压,能省掉一半的“invalid zip archive”问题。第二,JMeter脚本里尽量用相对路径或者JMeter变量管理外部文件,不然换一台机器跑脚本就要改一堆路径。第三,压测脚本调试阶段用GUI,正式压测永远用命令行,并且开单独的日志文件,这样出了问题有据可查。
2.11虽然老,但把它的基础操作吃透后,你会发现新版本的上手难度也会降低很多。那些围绕zip压缩包的坑,也远不止JMeter一个场景会遇到,学会看报错、验证文件完整性、查编码问题,以后碰到类似情况都能顺手解决。
本文还有配套的精品资源,点击获取