Browsermob通过Sauce Connect无法拦截请求,HAR文件为空求助
我来帮你梳理几个可能的排查方向,之前切换到Sauce Labs时也碰到过类似的HAR捕获失效问题,你可以逐一检查这些点:
确认Remote WebDriver的代理配置是否生效
启动RemoteWebDriver时,必须把BMP的代理地址正确注入到Sauce Labs的DesiredCapabilities中,而且要覆盖HTTP和HTTPS的代理设置。比如用Java代码的话,配置示例如下:Proxy bmpProxy = new Proxy(); bmpProxy.setHttpProxy("your-bmp-machine-ip:8080"); // 替换成你的BMP监听地址 bmpProxy.setSslProxy("your-bmp-machine-ip:8080"); capabilities.setCapability(CapabilityType.PROXY, bmpProxy); capabilities.setCapability("acceptInsecureCerts", true); // 允许自签名证书(BMP解密HTTPS需要)另外,启动Sauce Connect时,需要添加
--proxy http://your-bmp-machine-ip:8080参数,让SC把测试流量转发给BMP处理,这一步很容易漏掉。检查BMP的HAR捕获流程是否完整
启动BMP后,不能直接用默认端口,需要先创建一个新的代理实例,再手动开启HAR捕获:# 创建代理实例,返回一个随机端口(比如8081) curl -X POST http://your-bmp-machine-ip:8080/proxy # 开启HAR捕获 curl -X POST http://your-bmp-machine-ip:8080/proxy/8081/har测试结束后,还要主动调用导出接口获取HAR文件:
curl http://your-bmp-machine-ip:8080/proxy/8081/har -o test.har如果跳过了创建实例或开启捕获的步骤,HAR文件肯定是空的。
验证流量是否真的经过BMP
在BMP所在机器上用tcpdump抓包,监听BMP的端口,看看有没有来自Sauce Connect的流量:tcpdump -i any port 8080如果没有流量,说明WebDriver的请求根本没走到BMP,要么是代理配置错了,要么是Sauce Connect的隧道没正确转发流量。同时可以查看SC的启动日志,搜索
proxy相关的日志,确认是否成功连接到BMP。排查HTTPS证书信任问题
因为你测试的是HTTPS站点(Google),BMP需要解密HTTPS流量才能生成HAR,这就需要测试浏览器信任BMP的根证书。除了在capabilities里设置acceptInsecureCerts: true,还可以手动把BMP的证书(默认在BMP安装包的lib目录下的jar包中提取)添加到Sauce Labs的浏览器配置中,确保证书被信任。检查版本兼容性
旧版本的Browsermob Proxy可能和新版Sauce Connect的隧道机制不兼容,导致流量转发失败。建议升级到最新稳定版的BMP和Sauce Connect,再重新测试。
内容的提问来源于stack exchange,提问作者Nick Slavsky

