You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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

火山引擎 最新活动