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

Фотография

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

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
  • 237 сообщений
  • ФИО:Алексей

Отправлено 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
  • 237 сообщений
  • ФИО:Алексей

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

 


  • 0

#4 user12

user12

    Специалист

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


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

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

 

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

 

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

 

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


  • 0

#5 Spock

Spock

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

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

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

 

 

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

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


  • 0

#6 Little_CJIOH

Little_CJIOH

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

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


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

 

 

 

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

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

 

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


  • 0

#7 user12

user12

    Специалист

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


Отправлено 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
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 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
  • 117 сообщений
  • ФИО:Александр

Отправлено 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
  • 388 сообщений
  • ФИО:Воробьева Татьяна


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

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

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

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

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

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


  • 0

#12 Noksa

Noksa

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

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

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

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

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


  • 0



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

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

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