Разделы портала

Онлайн-тренинги

.
Управление тестовыми данными
25.11.2020 00:00

Автор: Кристин Джеквони (Kristin Jackvony)
Оригинал статьи
Перевод: Ольга Алифанова

Совсем не весело стартовать рабочий день с открытия, что некоторые (или все) ночные автотесты упали. Это особенно бесит, когда вы выясняете, что они упали, так как кто-то поменял ваши тестовые данные.

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

Самые распространенные проблемы с тестовыми данными:

Пользователи переписывают данные друг друга.

У нашей команды был API, назовем его API 1. Я написала для него ряд автотестов, используя тестового пользователя. API 1 переехал к другой команде, и моя команда начала работу над API 2. Для него я тоже написала автотесты. К сожалению, я использовала того же самого тестового пользователя, а для API 2 ему нужен был другой email-адрес. Это означало, что при каждом прогоне автотестов для API 1 менялся адрес тестового пользователя, а затем мои тесты для API 2 падали.

Другая команда меняет конфигурацию

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

Данные изменяются или удаляются при обновлении базы данных

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

Данные портятся

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

Что же делать? Вот мои рекомендации:

Используйте Docker

Использование виртуального окружения вроде Docker даст вам полный контроль над тест-окружением, включая конфигурацию приложения и базы данных. Для запуска тестов вы поднимаете виртуальную машину, прогоняете тесты и уничтожаете машину, когда тесты завершены.

Создайте свежую базу данных для тестирования

Можно создавать новую базу данных с исключительной целью прогона автотестов. В Windows это можно сделать через создание SQL DACPAC. Вы можете настроить схему своей БД, добавить только нужные для тестирования данные, создать базу, натравить на нее ваши тесты, и уничтожить БД, когда все завершено.

Дайте каждой команде свое собственное тест-пространство

Даже если командам приходится пользоваться одним и тем же тестовым окружением, они могут поделить свое тестирование по учетным записям. К примеру, если в вашем приложении несколько тестовых компаний, каждая команда получит различные тестовые компании для тестирования. Это очень полезно в случае с фича-флагами: у одной тестовой компании фича включена, а у другой выключена.

Дайте каждой команде своих пользователей

Если все команды вынуждены пользоваться одним тест-окружением и одним тест-аккаунтом, вы все еще можете дать каждой команде разные наборы тестовых пользователей. В этом случае команды не перепишут данные друг друга по неосторожности. Можно дать пользователям специфичные для команды имена, например, "Сью ЗеленаяКоманда".

Создавайте новые данные при каждом прогоне тестов

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

Используйте "сегодня + 1" для дат в будущем

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

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

Обсудить в форуме