如何使用JMeter的Webdriver Sampler获取Latency和Rendering Time
使用JMeter Webdriver Sampler获取Latency与Rendering Time
获取方法说明
- Latency:指浏览器发送请求到开始接收服务器响应的时间差,可通过浏览器
window.performance.timingAPI计算,公式为responseStart - requestStart。 - Rendering Time:通常以First Contentful Paint (FCP) 作为核心指标,表示页面首次绘制内容的时间,可通过
window.performance.getEntriesByType('paint')提取对应数据;若需更精准的核心渲染指标,也可监听Largest Contentful Paint (LCP) 事件。
注意:需确保JMeter中配置的浏览器驱动(如ChromeDriver)开启性能日志,在Chrome Driver的配置参数中添加:--enable-logging --log-level=0 --enable-performance-logging。
Webdriver Sampler示例代码
1. 获取Latency
// 提取浏览器性能计时数据 def performanceTiming = WDS.browser.executeScript("return window.performance.timing;") // 计算Latency(请求发送到响应开始的时间差) def latency = performanceTiming.responseStart - performanceTiming.requestStart // 将结果存入JMeter变量,支持后续断言或报告展示 WDS.vars.put("webLatency", String.valueOf(latency)) WDS.log.info("页面Latency: " + latency + "毫秒")
2. 获取Rendering Time(以FCP为例)
// 提取Paint类型的性能条目 def paintEntries = WDS.browser.executeScript("return window.performance.getEntriesByType('paint');") // 遍历条目找到First Contentful Paint的时间 def renderingTime = 0 paintEntries.each { entry -> if (entry.name == "first-contentful-paint") { renderingTime = entry.startTime } } // 将结果存入JMeter变量 WDS.vars.put("renderingTime", String.valueOf(renderingTime)) WDS.log.info("页面Rendering Time (FCP): " + renderingTime + "毫秒")
如果需要获取Largest Contentful Paint (LCP) 作为Rendering Time,可改用以下代码:
// 使用PerformanceObserver监听LCP事件 def lcpScript = """ let lcpTime = 0; new PerformanceObserver((list) => { const entries = list.getEntries(); const lastEntry = entries[entries.length - 1]; lcpTime = lastEntry.startTime; }).observe({type: 'largest-contentful-paint', buffered: true}); return lcpTime; """ def lcpRenderingTime = WDS.browser.executeScript(lcpScript) WDS.vars.put("lcpRenderingTime", String.valueOf(lcpRenderingTime)) WDS.log.info("页面Rendering Time (LCP): " + lcpRenderingTime + "毫秒")
内容的提问来源于stack exchange,提问作者zenitsu Agastuma
相关产品推荐
相关产品推荐

