Очень быстро проходят интеграционные тесты

protractor
angularjs
Теги: #<Tag:0x00007fedb843b158> #<Tag:0x00007fedb843b018>

#1

Использую версию 5.1.0
Очень быстро проходят тесты и в какие-то моменты падают разные варианты шагов.
Как можно добавлять таймаут перед каждым шагом?


(Oleksandr Khotemskyi) #2

Проблемы первого мира


(Valentin Buryakov) #3

Есть такой вариант, как можно замедлить запуск, но довольно старанное желание, возможно вам нужно просто стабилизировать тесты, пересмотреть кейсы, добавить вейты нужные, а не вдаваться к таким радикальным мерам, этим вы рискуете значительно увиличить время запуска:

var origFn = browser.driver.controlFlow().execute;
browser.driver.controlFlow().execute = function () {
  var args = arguments;

  origFn.call(browser.driver.controlFlow(), function () {
    //increase or reduce time value, its in millisecond
    return protractor.promise.delayed(200);
  });

  return origFn.apply(browser.driver.controlFlow(), args);
};

(Oleksandr Khotemskyi) #4

В вашем вопросе нет конкретики.

Начинаем детективное расследование:

  1. По коственным признакам удалось узнать что вы используете ProtractorJS (тег в названии темы)
  2. Вы называете тесты на protractorjs интеграционными - что неверно, но да ладно, проигнорируем это
  3. Вы говорите про шаги, и что разные варианты шагов падают. Предполагаю что вы говорите про шаги которые в CucumberJS (Gerkin steps)
  4. Предполагаю что вы хотите “замедлить тесты” только локально, замедлять на CI - нет особого смысла

Я бы рекомендовал

  1. Забыть об идее замедлить тесты. Это противоречит самой сути автотестов - они должны бежать максимально быстро, насколько возможно
  2. Поставьте брейкпоинты и посмотрите что у вас происходит
  3. Если уж замедлить очень хочется - попробуйте blocking-proxy для локального дебага - https://github.com/angular/blocking-proxy#highlight-delay - есть хорошая опция которая делает то что вам нужно

#5

Вы так говорите будто это что-то плохое :smiley:

P.S. сорри за флуд


#6

Суть в том, что ты не успеваешь увидеть как заполняются поля. Тесты проходят моментально, и возможно из-за этого падают шаги с ошибкой не найден элемент на странице.


(Nakutaro) #7

У вас в тестах разве нет проверок? Пусть они проверяют правильность заполнения и т.п. Зачем это пытаться сделать руками?


#8

Проверки есть, но всё-таки хочется чтобы помедленнее работало


#9

Как можно поставить брейкпоинты? Ставлю debugger и protractor на него не реагирует


(Pavel Ozerov) #10

Поставьте browser.sleep(1000); после каждого степа - и увидите, как заполняются поля.


(karkadil) #11

Я не знаком с инструментами, которыми вы пользуетесь, но сама проблема очень стара, потому я попробую дать весьма обобщённый ответ.

В вашем случае проще всего написать общую функцию, которая будет принимать в качестве параметра окно/страницу/форму и список данных (например, словарь), которыми нужно заполнить поля.
В самой функции в цикле прохода по элементам управления, которые нужно заполнить, вы делаете задержку (например, на 100 мс) после заполнения каждого элемента управления.
100 мс незаметны для пользователя, но они могут оказаться критичными для софта. Можно использовать 500 вместо 100, короче говоря - поиграться с таймаутом.