用铬和硒进行网络节流

ale*_*cxe 40 performance selenium google-chrome bandwidth-throttling selenium-webdriver

谷歌Chrome 38 在devtools中引入了新的"设备模式和移动仿真"功能.除了选择用于仿真的设备之外,还可以模拟不同的网络条件:

在不同的网络条件下优化网站的性能是开发移动受众的关键方面.

设备模式的网络调节允许您在各种网络连接上测试您的站点,包括Edge,3G甚至离线.从预设下拉列表中选择一个连接以应用网络限制和延迟操作.

例如,我们可以将它设置为好日子 - GPRS 50 Kbps:

在此输入图像描述

现在我们有一个很好的用例 - 我们有一个用于网络速度测试的内部应用程序.这种新的仿真功能对手动测试非常有用.但是,我们希望自动化它.

问题是:

是否可以通过指定网络条件下的硒开始镀铬?它可以通过chrome首选项或命令行参数来控制吗?


当然有多种选择来模拟慢速互联网连接,但问题是关于chrome + selenium.

Yar*_*min 31

用于控制网络仿真的API 已添加到ChromeDriver中.现在应该可以使用一段时间了.根据链接问题中的评论,你应该使用至少2.26的版本,因为一些错误修复.

根据Selenium,changelog绑定可用于以下语言:

如果您需要其他语言的这些绑定,您应该打开类似于上述之一的问题/贡献实现.

Python的示例用法如下:

driver.set_network_conditions(
    offline=False,
    latency=5,  # additional latency (ms)
    download_throughput=500 * 1024,  # maximal throughput
    upload_throughput=500 * 1024)  # maximal throughput
Run Code Online (Sandbox Code Playgroud)

  • 从我所看到的情况来看,download_throughput 的输入似乎以每秒字节数为单位。不是位。我可能疯了,但数字似乎就是这样计算的。因此,如果您想要 500 kbps:“download_throughput=500 / 8 * 1024”,请告诉我是否有其他人看到同样的情况。有点难以明确衡量。 (2认同)

Pau*_*aul 14

不可以,无法通过Chrome首选项或命令行参数控制网络连接模拟.网络连接仿真是内置Chrome调试器的一部分.解决此问题的一种方法是控制调试器.这可以通过扩展或直接控制调试器来完成,请参阅说明.但是,这不适用于WebDriver.原因是只能有一个"调试"会话,WebDriver已经在使用它,请参阅说明.由于没有公共接口,因此也无法通过WebDriver控制它.

对于设备模式和移动仿真,它也是内置调试器的一部分,有一个公共接口(细节),因此可以控制.这可以通过WebDriver功能完成.两个选项1)指定设备名称2)输入您自己的参数(有限).

  • 这已不再适用,请参阅已接受的解决方案. (2认同)
  • 您可能想删除这个答案,因为现在可以通过 Selenium 实现这一点。 (2认同)

小智 6

您可以使用此方法在指定的网络条件下运行您的测试用例

protected void networkThrotting() throws IOException {
  Map map = new HashMap();
  map.put("offline", false);
  map.put("latency", 5);
  map.put("download_throughput", 500);
  map.put("upload_throughput", 1024);


  CommandExecutor executor = ((ChromeDriver)driver).getCommandExecutor();
  Response response = executor.execute(
        new Command(((ChromeDriver)driver).getSessionId(),    "setNetworkConditions", ImmutableMap.of("network_conditions", ImmutableMap.copyOf(map)))
  );
}
Run Code Online (Sandbox Code Playgroud)


sym*_*ean 5

虽然这是一个非常受欢迎和有用的功能,但对于严肃的测试,我认为传统的网络模拟方法仍然是可行的方法.

我知道除了那些链接之外的两个解决方案 - 查尔斯网络代理(非常有用的工具 - 商业)和使用Linux流量控制实现自己的配方(例如参见LAMPe2e的第6章).

通过干扰网络连接而不是浏览器,您可以独立于使用的浏览器获得适当的影响度量.

为什么您只想使用Chrome功能?


Kon*_*nov 5

实际上,最新的C#Selenium(3.11)已添加NetworkConditions。现在您可以像这样使用它:

     var driver = new ChromeDriver(pathToDriver);
     driver.NetworkConditions = new ChromeNetworkConditions()
     {  DownloadThroughput = 5000, UploadThroughput = 5000, Latency = TimeSpan.FromMilliseconds(5) };
Run Code Online (Sandbox Code Playgroud)

问题是由于该错误,它尚未可用

https://github.com/SeleniumHQ/selenium/issues/5693

因此,.Net团队将不得不等到3.12 Selenium发布。