E2E Угловое приложение для медленной сети 3g медленно с помощью транспортира
У меня есть вопрос, мне нужно симулировать медленную сеть на моих тестах e2e с помощью Protractor. Я использую anuglar-cli и angular5.
Я попытался найти способ симуляции медленной сети без успеха, используя setNetworkConnection
Но это не работает и выдает исключение.
Проблема только в медленной сети, мой typeahead создает дополнительный вызов, потому что вызов before еще не завершен, я использую эту функцию, чтобы сделать это:
this.modelChanged
.debounceTime(400)
.distinctUntilChanged()
.subscribe((model: FilterModel) => {
this.filters.set(model.filterName, model.filterVal);
const filters = {};
this.filters.forEach((value: any, key: string) => {
filters[key] = value;
});
this.ds.changeData({
filters: filters
});
});
Может быть, у вас будет лучшее предложение, чтобы исправить это тоже. С удовольствием приму любое предложение.
Теперь мне нужно проверить это, чтобы предотвратить регрессию, когда я исправлю это с помощью лучшего решения.
Заранее спасибо.
2 ответа
Если вы используете Chrome, взгляните на эту страницу https://peter.sh/experiments/chromium-command-line-switches/
Когда вы запускаете браузер, вы можете передать ему аргументы, чтобы указать желаемое поведение. Особенно обратите внимание на эти аргументы:
--shill-stub
- "Сотовая связь =1" - Сотовая связь изначально подключена "Сотовая связь =LTE" - Сотовая связь изначально подключена
--enabled-3g
--force-effective-connection-type
************* РЕДАКТИРОВАТЬ *************
Вы указываете аргументы в конфигурационном файле. Он должен иметь возможности объекта, который выглядит следующим образом
capabilities: {
"browserName": "chrome",
"chromeOptions": {
"args": ["incognito", "--window-size=1920,1080", "disable-extensions", "--no-sandbox", "start-maximized", "--test-type=browser"],
"prefs": {
"download": {
"prompt_for_download": false,
"directory_upgrade": true,
"default_directory": path.join(process.cwd(), "__test__reports/downloads")
}
}
}
},
а также args
это то, что вы ищете для передачи аргументов
Я использую это. Добавьте в файл config.ts вашего транспортира:
function enableThrottling(flag: boolean) {
if(flag){
if (typeof (browser.driver as any).setNetworkConditions === 'function') {
console.log('set network conditions ON');
(browser.driver as any).setNetworkConditions({
offline: false,
latency: 150,
download_throughput: 450 * 1024,
upload_throughput: 150 * 1024
});
}
}
else {console.log('set network conditions OFF')}
}
И тогда вы можете включить / отключить его во время ваших тестов с помощью enableThrottling(true)
Значения задержки / загрузки / выгрузки могут быть изменены на:
/*GPRS (50 * 1024)/(20 * 1024)/500 ms
Regular 2G (250 * 1024)/(50 * 1024)/300 ms
Good 2G (450 * 1024)/(150 * 1024)/150 ms
Regular 3G (750 * 1024)/(250 * 1024)/100 ms
Good 3G (1.5 * 1024 * 1024)/(750 * 1024)/40 ms
Regular 4G (4 * 1024 * 1024)/(3 * 1024 * 1024)/20 ms
DSL (2 * 1024 * 1024)/(1 * 1024 * 1024)/5 ms
Wifi (30 * 1024 * 1024)/(15 * 1024 * 1024)/2 ms */
Так, например, теперь в примере выше он настроен на Good 2G