Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

[Resolved] Как работать с набором тестовых данных для одного теста.


(Viktor Hreptovich) #1

Добрый день.
Начинающий в Selenium Webdriver, PageObject.
Рассмотрим тестирование логина (стандартный простенький логин: поле username, поле password, кнопка login).

Набор данных
0 - некорректные данные
1 - корректные данные
Username Password Result
0…0… 1
0…1… 1
1…0… 1
1…1… 2

Result:
1 - вывод какого-то сообщения (вход не выполнен)
2 - выполнен вход

Первое, что приходит в голову написать 4 теста:
LoginIncorrectUsernamePassword(){…};
LoginIncorrectUsernameCorrectPassword(){…};
LoginCorrectUsernameIncorrectPassword(){…};
LoginCorrectUsernamePassword(){…};
и в каждом тесте будет практически один и тот же код…условно

...
PageLogin.login(...);
...
Assert(...);
...

а хотелось бы иметь один тест, что-то вроде

Login(Testdata){
...
Page = PageLogin.login(Testdata.username,Testdata.password);
...
Assert(Testdata.result, Page.result);
...
};

А набор данных с ожидаемыми результатами хранить где-то отдельно в виде какой-нибудь таблицы.
Надеюсь объяснил доступно. Может кто подскажет решение, пример. Может переубедит меня, может я вообще не в ту строну смотрю.


Тестирование ввода полей (регистрация, авторизация и.т.д.)
(Sergey Korol) #2

Вам нужно 2 метода: positive / negative flows, ибо сценарии проверок будут разные (в одном случае вы будете оставаться на логин пейдже, в другом - уйдете на условный хоум).
Данные будут храниться в таблицах. Для последовательного выполнения 1 сценария с разными данными используем DataProvider. Пример реализации с поддержкой масштабирования был недавно добавлен в БЗ.


(Андрей Бахтиозин) #3
Ну если по легкому с примером:
@DataProvider(name="data provider for invalid login test")
    public Object[][] createDataForInvalidLogin() {
        return new Object[][] {
                {"admin","gr34343"},
                {"awawgdregerg", "test"},
                {"admin", ""},
                {"", "test"},
                {"", ""},
                {"awawgdregerg", "gr34343"}
        };
    }

@Test(testName = "invalid login", dataProvider = "data provider for invalid login test")
    public void invalidLoginTest(String login, String password) {
        goToMainPage().loginWithWrongCredentials(login, password);
//а тут какой-то асеерт если надо
    }

(Taras) #4

Data Provider в помощь тут по любому, он для таких кейсов и придуман. Data Driven тести тем и хороши, что у Вас тест запускаеться отдельно с разними наборами данних, а не один тест в цикле.


(Viktor Hreptovich) #5

Спасибо, то что надо. Буду дальше смотреть DDT.