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

Фотография

Непонимание концептуальной идеи


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

#1 axz

axz

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

  • Members
  • Pip
  • 8 сообщений

Отправлено 09 декабря 2013 - 11:23

У меня есть непонимание основной идеи, в каком направлении двигаться, и что делаю так, а что не так.
Использую WebDriver + TestNG (упрощенный код под спойлером).

Необходимо протестировать систему, все действия можно делать только авторизованым пользователем.
Допустим, хочу сначала отдельно проверить всю авторизацию, класс Auth. Далее проверять создание объектов и прочие операции.

Сейчас в testng.xml я просто в нужном порядке записал все методы, т.е.
testLaunch
testLoginInvalidCred
testLogin
testCreateObjType1
testCreateObjType2
testLogout

Но тогда нет никакой атомарности тестов. Да и это явно не то что надо, когда тестов будет намного больше.

Как я себе это представляю:
@BeforeSuite/@AfterSuite заменить на @BeforeTest/@AfterTest,
и в testng.xml для каждого теста писать
<test1> логин с невалидными данными
    testLaunch
    testLoginInvalidCred
<test2> логин с валидными данным
    testLaunch
    testLogin
<test3> логаут
    testLaunch
    testLogin
    testLogout
<test3> создание объекта
    testLaunch
    testLogin
    testCreateObjType1
Т.е. таким образом для каждого теста из testng.xml будет создаваться экземпляр веб-драйвера, прогон указанных методов, и закрытие веб-драйвера.

1. а)Правильно ли, что для каждого теста я добавляю тестовые методы testLaunch и testLogin?
б) Нет ли в этом избыточности проверок?
в) Или же вынести их в отдельные не тестовые методы, без ассертов, и вызывать в коде уже в самих методах "testCreateObjType1" и т.д.
г) Имеет ли смысл например добавить авторизацию в @BeforeTest? Тогда как организовать отдельно проверку авторизации (методы в классе Auth)?

2. Может будут еще какие замечания/уточнения, т.к. далее для создания дочерних объектов будет требоваться наличие родительских.
Получится, что
<testN> создание дочернего объекта
    testLaunch
    testLogin
    testCreateObjTypeParent (но создание этого уже проверялось ранее отдельно)
    testCreateObjTypeChild

В общем, что-то я запутался, и как обычно строятся тесты в таких случаях? По документации textng я что-то не догоняю, т.е. там все понятно, как добавлять/исключать/группировать и прочее, но вот у меня какой-то ступор.

Скрытый текст

Сообщение отредактировал axz: 09 декабря 2013 - 11:55

  • 0

#2 Keiga

Keiga

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

  • Members
  • PipPipPip
  • 174 сообщений
  • ФИО:Евгений
  • Город:Москва


Отправлено 10 декабря 2013 - 08:21

Допустим, хочу сначала отдельно проверить всю авторизацию, класс Auth. Далее проверять создание объектов и прочие операции.

Сделайте авторизацию отдельным методом. Добавьте вызов метода(с нужными данными) + нужные assert'ы и будет Вам проверка авторизации.
Для проверки создания объектов добавьте корректную авторизацию в before, в тесте вызывайте только метод создания объекта + assert.

а)Правильно ли, что для каждого теста я добавляю тестовые методы testLaunch и testLogin?

Если они нужны в большинстве тестов, тогда лучше выделить их в before\after

Или же вынести их в отдельные не тестовые методы, без ассертов, и вызывать в коде уже в самих методах "testCreateObjType1" и т.д.

Отличный вариант. Все повторяющиеся действия лучше выносить в отдельные методы.

Имеет ли смысл например добавить авторизацию в @BeforeTest? Тогда как организовать отдельно проверку авторизации (методы в классе Auth)?

Можно же сделать чтобы проверка авторизации у Вас была отдельным классом, а все остальные проверки вынести в другие классы, которые будут с before\after

У Вас получается что в каждом тесте проверяется постоянно и логин и запуск, лучше всего чтобы каждый тест проверял что-то одно. Вы например можете указать остальным классам зависимость от теста с авторизации, если он не проходит, то всё остальное выполнено не будет.
  • 1

#3 axz

axz

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

  • Members
  • Pip
  • 8 сообщений

Отправлено 10 декабря 2013 - 16:44

Keiga,
спасибо за разъяснения!
Если можно, несколько уточнений.

С отдельным методом авторизации все ясно.
Тогда в классе Init остается @BeforeTest - там только инициализация вебдрайвера и открытие url.
Далее отдельно авторизация - класс Auth (без каких либо before/after).
И затем все классы проверки объектов и прочего уже содержат снова @BeforeTest/AfterTest c валидной авторизацией? (Т.е. из-за одного отдельного Auth далее в каждом классе придется писать before/after?).

И на счет "Вы например можете указать остальным классам зависимость от теста с авторизации",
т.е. dependsOnMethods указать для всех методов в классе, или для всего класса как-то можно?
  • 0

#4 Keiga

Keiga

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

  • Members
  • PipPipPip
  • 174 сообщений
  • ФИО:Евгений
  • Город:Москва


Отправлено 11 декабря 2013 - 06:46

И затем все классы проверки объектов и прочего уже содержат снова @BeforeTest/AfterTest c валидной авторизацией? (Т.е. из-за одного отдельного Auth далее в каждом классе придется писать before/after?).

Вы можете сделать например так:
Вариант один:
  • класс с авторизацией.
  • класс с тестами авторизации (позитив\негатив) в нём же дописать before\after на открытие браузера и страниц.
  • отдельный класс с before\after + нормальной авторизацией и от него детишки с будущими тестами на создание объектов.
Либо:
Тоже самое, но если Вам в каждом тесте нужен свой пользователь, то before\after так же выделяем в отдельный класс, а авторизацию вызываем каждый раз с разным пользователем уже в тесте.

Основная идея в том, что должно быть как можно меньше повторений в коде. При этом сделать так чтобы если Вам допустим захочется что-то когда-то изменить\добавить, Вам не пришлось бы перекраивать каждый раз все тесты.
Поэтому делайте так чтобы было не только Вам удобно, но и другим людям которые будут смотреть\использовать Ваш код.

т.е. dependsOnMethods указать для всех методов в классе, или для всего класса как-то можно?

Надо посмотреть в документации, но вроде можно сразу указать для класса, плюс там еще есть и другие зависимости(от групп например).
  • 1

#5 axz

axz

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

  • Members
  • Pip
  • 8 сообщений

Отправлено 12 декабря 2013 - 09:15

Ну вроде все достаточно ясно. :)
Спасибо Вам еще раз!
  • 0


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

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