JMeter批量API请求自动化需求:替代每15分钟手动重复操作
没问题,咱们来一步步把你这套JMeter批量API提交的流程全自动化,再也不用手动复制粘贴啦!以下是针对你需求的具体方案:
自动化JMeter批量API请求提交完整方案
1. 自动生成批量API请求(替代手动RunSwift生成+复制)
首先把你的RunSwift脚本改成自动输出JSON文件的形式,不用再手动复制结果。比如在脚本末尾添加逻辑,把生成的批量请求内容直接写入本地文件(比如batch_requests.json)。这样每次运行脚本就能自动得到待校验的JSON数据。
2. 自动校验JSON格式(替代手动用jsonlint网站校验)
用命令行工具就能完成自动校验,不用再打开网页操作:
- 如果你熟悉Python,写个几行的校验脚本就行:
import json try: with open('batch_requests.json', 'r') as f: json.load(f) print("JSON格式合法,继续执行") except json.JSONDecodeError as e: print(f"JSON格式错误: {str(e)}") exit(1) # 格式错误就终止流程,避免无效请求
- 或者用专门的
jsonlint命令行工具(先通过包管理工具安装),直接执行:
jsonlint batch_requests.json
把这个校验步骤加到生成脚本的后面,只有校验通过才进入下一步。
3. 自动更新JMeter的HTTP请求内容
JMeter的测试计划是.jmx格式的XML文件,咱们可以用脚本自动替换里面的请求体内容:
比如用Python的XML处理模块修改(需要根据你的.jmx结构调整节点路径):
import xml.etree.ElementTree as ET # 加载你的JMeter测试计划 tree = ET.parse('your_test_plan.jmx') root = tree.getroot() # 找到HTTP请求的请求体节点(先打开你的.jmx文件确认节点路径) for sampler in root.findall(".//HTTPSamplerProxy"): body_node = sampler.find(".//stringProp[@name='HTTPSampler.postBodyRaw']") if body_node is not None: # 读取校验后的JSON内容 with open('batch_requests.json', 'r') as f: new_body = f.read() body_node.text = new_body # 保存修改后的测试计划 tree.write('updated_test_plan.jmx', encoding='utf-8', xml_declaration=True)
注意:不同的JMeter版本.jmx结构可能略有不同,你可以先打开自己的测试计划文件,找到请求体对应的XML节点,调整上面的XPath路径。
4. 定时自动执行整个流程(每15分钟提交3-4批)
有两种主流方式实现定时+批量执行:
方式一:用操作系统定时任务(推荐,更灵活)
- Windows:打开「任务计划程序」,创建一个新任务,触发条件设为「每15分钟」,操作选择「启动程序」,指向一个批处理脚本(比如
run_batch_api.bat):
@echo off :: 1. 运行RunSwift脚本生成请求 swift your_runswift_script.swift :: 2. 校验JSON格式 python validate_json.py if %errorlevel% neq 0 exit /b 1 :: 3. 更新JMeter测试计划 python update_jmx.py :: 4. 执行3-4批请求(循环3次就改{1,1,3}) for /l %%i in (1,1,4) do ( jmeter -n -t updated_test_plan.jmx -l result_%%i_%%date:~0,4%%%%date:~5,2%%%%date:~8,2%%_%%time:~0,2%%%%time:~3,2%%.jtl )
- Linux/macOS:用
cron定时任务,编辑crontab:
*/15 * * * * /bin/bash /path/to/run_batch_api.sh
脚本run_batch_api.sh内容:
#!/bin/bash # 1. 生成请求 swift your_runswift_script.swift # 2. 校验JSON python3 validate_json.py if [ $? -ne 0 ]; then exit 1 fi # 3. 更新JMX python3 update_jmx.py # 4. 执行3-4批请求 for i in {1..4}; do timestamp=$(date +%Y%m%d_%H%M) jmeter -n -t updated_test_plan.jmx -l result_${i}_${timestamp}.jtl done
方式二:用JMeter内部组件实现
如果不想依赖外部脚本,也可以在JMeter里搞定:
- 添加循环控制器,设置循环次数为3-4,对应每批请求的提交次数;
- 添加JSR223 PreProcessor(推荐用Groovy语言),在里面调用你的生成逻辑读取JSON文件,把内容赋值给HTTP请求的变量(比如
${batch_request_body}),然后在HTTP请求的请求体里引用这个变量; - 添加调度器到线程组,设置测试计划每15分钟运行一次。
额外优化小建议
- 把生成、校验、更新的步骤整合到一个Makefile里,执行更简洁;
- 如果每次批量请求的参数有差异,可以在RunSwift脚本里加入动态参数生成逻辑,不用手动修改脚本;
- 给JMeter的结果文件加上时间戳,方便后续排查问题。
内容的提问来源于stack exchange,提问作者mani9697




