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

如何在JMeter 5.6.2中配置并发请求数(访问日志采样器场景)

解决JMeter Access Log Sampler多并发且各线程取不同URL的方案

方案一:转日志为CSV+CSV Data Set Config(最简便)

这是最容易落地的方式,直接避开Access Log Sampler的单线程限制:

  • 提取URL到CSV文件:把Apache日志里的请求URL单独提取出来,每行一个URL,保存为requests.csv。可以用JMeter自带的Access Log Parser工具(在Tools菜单),或者用正则脚本批量提取。
  • 配置CSV Data Set Config:
    • 文件名:填写requests.csv的本地路径
    • 变量名:设为target_url
    • 分隔符:选择换行符(因为每行一个URL)
    • 共享模式:选所有线程(核心设置,确保每个线程读取不同的行,不会重复请求同个URL)
  • 替换Access Log Sampler:用HTTP Request Sampler替代,把路径栏填为${target_url},按需设置请求方法、协议等。
  • 线程组设置:线程数设为10,循环次数选永远,再通过调度器设置测试持续时间,就能保持稳定的10并发,每个线程自动取不同的URL。

方案二:用JSR223脚本控制Access Log Sampler的日志读取

如果不想替换原有Sampler,可通过Groovy脚本实现日志条目的分布式读取:

  • 添加JSR223 PreProcessor到Access Log Sampler下方
  • 复制以下Groovy代码(需根据你的Apache日志格式调整正则):
    // 全局计数器,用JMeter属性跨线程共享
    def logCounter = props.getOrDefault("logLineCounter", 0) as int
    def logFilePath = "/path/to/your/apache.log"
    def logLines = new File(logFilePath).readLines()
    
    if (logCounter < logLines.size()) {
        def currentLine = logLines[logCounter]
        // 匹配Common Log Format的URL,若用Combined格式需调整正则
        def urlMatcher = currentLine =~ /\s(\/.*?)\sHTTP\/\d.\d/
        if (urlMatcher.find()) {
            vars.put("unique_url", urlMatcher.group(1))
        }
        // 更新全局计数器
        props.put("logLineCounter", logCounter + 1)
    } else {
        // 日志读完后停止当前线程组
        ctx.getThreadGroup().stop()
    }
    
  • 修改Access Log Sampler的URL为${unique_url},线程组设10个线程、循环永远,即可实现10并发各取不同URL。

注意事项

  • 若用分布式测试,日志文件需放在所有JMeter节点的相同路径下
  • 正则表达式需匹配你的实际日志格式,比如带查询参数的URL、HTTPS请求等
  • 可通过Summary Report或Aggregate Report监控并发数,调整线程组的Ramp-Up时间(设为0可立刻启动10个线程)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:36:13