t.me/atinfo_chat Telegram группа по автоматизации тестирования

есть два теста где разное только одно поле ... способы оптимизации

design-patterns
page-object
java
webdriver
clean-code
Теги: #<Tag:0x00007f9c504d64c8> #<Tag:0x00007f9c504d6388> #<Tag:0x00007f9c504d6248> #<Tag:0x00007f9c504d6108> #<Tag:0x00007f9c504d5fc8>

(Gallagher) #1

В общем есть два теста к которых только одна команда отличается.
В одном тесте залогиненный пользователь, а в другом нет.
Команда не в начале а в середине теста.
Реализация у меня такая. Просто передаем параметры разные.
Наверняка есть лучше вариант.

public void presentBook(String login, String pass)throws InterruptedException {
            RegistrationPage registrationPage = new RegistrationPage(driver);
           
            LoginPage loginPage = new LoginPage(driver);
            
            // открыть страницу
            driver.get("http://site.ru/");
            registrationPage.closeLaravel();
            // вводим логин, пароль
            if (login !="" && pass !="")
            {loginPage.selectLoginPass(cartPage.login, cartPage.pass);}
            // ну и так далее
            
            driver.quit();
        }
@Test
    public void testPresentBookNotLoggedInUser() throws InterruptedException{
        presentBook("","");
    }
    @Test
    public void testPresentBookLoggedInUser() throws InterruptedException{
        presentBook(login, pass);
    }

(Vladislav Abramov) #2

потоки сознания на форум продолжаются :sweat_smile:


(Alexandr D.) #3

По-моему это не оптимизация, а усложнение логики. Если описывать в каждом методе поведение и с логином и без…

К тому же метод presentBook слишком уж многое делает.

Достаточно разбить его на более мелкие методы по логике, в том числе сделать EnterWithAuth и EntryWithoutAuth да и всё…

Зачем усложнять-то? И зачем в теле теста пытаться всё в один метод запихать? Вот вы прочитав этот метод presentBook понимаете что в тесте вообще происходит с ходу? Я нет.


(Gallagher) #4

Ну у меня сам метод находится прям в файле с тестом … По-этому в принципе понятно все.

EnterWithAuth и EntryWithoutAuth

Это типа сделать методы которые будут отвечать за залогинивание?


(Gallagher) #5

Просто какой смысл копипастить?


(Alexandr D.) #6

Через полгода будет непонятно. Ну или покажите это другому человеку - ему будет непонятно.

Да.
И в тесте их вызывать.
Поведение при залогиненном пользователе и нет обычно подразумевает совершенно разное взаимодействие со страницей (за исключением похожих блоков типа меню).

Вот и я о том же - какой смысл в каждый метод копипастить параметры логина и пароля и городить кучу if’ов :wink:


(Gallagher) #7

Ну тогда может вообще перегрузить какой нибудь метод? Сделать два метода с одним названием, один принимает переменные логин. пароль, а второй нет )))


(Valentin G ) #8

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


(Alexandr D.) #9

Можно и так. Просто логику надо разносить, а не пилить все в одно место.
Потом проще жить будет


(Sergei) #10

Читать это можно долго, а кушать хочется сейчас :slight_smile:


(Valentin G ) #11

Думаю, если почитать хотя бы про основные принципы, например Single Responsibility principle, и понять на примере, уже можно сделать лучше, чем в первом посте.


(Sergey) #12

Параметризированные тесты делай. @ParameterizedTest