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

Другие вопросы по тегам