Какова типичная структура автоматизированного теста?

Как мы должны структурировать наши автоматизированные тесты? Что еще более важно, как мы можем сделать наши автоматизированные тесты детерминированными и повторяемыми?

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

Автоматические тесты должны запускаться автоматически, без ручного вмешательства. Более того, результаты автоматизированных тестов должны быть детерминированными и надежными.


Но как этого добиться?

Ответ довольно прост, но тем, которым часто пренебрегают, а именно, использование контролируемые данные .




Компоненты теста

Для запуска теста нам понадобятся три компонента:



  • Заявление
  • Сценарий
  • Данные

Один компонент, который сильно влияет на поведение приложения, - это данные ; Данные, которые нужны приложению, и данные, которые ему передаются.

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

Страница результатов поиска будет выглядеть и вести себя иначе, когда в базе данных есть продукты, чем когда база данных пуста.


Очевидно, что наши автоматизированные тесты должны учитывать разные состояния приложения и проверять различное поведение.

Когда мы ищем продукт и видим его объявления, как мы можем проверить результаты? Как мы можем быть абсолютно уверены в том, что эти данные соответствуют нашим ожиданиям? Более того, как мы можем сделать этот процесс повторяемым, чтобы при каждом новом развертывании мы получали один и тот же результат?



Как сделать автоматические тесты детерминированными

Зачем нужны контролируемые данные в автоматизированных тестах?

Я привожу вам пример плохой практики, которую я часто вижу в автоматизированных тестах:


Очень плохим тестом является то, что мы ищем продукт и утверждаем, что у нас отображаются некоторые списки. Мы не будем углубляться в подробности - пока на странице отображаются товары, у нас все в порядке. БЕЗУМНЫЙ!

К сожалению, это оставило бы без ответа некоторые вопросы:

  • Как мы узнаем, что данные поступают из правильной базы данных? Мы подключены к фиктивному серверу с фиктивными данными?
  • Как мы узнаем, что возвращенные данные - это именно то, что мы искали?
  • Как мы узнаем, что на странице результатов поиска отображается правильное количество элементов?

Нам нужно иметь возможность утверждать результаты тестов. Утверждения должны иметь смысл и быть действительными проверками.

Если мы не контролируем данные, у нас не будет возможности узнать или проверить ответы на указанные выше вопросы.


Чтобы сделать автоматические тесты детерминированными, нам нужно самим заполнить данные. Автоматические тесты должны вводить известные данные и проверять результат по этим данным.

Если мы будем полагаться только на данные, которые используются другими процессами и которые могут изменяться, то наши автоматизированные тесты не будут надежными. У нас нет возможности определить результаты.



Как сделать автоматические тесты повторяемыми

Автоматические тесты должны запускаться автоматически. По-настоящему автоматизированные тесты запускаются таким процессом, как конвейер сборки CI / CD, который контролирует выполнение тестов и создание отчетов по ним.

Опять же, то, как мы обрабатываем данные, влияет на надежность и повторяемость автоматических тестов.


Типичная структура хорошего автоматизированного теста:

  • 1 - Настройка [Создать известные данные]
  • 2 - Тест [Использовать созданные данные]
  • 3 - Teardown [Уничтожить созданные данные]

Создать тестовые данные

Почему нам нужно каждый раз настраивать тестовые данные? Разве это не замедлит нас каждый раз, когда мы запускаем тесты? Разве мы не можем просто настроить его один раз, а затем повторно использовать те же данные?

Хорошо, а как мы узнаем, что происходит с данными после завершения теста? Может быть, тест другого человека изменил или удалил данные?

Как мы можем быть уверены, что в следующий раз, когда мы захотим запустить тот же тест, данные уже есть для нас?

Уничтожить тестовые данные

Зачем нужно уничтожать созданные тестовые данные?

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

Если мы не удалим тестовые данные и не продолжим создавать случайные тестовые данные, то со временем в базе данных будет много тестовых данных, и у нас возникнут другие проблемы.

Поэтому не забудьте создать и уничтожить свои тестовые данные.



Резюме

Чтобы получить максимальную отдачу от наших усилий по автоматизации тестирования, нам необходимо разрабатывать хорошие тесты с хорошей структурой.

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

Заполняя собственные тестовые данные, мы можем тестировать в различных условиях. Более того, мы можем быть уверены, что утверждения assert проверяют наличие известных данных. Это сделает тесты детерминированными.

Чтобы многократно запускать сценарии автоматического тестирования, мы должны убедиться, что наши тесты создают тестовые данные перед запуском сценариев. Это делается в разделе настройки автоматического теста.

Затем в сценариях будут использоваться данные, созданные на этапе настройки.

Наконец, когда мы закончим тестирование, у нас должен быть способ очистить тестовую среду, удалив все созданные данные. Это делается в разделе разборки автоматизированного теста.

Связанный: