如何在JMeter中监控分片上传的各部分耗时
监控JMeter文件上传分片耗时的方法
方法1:用内置变量+后置处理器计算分片耗时
- 在每个分片上传的HTTP请求前置添加
JSR223 PreProcessor,写入代码记录当前时间戳:
用def shardId = __counter(TRUE, "") vars.put("startTime_${shardId}", String.valueOf(System.currentTimeMillis()))__counter生成唯一分片ID,避免变量冲突。 - 在对应HTTP请求的后置添加
JSR223 PostProcessor,计算并记录耗时:def shardId = vars.get("counter") def startTime = Long.parseLong(vars.get("startTime_" + shardId)) def elapsed = System.currentTimeMillis() - startTime vars.put("shardElapsed_${shardId}", String.valueOf(elapsed)) log.info("第${shardId}个分片耗时:${elapsed}ms") - 后续可通过
View Results Tree查看单分片耗时,也能在jmeter.properties中配置sample_variables=shardElapsed_1,shardElapsed_2,...,将耗时数据导出到结果文件。
方法2:启用HTTP请求调试日志提取分片细节
- 如果分片是在单个HTTP请求内部处理的(比如模拟分块上传的内置逻辑),修改
jmeter.properties开启HTTP调试日志:
运行测试后,在log_level.jmeter.protocol.http=DEBUGjmeter.log中会输出每个分片的发送时间、字节数等信息,从中提取分片的起止时间差得到耗时。 - 若每个分片对应独立HTTP请求,直接查看
Summary Report或View Results Tree中每个请求的Response Time字段,该值就是对应分片的上传耗时。
方法3:自定义JSR223取样器实现精准计时
- 使用
JSR223 Sampler完全自主实现分片上传逻辑,手动控制每个分片的发送和计时:
这种方式能精准掌控每个分片的计时节点,还可根据需求调整上传逻辑。def targetFile = new File("/path/to/upload/file") def chunkSize = 1024 * 1024 // 设置1MB分片大小 def totalChunks = (targetFile.size() + chunkSize - 1).intdiv(chunkSize) for (int i = 0; i < totalChunks; i++) { def startByte = i * chunkSize def endByte = Math.min(startByte + chunkSize, targetFile.size()) def chunkData = targetFile.bytes[startByte..<endByte] // 记录分片发送开始时间 def start = System.currentTimeMillis() // 发送分片请求 def httpClient = org.apache.http.impl.client.HttpClients.createDefault() def postRequest = new org.apache.http.client.methods.HttpPost("http://your-upload-api") postRequest.setEntity(new org.apache.http.entity.ByteArrayEntity(chunkData)) def response = httpClient.execute(postRequest) // 计算耗时 def cost = System.currentTimeMillis() - start log.info("第${i+1}个分片(字节范围${startByte}-${endByte})耗时:${cost}ms") vars.put("shard_${i+1}_cost", String.valueOf(cost)) }
内容的提问来源于stack exchange,提问作者Mani
相关产品推荐
相关产品推荐

