Как вы проектируете объектную модель страницы без дубликатов? - PullRequest
2 голосов
/ 31 октября 2019

Я работаю над автоматизацией тестирования пользовательского интерфейса, используя POM с Python и Selenium. Я хочу знать, как обрабатывать дубликаты тестовых случаев.

Например, у вас есть две веб-страницы: страница входа и домашняя страница. Я хочу протестировать три контрольных примера.

  1. Функции домашней страницы без входа в систему: test_homepage_before_login.py
  2. Вход с действительным / недействительным именем пользователя и паролем: test_login.py
  3. Домашняя страницафункции с логином: test_homepage_after_login.py

(1 и 3 имеют много общего. 3 имеет дополнительные функции. 1 является подмножеством 3)

Для каждого теста есть три файласлучай, и я уже реализовал 1 и 2. Но для третьего я просто импортировал соответствующие функции из 1 и 2 модулей.

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

Другой случай, о котором я могу подумать, это «выход из системы». Когда вы автоматизируете функцию выхода из системы, вы должны сначала войти в систему. В этом случае вы снова добавляете подтверждение входа в систему и осуществляете выход? Вы также даете зависимость в этом случае или просто делаете сценарии независимыми?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

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

  • Я не разрабатываю каждый тест, чтобы соответствовать странице. Вместо этого я разрабатываю короткие сценарии , которые проверяют поведение и результаты, которые наиболее актуальны для клиента
  • Вход в систему является очень конкретным и особым случаем. Обычно большинство тестов нужно начинать с входа в систему, чтобы получить то, что им на самом деле нужно для тестирования, хотя на самом деле они не хотят проверять процесс входа как таковой. Кроме того, вы обычно хотите иметь некоторые другие тесты, которые конкретно проверяют процесс входа в систему. Для первой категории тестов вы можете выполнить вход в систему либо перед каждым тестом, либо даже перед всеми тестами с использованием прибора. Приспособление может подтвердить, что вход в систему прошел успешно, просто чтобы предотвратить продолжение теста в случае сбоя, но я не считаю его частью проверки этого теста. Этот прибор должен выполнять вход в систему самым простым и надежным способом, потому что его цель не в том, чтобы найти больше ошибок, а в том, чтобы помочь нам добраться до того места, которое нас действительно волнует в тесте. Это означает, что вы можете использовать API или использовать любой другой ярлык для того, чтобы быть в состоянии входа в систему.
  • Для тестов, специфичных для входа в систему, я часто буду сочетать их с процессом регистрации, в качестве основногоЦель регистрации состоит в том, что она позволит пользователю войти в систему, и успешный вход в систему является результатом процесса регистрации, поэтому нет особой цели тестировать один без другого.
  • Что касается повторного использования кодаи объекты страницы: следуя моему первому пункту, я следую процессу, который заключается в написании каждого теста способом, который описывает сценарий наиболее читабельным образом, с использованием классов и методов, которые еще не существуют. Затем я реализую эти классы и методы, чтобы пройти тест. Во втором тесте и далее, если я понимаю, что уже реализовал действие, я повторно использую этот код, и если мне нужно что-то похожее на то, что я уже реализовал, но не точно так же, я реорганизую исходную функцию, чтобы ее можно было использовать в моемновый тест, удаляющий любое дублирование по пути. Это помогает мне разрабатывать мой код очень многократно и без дублирования. Иногда это приводит меня к созданию объектов страницы, а иногда - к другим шаблонам дизайна. Вы можете найти более подробное объяснение этого метода, включая пошаговое руководство по моей книге Завершенное руководство по автоматизации тестирования .

HTH.

0 голосов
/ 31 октября 2019

Вы можете использовать куки для обработки аутентификации. Это значительно ускорит ваши тесты. Пример:

public void setAuthenticationCookies() {
        Cookie at = new Cookie("Cookie_AccessToken", prop.getAccessToken(), "/", DatatypeConverter.parseDateTime("2030-01-01T12:00:00Z").getTime());
        Cookie rt = new Cookie("Cookie_RefreshToken", prop.getRefreshToken(), "/", DatatypeConverter.parseDateTime("2030-01-01T12:00:00Z").getTime());
        driver.manage().addCookie(at);
        driver.manage().addCookie(rt);
}

Для получения дополнительной информации: https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/Cookie.html

В случае выхода из системы я советую сначала войти в систему, а затем выйти из нее, чтобы сделать свои тесты независимыми друг от друга.

...