Сетевое дросселирование с помощью хрома и селена
Google Chrome 38 представил новую функцию "Режим устройства и мобильная эмуляция" в devtools. В дополнение к выбору устройства для эмуляции также возможно эмулировать различные сетевые условия:
Оптимизация производительности вашего сайта в разных условиях сети ключевой аспект развития для мобильной аудитории.
Настройка режима устройства в режиме устройства позволяет протестировать ваш сайт на множество сетевых подключений, включая Edge, 3G и даже офлайн. Выберите соединение из раскрывающегося списка предустановки, чтобы применить сеть дросселирование и латентность.
Например, мы можем установить его как в старые добрые времена - GPRS 50 Кбит/с:
![enter image description here]()
Теперь у нас есть хороший прецедент для этого - у нас есть внутреннее приложение для тестирования скорости сети. И эта новая функциональность эмуляции очень полезна для ручного тестирования. Но мы бы хотели автоматизировать его.
Вопрос:
Можно ли запустить хром через селен с указанными сетевыми условиями? Это то, что можно контролировать с помощью хромных настроек или аргументов командной строки?
Есть, конечно, несколько вариантов имитировать медленное подключение к Интернету, но вопрос в частности касается хром + селен.
Ответы
Ответ 1
API для управления эмуляцией сети был добавлен в ChromeDriver. И должно быть доступно довольно долго. Согласно комментарию в связанной проблеме, вы должны использовать версию как минимум 2.26 из-за некоторого исправления.
В соответствии с Selenium список изменений доступен для следующих языков:
- JavaScript начиная с версии 3.4.0 (commit)
- Python начиная с версии 3.5.0 (commit)
- Ruby начиная с версии 3.11.0 (commit)
- С# с версии 4 (коммит)
Если вам нужны эти привязки на других языках, вам, вероятно, следует открыть реализацию вопроса/содействия, аналогичную одной из вышеперечисленных.
Пример использования из Python ниже:
driver.set_network_conditions(
offline=False,
latency=5, # additional latency (ms)
download_throughput=500 * 1024, # maximal throughput
upload_throughput=500 * 1024) # maximal throughput
Ответ 2
Нет, невозможно управлять эмуляцией сетевых подключений с помощью настроек Chrome или аргументов командной строки. Эмуляция сетевых подключений является частью встроенного отладчика Chrome. Один из способов решения этого - управлять отладчиком. Это можно сделать с помощью расширения или путем прямого управления отладчиком, см. объяснение. Однако это не будет работать с WebDriver. Причина этого в том, что может быть только один сеанс "отладки", и WebDriver уже использует его, см. объяснение. Поскольку нет открытого интерфейса, также нет возможности управлять им через WebDriver.
Для Режим устройства и мобильная эмуляция, который также является частью встроенного отладчика, есть открытый интерфейс (подробности) и, следовательно, можно контролировать. Это можно сделать с помощью возможностей WebDriver. Два варианта: 1) Укажите имя устройства. 2) Введите свои собственные параметры (ограниченные).
Ответ 3
Хотя это очень полезный и полезный элемент функциональности, для серьезного тестирования я думаю, что обычные методы моделирования сети все еще не решены.
Мне известны 2 решения в дополнение к уже связанным - веб-прокси Charles (очень полезный инструмент - коммерческий) и реализация собственного рецепта с использованием Linux Traffic Control (например, см. Главу 6 в LAMPe2e).
Взаимодействуя с сетевыми подключениями, а не с браузером, вы получите надлежащую оценку воздействия независимо от используемого браузера.
Почему вы просто хотите использовать функциональность Chrome?
Ответ 4
Действительно, в последней версии С# Selenium (3.11) добавлены условия сети. Теперь вы можете использовать это так:
var driver = new ChromeDriver(pathToDriver);
driver.NetworkConditions = new ChromeNetworkConditions()
{ DownloadThroughput = 5000, UploadThroughput = 5000, Latency = TimeSpan.FromMilliseconds(5) };
Проблема в том, что он еще не используется из-за ошибки
https://github.com/SeleniumHQ/selenium/issues/5693
Так что ребятам .Net придется ждать до 3.12 релиза Selenium.
Ответ 5
Похоже, это скоро произойдет в Selenium (С#). Фиксация была 28.01.2008:
https://github.com/SeleniumHQ/selenium/blob/ef156067a583fe84b66ec338d969aeff6504595d/dotnet/src/webdriver/Chrome/ChromeNetworkConditions.cs
Ответ 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)))
);
}