最近接了个新项目,整个人都处于非常忙碌的状态。但是学习、复盘才会使人进步,所以还是要抽出时间来学习新的、有趣的知识。对接的测试小姐姐,使用 jmeter 帮忙压测了下供应商的服务在被限流之后的行为是什么?
虽然自己写脚本也能完成并发的压测,但是最后总结的压测结果数据不如 jmeter 的广泛和全面,所以趁着时间允许,来研究一波 jmeter 的使用吧。
Jmeter 下载地址 https://dlcdn.apache.org//jmeter/binaries/,笔者当时下载的是 5.4.1 的版本,总体的执行命令包括
选择需要 jmeter 的版本,太新的话可能网上介绍的文档不多
将下载好的 jmeter 服务压缩包移动到合适的目录 mv ~/Downloads/apache-jmeter-5.4.1.tgz .
解压缩 tar -zxvf apache-jmeter-5.4.1.tgz
切换到解压缩后的目录 cd apache-jmeter-5.4.1 && ./bin/jmeter.sh,然后就会收获一个 GUI 版本的 jmeter 界面

注:Jmeter 要求安装 Java,所以安装 Jmeter 时,请确认已经安装了要求的 Java 版本
Jmeter 的使用网上已经有了比较详细的介绍,此处仅介绍几个笔者觉得用起来很方便的示例。先说一下背景,要测试的接口是一套 http 接口。类似如下能力:
右键添加 -> 配置元信息进行选择

用于配置请求的协议、地址、端口等信息

用于增加 http header 的通用配置信息。




配置用户参数
用此方法配置的用户参数为整个线程组均可以使用,如果想要配置仅 http 方法可以使用的用户参数,右侧点击 acquire 请求测试,增加配置元件 -> 用户定义的变量即可



根据前述的背景描述,笔者需要从 acquire 的响应 body 值中读取 token,然后将 token 作为参数给 start 请求使用。
不需要将 token 存储,直接在后续的请求中使用,添加一个正则表达式处理器。步骤为点击添加 -> 后置处理器 -> 正则表达式处理器

在 start 的 http 请求中,直接使用定义的变量 o_tokenName。

方案二比较复杂,需要将 token 先写入文件,然后 start 的时候在从文件中读取。此方案的好处是方便用户后续排查问题
需要增加 BeanShell 后置处理程序,将 token 写入文件

参考的写入文件脚本:
FileWriter fstream = new FileWriter("/Users/ly/Desktop/acquire", true);
BufferedWriter out = new BufferedWriter(fstream);
out.write("${o_tokenName}"+"\n");
out.close();
fstream.close();
增加 CSV 文件设置,用于从文件中读取 token,参考的配置如下

Jmeter 提供了方便的结果分析功能,用户可以选择增加「察看结果树」和「聚合报告」
(ps: 思考,感觉这里的察,应该是汉化版本翻译有问题


真是非常忙碌并且一步一个坑的一个月,即 PE 多配置了一个字符之后,笔者又踩了一个配置漏发两台机器的问题。哎,还好心脏强大一些,不然真原地爆炸了。