Перейти к содержимому

Фотография

Часто ли вы используете паттерн "Сон"?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 17 июня 2015 - 07:08

Коллеги-автоматизаторы, признайтесь честно, используете ли вы всячески осуждаемый паттерн "Сон" хотя бы изредка?

 

Есть ли ситуации, когда без него никак не получается обойтись?

 

P.S. Вопрос возник потому, что за прошлую неделю мне два раза чуть было не пришлось прибегнуть к такому "неправильному" решению, с трудом удалось реализовать более "правильное" решение, но я до сих пор в сомнениях -- стоило ли оно того...


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#2 Ilana

Ilana

    Активный участник

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Илана
  • Город:Иерусалим


Отправлено 17 июня 2015 - 07:57

Честно говоря не знала что это паттерн, но у нас автомация очень стабильна именно благодаря такому подходу. 
 
Практически все команды селениума обвернуты в ожидания, каждая секунда ожидания выводится в лог точкой "." Длина ожидания регулируется глобальным параметром DEFAULT_TIMEOUT_MNDT, который можно менять вручную из Jenkins и из Eclipse при запуске джоба/теста. 
 
Например:
 
public void clickOnElement(String elementName, Object... placeholders) throws Exception {
 
log.debug("Verify element '" + elementName + "' appearance within " + almaTestSuper.DEFAULT_TIMEOUT_MNDT+ " seconds and click");
 
for (int second = 0; second <= almaTestSuper.DEFAULT_TIMEOUT_MNDT; second++) {
   try {
             WebElement e = findElement(elementName, placeholders);
             e.click();
             almaTestSuper.log("Clicked on element: " + elementName + "'", AlmaTestSuper.LOG_LEVEL.DEBUG, true);
             return;
   } catch (Exception e) {
                    Thread.sleep(1000);
                    almaTestSuper.log(".", AlmaTestSuper.LOG_LEVEL.INFO, false);
   }
}
 
  AlmaTestSuper.fail( elementName + "' does not appear");
 
}
 
Пример лога:
 
DEBUG  - Check if the element 'DialogPopup' is visible within 15 seconds................
DEBUG  - Verifying the element Common.InfoSection has text that matches 'Job has been submitted successfully.'............................................................
FATAL  - 'Common.InfoSection' element does not appear
 
или:
 
DEBUG  - Waiting for 'Common.LoadingBlocker': to appear within 0.3 seconds , to disappearе within 180 seconds
DEBUG  - Loading blocker appeared! Waiting for Loading blocker to disappear
......Loading blocker disappeared!
 
или когда страницы вдруг медленно загружаются:
 
DEBUG  - Clicked on element: Login.login'
INFO   - Wait for page load for 'HomePage'..............
DEBUG  - The page was loaded
 
 
Точно также обвернуты в sleep все ожидания длинных процессов в приложении (batch jobs, и т.п.)

 

Хотя ассы такой подход осуждают, интересно бы знать почему?

 

Коллеги-автоматизаторы, признайтесь честно, используете ли вы всячески осуждаемый паттерн "Сон" хотя бы изредка?

 

Есть ли ситуации, когда без него никак не получается обойтись?

 

P.S. Вопрос возник потому, что за прошлую неделю мне два раза чуть было не пришлось прибегнуть к такому "неправильному" решению, с трудом удалось реализовать более "правильное" решение, но я до сих пор в сомнениях -- стоило ли оно того...


  • 0

#3 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 17 июня 2015 - 08:14

Практически все команды селениума обвернуты в ожидания

 

Судя по всему Вам по какой-то причине не подошли "штатные" явные ожидания?

WebDriverWait wait = new WebDriverWait(driver);
....
wait.until(visibilityOfElementLocatedBy(someLocator)).click();

  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#4 Сергей

Сергей

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 245 сообщений
  • Город:Москва

Отправлено 17 июня 2015 - 09:21

1. Есть такое понятие в теории управления - переходной процесс.

2. Есть такое понятие в тестировании - метод гонок (условия гонок).

 

При поиске "волшебных" поведений ПО дают весьма неплохие результаты.

 

НО в автоматизации предпочитаю избегать этих двух понятий и использовать сон.


  • 0

"Если ты хороший плотник и делаешь красивую тумбочку, ты не будешь прибивать сзади фанеру, даже несмотря на то, что задняя часть повернута к стене, и никто ее не видит. Ты будешь хорошо спать ночью, только если тебе удалось воплотить в своем произведении эстетическую красоту и качество." © Стив Джобс


#5 Ilana

Ilana

    Активный участник

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Илана
  • Город:Иерусалим


Отправлено 17 июня 2015 - 09:22

Да, есть о чем подумать, конечно. 

 
Инфраструктура и утилиты проекта писались четыре года назад на Selenium RC, и видимо тогда явные ожидания WebDriver не существовали или тот кто писал он них не знал. Вот исторически так и работает, и все довольны. 
 
Сейчас попытаюсь заменить их (хотя бы частично) на функциональность WebDriverWait и посмотреть пару месяцев не ухудшит ли это стабильность. (Хотя с точки зрения паттерна, как мне кажется, это тоже самое. Паттерн остается в действии.)

 

 


  • 0

#6 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 17 июня 2015 - 10:37

Бывают случаи, когда с анимацией на странице драйвер отрабатывает несинхронно.

 

Скажем, ожидание для visibility/invisibilityOfElementLocated отработало, а метод click() на открывшемся элементе выдает Exception. Причем это сохраняется и при вполне приличном таймауте перед кликом (например, 500 мс).

 

В таких случаях Wait оказывается фактически бесполезным, лишние строки кода. Удобней выставить небольшой таймаут, если с ним тест стабильнее.


  • 0

#7 Tishka

Tishka

    Постоянный участник

  • Members
  • PipPipPip
  • 211 сообщений
  • ФИО:Ахрамеев Антон

Отправлено 17 июня 2015 - 12:16

В последнее время несколько раз пришлось использовать sleep.

1. На странице примерно 40 динамических полей, каждое из которых сохраняет значение при клике на другой элемент. 

Если не использовать sleep то доходит до того, что летит 30+ запросов на сохранение и некоторые отваливаются по timeout.

2. Есть необходимое условие - загрузка 10 фоток на странице, загрузка идет по 1й фотке.

Если без остановки заливать одну за другой, то от такой скорости загрузки валятся скрипты и следовательно что-то не сохраняется.

 

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


  • 0

#8 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 17 июня 2015 - 13:19

В последнее время несколько раз пришлось использовать sleep.

1. На странице примерно 40 динамических полей, каждое из которых сохраняет значение при клике на другой элемент. 

Если не использовать sleep то доходит до того, что летит 30+ запросов на сохранение и некоторые отваливаются по timeout.

2. Есть необходимое условие - загрузка 10 фоток на странице, загрузка идет по 1й фотке.

Если без остановки заливать одну за другой, то от такой скорости загрузки валятся скрипты и следовательно что-то не сохраняется.

 

А вы не квалифицируете это как баги в тестируемом приложении? Нет вероятность, что пользователь тоже может столкнуться с такой проблемой? Например, при автозаполнении форм при помощи какого-нибудь плагина к браузеру.


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#9 Kerem356

Kerem356

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Матвеев Сергей Велерьевич


Отправлено 19 июня 2015 - 12:46

Раньше этот шаблон часто использовался в проекте, как костыль. Со временем это перешло в полноценный подход. Мне это надоело и я вырезал все ожидания и переписал, используя средства Selenium. Все работает быстро и качественно


  • 0

#10 Tishka

Tishka

    Постоянный участник

  • Members
  • PipPipPip
  • 211 сообщений
  • ФИО:Ахрамеев Антон

Отправлено 19 июня 2015 - 13:31

 

В последнее время несколько раз пришлось использовать sleep.

1. На странице примерно 40 динамических полей, каждое из которых сохраняет значение при клике на другой элемент. 

Если не использовать sleep то доходит до того, что летит 30+ запросов на сохранение и некоторые отваливаются по timeout.

2. Есть необходимое условие - загрузка 10 фоток на странице, загрузка идет по 1й фотке.

Если без остановки заливать одну за другой, то от такой скорости загрузки валятся скрипты и следовательно что-то не сохраняется.

 

А вы не квалифицируете это как баги в тестируемом приложении? Нет вероятность, что пользователь тоже может столкнуться с такой проблемой? Например, при автозаполнении форм при помощи какого-нибудь плагина к браузеру.

 

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

К моему сожалению, это не признали как баг, ссылаясь на то что пользователь не может так быстро загружать картинки и заполнять данные.

В конце сказали примерно так: "Если все таки пользователь столкнется с такой проблемой, то тогда будем думать."


  • 0

#11 Сергей

Сергей

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 245 сообщений
  • Город:Москва

Отправлено 19 июня 2015 - 14:29

Ну и правильно сказали. Хотя раньше доказывал, что нужно все равно исправить.


  • 0

"Если ты хороший плотник и делаешь красивую тумбочку, ты не будешь прибивать сзади фанеру, даже несмотря на то, что задняя часть повернута к стене, и никто ее не видит. Ты будешь хорошо спать ночью, только если тебе удалось воплотить в своем произведении эстетическую красоту и качество." © Стив Джобс



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных