web-dev-qa-db-ja.com

chromeおよびセレンによるネットワーク調整

Google Chrome 38はdevtoolsの新しい "デバイスモードとモバイルエミュレーション" 機能を導入しました。エミュレーション用のデバイスを選択することに加えて、 異なるネットワーク条件をエミュレート

さまざまなネットワーク条件でサイトのパフォーマンスを最適化することは、モバイルユーザー向けの開発の重要な側面です。

デバイスモードのネットワーク調整により、Edge、3G、さらにはオフラインを含むさまざまなネットワーク接続でサイトをテストできます。事前設定されたドロップダウンから接続を選択して、ネットワーク調整と遅延操作を適用します。

たとえば、古き良き時代のように設定できます-GPRS 50 Kbps:

enter image description here

これで良いユースケースができました-ネットワーク速度テスト用の内部アプリケーションがあります。また、この新しいエミュレーション機能は、手動テストに非常に役立ちます。しかし、私たちはそれを自動化したいです。

質問:

指定されたネットワーク条件でSeleniumを介してchromeを開始できますか?chrome設定またはコマンドライン引数を使用して制御できますか?


遅いインターネット接続をシミュレートする には確かに複数のオプションがありますが、問題は具体的にchrome + Seleniumに関するものです。

37
alecxe

ネットワークエミュレーションを制御するAPI 追加された ChromeDriverに。そして、かなり長い間利用可能になるはずです。リンクされた問題の comment によると、バグ修正のため、少なくともバージョン2.26を使用する必要があります。

Seleniumによると changelog バインディングはこれらの言語で利用可能です:

  • バージョン3.4.0のJavaScript( commit
  • バージョン3.5.0のPython( commit
  • バージョン3.11.0以降のRuby( commit
  • バージョン4以降のC#( commit

他の言語でこれらのバインディングが必要な場合は、おそらく上記のいずれかと同様のissue/contribute実装を開く必要があります。

Python=の使用例は以下のとおりです。

driver.set_network_conditions(
    offline=False,
    latency=5,  # additional latency (ms)
    download_throughput=500 * 1024,  # maximal throughput
    upload_throughput=500 * 1024)  # maximal throughput
27
Yaroslav Admin

いいえ、 ネットワーク接続エミュレーション からChrome設定またはコマンドライン引数。ネットワーク接続エミュレーションはビルドインの一部ですChromeデバッガ。これを解決する1つの方法は、デバッガを制御することです。これは、拡張機能を使用するか、デバッガを直接制御することで実行できます。 説明 を参照してください。この理由は、「デバッグ」セッションが1つしか存在できず、WebDriverがすでにそれを使用しているためです explanation を参照してください。パブリックインターフェイスがないため、それを制御する方法もありません。 WebDriver経由。

デバイスモードとモバイルエミュレーション には、ビルドインデバッガーの一部でもあるパブリックインターフェース(- details )があるため、制御できます。これは、WebDriver機能を介して実行できます。 2つのオプション1)デバイス名を指定します2)独自のパラメーターを入力します(制限あり)。

13
Paul

これは非常に歓迎される便利な機能ですが、深刻なテストを行う場合は、ネットワークシミュレーションの従来の方法がまだ有効だと思います。

すでにリンクされているものに加えて、2つのソリューション- Charles web proxy (非常に便利なツール-商用)とLinux Traffic Controlを使用して独自のレシピを実装していることを認識しています(たとえば LAMPe2e )。

ブラウザではなくネットワーク接続に干渉することにより、使用中のブラウザに関係なく、影響の適切な測定値を取得できます。

Chrome機能を使用したいのはなぜですか?

5
symcbean

実際、最新のC#Selenium(3.11)にはNetworkConditionsが追加されています。これで、次のように使用できます。

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

問題は、バグのためにまだ使用できないことです

https://github.com/SeleniumHQ/Selenium/issues/569

.Netの人は3.12 Seleniumリリースまで待たなければなりません。

5

このメソッドを使用して、指定されたネットワーク条件でテストケースを実行できます。

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)))
  );
}
2
akash

Selenium(C#)にまもなく登場するようです。コミットは2018年1月28日でした:

https://github.com/SeleniumHQ/Selenium/blob/ef156067a583fe84b66ec338d969aeff6504595d/dotnet/src/webdriver/Chrome/ChromeNetworkConditions.cs

2
0x2bad