1. 写在最前面
最近接了个新项目,整个人都处于非常忙碌的状态。但是学习、复盘才会使人进步,所以还是要抽出时间来学习新的、有趣的知识。对接的测试小姐姐,使用 jmeter 帮忙压测了下供应商的服务在被限流之后的行为是什么?
虽然自己写脚本也能完成并发的压测,但是最后总结的压测结果数据不如 jmeter 的广泛和全面,所以趁着时间允许,来研究一波 jmeter 的使用吧。
2. Jmeter 安装
Jmeter 下载地址 dlcdn.apache.org//jmeter/bin…,笔者当时下载的是 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 版本
3. Jmeter 使用
Jmeter 的使用网上已经有了比较详细的介绍,此处仅介绍几个笔者觉得用起来很方便的示例。先说一下背景,要测试的接口是一套 http 接口。类似如下能力:
- acquire :获取 token,请求 body 中需要填写可变参数,token 返回在响应的 Body 中
- start :拿着获取的 token 发起 start 请求,请求 body 中需要填写可变参数,此步骤类似启动一个任务,会在响应的 Body 返回一个 taskId
- query:拿着获取的 taskId 和 token 查询任务
- stop :拿着获取的 taskId 和 token 停止任务
3.1 增加 http 请求的基本信息
右键添加 -> 配置元信息进行选择
3.1.1 增加 HTTP 请求的默认值
用于配置请求的协议、地址、端口等信息
3.1.2 增加 HTTP 信息头管理器
用于增加 http header 的通用配置信息。
3.2 增加 http 接口测试
3.2.1 增加线程组
3.2.2 增加 http 接口的访问
3.2.3 配置 http 请求的参数
-
jmeter 内置了很多函数,具体参考 jmeter.apache.org/usermanual/…,此处使用 __Random,eg ${__Random(0,10)}
-
配置用户参数
用此方法配置的用户参数为整个线程组均可以使用,如果想要配置仅 http 方法可以使用的用户参数,右侧点击 acquire 请求测试,增加配置元件 -> 用户定义的变量即可
-
配置 http post 的 body
-
增加接口返回值的断言
3.3 http body 参数读取写入
根据前述的背景描述,笔者需要从 acquire 的响应 body 值中读取 token,然后将 token 作为参数给 start 请求使用。
3.3.1 方案一
不需要将 token 存储,直接在后续的请求中使用,添加一个正则表达式处理器。步骤为点击添加 -> 后置处理器 -> 正则表达式处理器
在 start 的 http 请求中,直接使用定义的变量 o_tokenName。
3.3.2 方案二
方案二比较复杂,需要将 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,参考的配置如下
3.4 结果分析
Jmeter 提供了方便的结果分析功能,用户可以选择增加「察看结果树」和「聚合报告」
3.4.1 察看结果树展示
(ps: 思考,感觉这里的察,应该是汉化版本翻译有问题
3.4.2 聚合报告的展示
4. 碎碎念
真是非常忙碌并且一步一个坑的一个月,即 PE 多配置了一个字符之后,笔者又踩了一个配置漏发两台机器的问题。哎,还好心脏强大一些,不然真原地爆炸了。
- 所谓解放,就是我们不再依赖,也不再等待,我们可以独自去面对最苦最痛的人生。
- 为什么非要活成世俗眼中所谓正常的样子,都是几十年,过完就没了。
- 你凭什么认为有人会拉你一把,摔倒了不自己爬起来,等着别人去踩吗?
5. 参考资料
\