Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

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

design-patterns
java
webdriver
selenium
Теги: #<Tag:0x00007fedc74aca60> #<Tag:0x00007fedc74ac920> #<Tag:0x00007fedc74ac5d8> #<Tag:0x00007fedc74ac498>

(Александр) #1

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

С недавних пор работаю авто-тестировщиком, пишу тесты на 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”); и ужаснулся количеству инициализаций этих классов, сообщений об инициализации в консоли больше трех десятков. :frowning:

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

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


(Michael) #2

Эмм… ну чтобы создался объект нужно, чтобы отработал конструктор, open(SomeClass.class) и page(SomeClass.class) инстанцируют объекты и возвращают, чтоб можно было методы дергать. Для джавы это нормально. По другому никак. Можно убрать явные конструкторы, но тогда будут неявные отрабатывать.