Jmeter 压测接口编写指北

电商领域中, 每到各种活动, 什么 618, 双十一, 双十二, 各种优惠活动就纷至沓来, 对营销工具是一个巨大的挑战, 因此, 营销相关系统的压测是保障系统稳定运行,应对突发流量的必要手段.

优惠券系统作为营销工具中的一种大杀器, 其稳定性保障必不可少.

下面主要介绍我负责的优惠券系统在应对双十一突发流量的压测过程:

1. 压测前准备

下载 压测工具: Jmeter

提前统计好每个要压测接口的数据: 日常QPS, 99线, 双十一预估QPS

压测线程数计算: 1000/接口99线 x 线程数 = 目标QPS

日常QPS:系统非活动时的 QPS, 去系统监控大盘查看, 如 cat
99线: 99% 的请求耗时(ms)
双十一预估QPS: 每个公司规定不同, 我司是日常 QPS 的 50-100 倍,根据接口业务场景选择
线程数: 压测中在 Jmeter 中填写的线程数

启动 jmeter

$ jmeter                                                                                                                                                         [10:17:24]
WARNING: package sun.awt.X11 not in java.desktop
================================================================================
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
================================================================================

由 jmeter 启动信息可知,我们应该使用 GUI 编写压测脚本, 用命令行 jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder] 进行压测

Jmeter 的基本使用去晚上找个demo案例,亲自操作一番即可, 下面我主要介绍生产级别的 Jmeter 脚本编写

Jmeter 脚本编写

新建一个文件夹: testplan

打开 jmeter ,

语言体调整为中文, options -> choose Language -> chinese

创建 testplan:

img

保存到 我们 创建的 testplan 文件夹

image-20211019110654135

右键添加 HTTP 请求默认值

image-20211019110928389

填写你的压测环境, 一般脚本测试使用 test 环境

image-20211019111049633

添加 JSON 断言: 当响应 code 为 10000 时为成功

image-20211019111208486

根据你的系统请求参数,添加 相应的请求头: HTTP信息头管理器

image-20211019111340456

添加: 聚合报告: 可以查看 接口压测信息

image-20211019111503938

做完上面的通用步骤, 接下来就开始真正的接口压测了:

testplan 上右键,添加 线程组, 线程组的概念可以理解为一个具体测压测接口, 包括请求地址, 参数, 线程数,都在这里面设置

image-20211019111806006

线程数: 根据上面的计算公式,自己计算

Ramp_Up: 在 10秒内逐步启动 100 个线程

持续时间: 防止压测接口一直执行, 定个 持续时间

添加HTTP 请求

image-20211019112057573

重点关注下: ${calcReceivedPromotionForProductList}这个就是我们的请求参数集, 因为压测我们要尽量模拟真实的用户请求, 一个方法就是 从线上日志中, 拉出一批请求,保存再文件中, 让压测接口去读取, 而 ${calcReceivedPromotionForProductList} 就是我们从线上拉取的请求参数. 下面介绍下,如何添加这个请求参数集

添加: CSV 数据文件设置

image-20211019112509396

在我们的 testplan 文件夹中创建 文件夹: requests, 然后新建: calcReceivedPromotionForProductList-test.txt 文件,里面就是请求参数,我这里使用换行分割

image-20211019112656990

请求参数编写完成, 还要再添加一个 观察结果树, 用来查看压测时每个接口的响应情况, 包括出入参等:

image-20211019112825711

至此, 一个压测接口就编写完成,我们点击 Jmeter 菜单栏上的额启动按钮,测试下并查看聚合报告

image-20211019113041865

我这里写了两个线程组, 也就是两个接口, 可以按照上面的步骤,添加你自己需要的压测接口

线上压测

根据 Jmeter 的建议,线上压测,我们不能使用 GUI, 需要使用命令行.

那我们上面的压测接口举例, 我们 Jmeter 命令执行如下:

jmeter -n -t ./优惠券-lzg.jmx -l ./result/result.txt -e -o ./webreport

优惠券-lzg.jmx 为测试计划文件路径
/result/result.txt 为测试结果文件路径
/webreport 为web报告保存路径。

注意我们的文件夹: testplan 下执行此命令, 里面用到的 文件我们都是使用 相对文件位置,这样做的好处是,我们可以直接把 testplan 文件夹打为一个压缩包,上传到我们的跳板机去执行压测请求

image-20211019113551571

命令行进入 testplan 文件夹下,执行

image-20211019113844109

可以看到 testplan 文件夹下多了一个 测试报告

image-20211019113923449

双击打开就能在浏览器中查看此次压测结果

image-20211019114026691

至此, 一个线上的压测接口的编写已经介绍完成, Jmeter 还有一些更高级的功能, 感兴趣的可以去官网看其介绍.

猜你喜欢

转载自blog.csdn.net/itguangit/article/details/120843283