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

能否通过JMeter WebDriver Sampler捕获网络request breakdown数据?

能否用JMeter WebDriver Sampler捕获网络请求细分数据?

WebDriver Sampler默认不直接提供网络请求的细分耗时,但可以结合浏览器性能日志API实现需求,以下是具体方案:

1. 启用浏览器性能日志收集

在JMeter的ChromeDriver配置中添加启动参数,开启网络性能日志:

  • 若使用WebDriver Config元素,设置chrome.switches为:
    --enable-logging --log-level=INFO --perfLoggingPrefs={"enableNetwork":true}
    
  • 若在WebDriver Sampler脚本中初始化浏览器,可添加:
    System.setProperty("webdriver.chrome.args", "--enable-logging --log-level=INFO --perfLoggingPrefs={\"enableNetwork\":true}");
    System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
    

2. 编写脚本提取请求细分数据

通过浏览器性能日志解析每个请求的耗时,并添加为采样器的子结果,示例代码:

import org.json.JSONObject;
import org.openqa.selenium.logging.LogEntries;
import org.openqa.selenium.logging.LogEntry;

// 获取性能日志
LogEntries logEntries = WDS.browser.manage().logs().get("performance");

// 遍历日志解析请求数据
for (LogEntry entry : logEntries) {
    JSONObject json = new JSONObject(entry.getMessage());
    JSONObject message = json.getJSONObject("message");
    String method = message.getString("method");
    
    // 捕获响应完成事件,计算请求耗时
    if (method.equals("Network.responseReceived")) {
        JSONObject params = message.getJSONObject("params");
        JSONObject response = params.getJSONObject("response");
        String url = response.getString("url");
        JSONObject timing = response.getJSONObject("timing");
        double duration = timing.getDouble("receiveHeadersEnd") - timing.getDouble("requestTime");
        
        // 将请求耗时添加为子结果,在结果树中查看
        WDS.sampleResult.addSubResult(WDS.sampleResult.createSubResult(url, duration * 1000));
    }
}

3. 注意事项

  • 确保ChromeDriver与Chrome浏览器版本匹配,避免兼容性问题
  • 性能日志包含大量数据,可通过URL过滤聚焦核心请求(如登录接口)
  • 不同浏览器(如Firefox)的性能日志格式不同,需调整解析逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:22:27