Я использую Python, Selenium и unittest для запуска E2E-тестирования в веб-приложении. Проблема в том, что это приложение, как и многие другие приложения, не имеет состояния. Так, например, пользователь может войти в систему или нет. Некоторые шаги зависят от предыдущих шагов. Поэтому у меня проблемы с изолированием этих тестов друг от друга.
Вот пример одного из моих тестовых случаев:
def test_ad_creation_registered(self):
input = Inputs.AdCreationRegisteredInput()
self._login()
self.driver.get(input.URL[0])
self._test_ad_creation(input)
# check ad is created correctly
self.driver.get(input.ad_url)
self._check_against_model(AdCreation.AdPageModel(input))
# test send message
self._test_send_messages_user(input)
Как видите, нет даже assert
здесь! Ни в функциях, ни на один уровень ниже, таких как _login
, _test_ad_creation
, _test_send_messages_user
, каждая из которых состоит из нескольких дополнительных функций. Например, вот _test_ad_creation
:
def _test_ad_creation(self, input):
self._test_category_selection_page(input)
self._test_ad_creation_page(input)
self._test_ad_preview_page(input)
self._test_ad_published_page(input)
self._test_ad_features_edited_page(input)
self._test_payment_page(input)
Каждая из этих функций должна быть отдельным тестовым примером, НО все они зависят от состояния из предыдущей функции, поэтому у меня нет лучшего решения, чем запустить их последовательно таким образом. Однако это кажется неправильным.
Каковы лучшие практики для запуска таких тестов с Selenium?