性能 - 如何以自动方式捕获chrome网络选项卡中的所有请求

时间:2018-04-15 13:49:58

标签: performance google-chrome selenium jmeter webkit

我正在加载HTML页面时捕获所有请求。我的最终目标是创建一个报告,其中包含每个请求所花费的时间以及加载整个页面所花费的总时间。我曾尝试使用performance.getEntries()但它仅限于在缓冲区中存储150个请求。为了解决这个问题,我尝试设置performance.setResourceTimingBufferSize(size),但是当我刷新页面时,此缓冲区大小将重置为默认值150。

我想知道以下几点的解决方案,

  1. 如何在加载任何页面之前设置performance.setResourceTimingBufferSize(size)(如果我在页面加载时设置它,则会错过捕获一些请求)。很少有人建议在HTML标签中设置它,但在我的情况下这是不可能的,因为我需要使用selenium而且我无法修改源文件中的任何内容。
  2. 我还发现我们可以将所有请求保存为chrome控制台中的HAR文件。有没有办法以自动方式做到这一点?
  3. 有没有其他方法可以捕获所有请求?
  4. PS:我使用Jmeter(模拟多个用户)使用web驱动程序采样器运行selenium脚本。应该使用硒来实现自动化方式。

2 个答案:

答案 0 :(得分:1)

您可以使用BrowserMob proxy创建和启动代理服务器,该服务器将捕获数据并以.har

的形式保存
  1. 下载BrowserMob代理并将.jar文件放入JMeter Classpath
  2. 重新启动JMeter以选择.jars put
  3. setUp Thread Group添加JSR223 Sampler并将以下代码放入“脚本”区域

    import net.lightbody.bmp.BrowserMobProxy
    import net.lightbody.bmp.BrowserMobProxyServer
    import net.lightbody.bmp.proxy.CaptureType
    
    def proxy = new BrowserMobProxyServer()
    def captureTypes = new HashSet<>();
    captureTypes.addAll(CaptureType.getAllContentCaptureTypes());
    captureTypes.addAll(CaptureType.getHeaderCaptureTypes());
    captureTypes.addAll(CaptureType.getCookieCaptureTypes());
    proxy.setHarCaptureTypes(captureTypes);
    proxy.start(8080)
    proxy.newHar()
    
    props.put('proxy', proxy)  
    
  4. 设置Chrome Driver Config以使用步骤3中的代理

    JMeter Configure Proxy

  5. tearDown Thread Group添加到您的测试计划中,并在另一个JSR223 Sampler中使用以下代码将WebDriver采样器发出的请求存储到.har文件中:

    def proxy = props.get('proxy')
    proxy.getHar().writeTo(new File('some.har'))
    proxy.stop() 
    
  6. 就是这样,现在你应该在测试执行期间生成.har文件。

    参考文献:

答案 1 :(得分:0)

为了您的目标,您可以尝试https://gtmetrix.com/。这将为您提供有关加载时间和瀑布模型中所有请求的报告,例如浏览器。此外,您可以下载pdf的完整报告,并可以进行比较和重新测试。 在那里你也可以下载HAR文件。

尽管如此,它与硒无关,但可能符合您的目标,而且可以实现自动化。