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

Selenium WebDriver: полное руководство
онлайн, начало 19 октября
Логи как инструмент тестировщика
онлайн, начало 22 октября
Первый Онлайн ИНститут Тестировщиков
онлайн, начало 15 октября
Тестирование REST API
онлайн, начало 22 октября
Фотография

Как уменьшить количество вызовов классов?

java selenium webdriver

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

#1 Alexander1983

Alexander1983

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

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Александр Наумов

Отправлено 07 Август 2018 - 18:58

Всем доброго времени суток.

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

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

есть, скажем, класс Element который определяет наличие элемента или нескольких на странице, а так же некоторых их свойств
от него наследуются классы типа Tools (каждый из которых содержит методы для работы с определенными элементами), затем их все собирает через композицию еще один класс, и от него уже наследуются все классы отождествляемые с непосредственно вебстраницами которые я тестирую.

Иерархически схема в данный момент выглядит так:
class A

class B extends A

class C extends B

class Buttons extends C

class Breadcrumbs extends C

class Table extends C

...

class Page собирает все что после C (там около полутора десятка элементов каждому из которых посвящен отдельный класс)
и от Page как раз наследуются все тестируемые "страницы".

В данный момент все отлично работает (с точки зрения затраченного на тесты времени), но.. я поместил в конструктор каждого класса код вида System.out.println("init classname"); и ужаснулся количеству инициализаций этих классов, сообщений об инициализации в консоли больше трех десятков. :(

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

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


  • 0

#2 Alex

Alex

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

  • Members
  • PipPipPip
  • 217 сообщений
  • ФИО:Алексей

Отправлено 08 Август 2018 - 05:58

Всем доброго времени суток.

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

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

есть, скажем, класс Element который определяет наличие элемента или нескольких на странице, а так же некоторых их свойств
от него наследуются классы типа Tools (каждый из которых содержит методы для работы с определенными элементами), затем их все собирает через композицию еще один класс, и от него уже наследуются все классы отождествляемые с непосредственно вебстраницами которые я тестирую.

Иерархически схема в данный момент выглядит так:
class A

class B extends A

class C extends B

class Buttons extends C

class Breadcrumbs extends C

class Table extends C

...

class Page собирает все что после C (там около полутора десятка элементов каждому из которых посвящен отдельный класс)
и от Page как раз наследуются все тестируемые "страницы".

В данный момент все отлично работает (с точки зрения затраченного на тесты времени), но.. я поместил в конструктор каждого класса код вида System.out.println("init classname"); и ужаснулся количеству инициализаций этих классов, сообщений об инициализации в консоли больше трех десятков. :(

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

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

1. Инициализация класса неизбежно приводит к "инициализации" и родительских классов. Т.е., у вас класс C наследует сразу два класса. Соответственно new C() породит три записи в консоли, хотя класс создали только 1

2. Перерасход ресурсов в современном мире для тестовых целей маловероятен. Если бы вы писали высоконагруженное приложение, то имело бы смысл сильно беспокоится об этом. А так, вряд ли это сильно повлияет

3. Не понятно зачем А и B классы, если в конечном счете все равно все используют только класс C или вы не так отразили зависимость в своем примере.

 

Ну и по части классов, у нас, например, во фрэймворке количество классов исчисляется сотнями (без учета классов самих тестов). Сколько там порождается объектов даже представить не могу, но вроде норм все.


  • 2

#3 Alex

Alex

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

  • Members
  • PipPipPip
  • 217 сообщений
  • ФИО:Алексей

Отправлено 08 Август 2018 - 05:59

 


  • 0

#4 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 751 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 08 Август 2018 - 07:06

Тебе чтобы понять порядок инициализации надо создать пару тестовых классов и потестить. Я писал про это:

 

https://user12vv.wor...-полей-и-блоко/

 

https://user12vv.wor...олей-и-блоко-2/

 

Ну и С наследуется от B, а B от А странно конечно


  • 0

#5 Spock

Spock

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 056 сообщений
  • ФИО:Роман

Отправлено 08 Август 2018 - 09:38

 

 

Ну и С наследуется от B, а B от А странно конечн

наоборот, тут всё правильно. А это общее для всех, Б это общее для некоторых, С это частное


  • 0

#6 Little_CJIOH

Little_CJIOH

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 176 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 08 Август 2018 - 10:02

 

 

 

Ну и С наследуется от B, а B от А странно конечн

наоборот, тут всё правильно. А это общее для всех, Б это общее для некоторых, С это частное

 

Фича в том, что у класса А только один наследник   => Это или архитектура и задел на будущее, что не бьется с вопросом. Или кто-то увлекся концепцией и нафигачил наследование ради наследования.


  • 0

#7 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 751 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 08 Август 2018 - 10:58

 

 

 

Ну и С наследуется от B, а B от А странно конечн

наоборот, тут всё правильно. А это общее для всех, Б это общее для некоторых, С это частное

 

Тогда есть класс А.  B extends A и С extends A. 

А как у автора:

class A

class B extends A

class C extends B, что странно. По крайней мере классы А и B можно объединить


  • 0

#8 TatyanaV

TatyanaV

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

  • Members
  • PipPipPipPip
  • 315 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 08 Август 2018 - 12:24

Тогда есть класс А.  B extends A и С extends A. 
А как у автора:
class A
class B extends A
class C extends B, что странно. По крайней мере классы А и B можно объединить

 
Почему странно?
 
class A - Корм 
class B extends A - Сухой
class C extends B - Для собак

Что тут не так?
Корм - общее для всех.

Сухой - общее для некоторых.

Для собак - частное.


  • 0

#9 Alexander1983

Alexander1983

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

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Александр Наумов

Отправлено 08 Август 2018 - 12:31

Друзья, большое спасибо за ответы и внимание.

Успокоили :)

 

@ TatyanaV, Little_CJIOH вы правы, это архитектурное решение с заделом на будущее.


  • 0

#10 Noksa

Noksa

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

  • Members
  • PipPip
  • 109 сообщений
  • ФИО:Александр

Отправлено 09 Август 2018 - 04:51

 

Тогда есть класс А.  B extends A и С extends A. 
А как у автора:
class A
class B extends A
class C extends B, что странно. По крайней мере классы А и B можно объединить

 
Почему странно?
 
class A - Корм 
class B extends A - Сухой
class C extends B - Для собак

Что тут не так?
Корм - общее для всех.

Сухой - общее для некоторых.

Для собак - частное.

 

 

Если Корм это базовый класс - совсем не факт, что это что-то общее для всех.

 

Каким-то кормом можно кормить, например, рыб, но нельзя таким же кормить лошадей.

 

Если у вас будет разновидность кормов для собак огромная - в вашем случае придётся городить кучу классов. 

Это очень неудобно.

 

 

Я бы использовал Корм как интерфейс. Собаки могут кушать? Могут. Лошади могут? Могут. Рыбы могут? Могут.

 

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


  • 0

#11 TatyanaV

TatyanaV

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

  • Members
  • PipPipPipPip
  • 315 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 09 Август 2018 - 08:01

Если Корм это базовый класс - совсем не факт, что это что-то общее для всех. 
Каким-то кормом можно кормить, например, рыб, но нельзя таким же кормить лошадей.

Именно поэтому это базовое для всех - им можно "кормить". Вне зависимости от конкретного питомца.
 

Если у вас будет разновидность кормов для собак огромная - в вашем случае придётся городить кучу классов. 
Это очень неудобно.

"Для собак" - общее для некоторых, именно потому, что им можно кормить только собак, но он не подходит для рыбок, к примеру.
А "разновидность кормов" - это просто свойство "корма".

Вы пытаетесь цепляться к выдуманной из воздуха условной аналогии, написанной исключительно для того, чтобы показать, что в схеме A -> B -> C нет ничего странного (даже если на Ваш взгляд можно использовать кучу известных Вам шаблонов, чтобы реализовать тоже самое более правильным на Ваш взгляд способом).
У автора темы - нет на самом деле никаких кормов, по какой-то причине - именно такая структура ему необходима.
 


  • 0

#12 Noksa

Noksa

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

  • Members
  • PipPip
  • 109 сообщений
  • ФИО:Александр

Отправлено 09 Август 2018 - 09:52

Все эти последовательные наследования рано или поздно до добра не доведут.

А так, делайте, конечно, как знаете.


  • 0


Selenium 2.0: стартовый уровень
онлайн, начало 9 ноября
Программирование на Java для тестировщиков
онлайн, начало 12 октября
Автоматизация функционального тестирования
онлайн, начало 5 октября
Selenium WebDriver: полное руководство
онлайн, начало 19 октября




Темы с аналогичным тегами java, selenium, webdriver

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

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

Яндекс.Метрика
Реклама на портале