如何在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 RequestSampler替代,把路径栏填为${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
相关产品推荐
相关产品推荐

