You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins性能插件:任务中止后如何成功生成性能报告?

解决Jenkins中止压力测试后Performance插件找不到JTL文件的问题

以下是几种实用的解决思路,按从根源修复到临时适配的顺序排列:

1. 让JMeter实时写入JTL文件(推荐)

默认情况下JMeter会缓冲测试结果,批量写入JTL文件,中止任务时缓冲数据还没刷到磁盘,导致文件延迟出现。可以通过开启自动刷新解决:

  • 命令行参数方式:在Jenkins中执行JMeter的命令里添加-Jjmeter.save.saveservice.autoflush=true,示例:
    jmeter -n -t testplan.jmx -l result.jtl -Jjmeter.save.saveservice.autoflush=true
    
  • 配置文件方式:修改JMeter安装目录下的jmeter.properties,找到jmeter.save.saveservice.autoflush项,设置为true。
    开启后每个测试样本都会立刻写入文件,任务中止后JTL文件会马上出现在工作区。

2. 在Performance插件前添加文件等待逻辑

如果不想修改JMeter配置,可以在Performance插件执行步骤前,加入一段脚本循环检查JTL文件是否存在,等待指定时间:

  • Linux/macOS用Shell脚本:
    # 替换为你的JTL文件实际路径
    JTL_FILE="./result.jtl"
    # 最大等待时间(秒)
    MAX_WAIT=30
    # 检查间隔(秒)
    CHECK_INTERVAL=2
    
    elapsed=0
    while [ ! -f "$JTL_FILE" ] && [ $elapsed -lt $MAX_WAIT ]; do
        sleep $CHECK_INTERVAL
        elapsed=$((elapsed + CHECK_INTERVAL))
        echo "等待JTL文件生成,已等待${elapsed}秒..."
    done
    
    if [ $elapsed -ge $MAX_WAIT ]; then
        echo "超时:JTL文件未在${MAX_WAIT}秒内生成"
        exit 1
    fi
    
  • Windows用PowerShell脚本:
    $JtlFile = ".\result.jtl"
    $MaxWait = 30
    $CheckInterval = 2
    $Elapsed = 0
    
    while (-not (Test-Path $JtlFile) -and $Elapsed -lt $MaxWait) {
        Start-Sleep -Seconds $CheckInterval
        $Elapsed += $CheckInterval
        Write-Host "等待JTL文件生成,已等待${Elapsed}秒..."
    }
    
    if ($Elapsed -ge $MaxWait) {
        Write-Error "超时:JTL文件未在${MaxWait}秒内生成"
        exit 1
    }
    

将这段脚本作为Jenkins任务的一个步骤,放在Performance插件执行之前,确保插件运行时文件已经存在。

3. 优雅中止JMeter进程,而非直接终止Jenkins任务

不要直接点击Jenkins的「中止任务」按钮,而是添加一个手动触发的步骤,先让JMeter优雅停止:

  • 在Jenkins任务中添加一个「字符串参数」,比如命名为STOP_TEST,默认值为空。
  • 在JMeter执行步骤后,添加一段循环检查该参数的脚本,当参数值为true时,发送优雅停止信号给JMeter进程:
    JMETER_PID=$(ps aux | grep jmeter | grep -v grep | awk '{print $2}')
    while [ -z "${STOP_TEST}" ]; do
        sleep 5
    done
    
    if [ "${STOP_TEST}" = "true" ] && [ ! -z "$JMETER_PID" ]; then
        # 发送SIGINT信号,让JMeter完成当前样本写入后退出
        kill -SIGINT $JMETER_PID
        # 等待JMeter进程完全退出
        wait $JMETER_PID
    fi
    

需要中止测试时,修改参数STOP_TEST为true并触发任务,JMeter会优雅停止并立刻生成完整的JTL文件,之后Performance插件就能正常读取。

内容的提问来源于stack exchange,提问作者Javier Rodriguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:33:15