Очистка данных
Каждый запуск теста генерирует значительное количество данных, включая следующие артефакты:
- тестовые сценарии;
- фикстуры (общие блоки для тестов, такие как
SetUp
иTearDown
); - вложения.
ТестОпс позволяет настроить автоматическое удаление таких артефактов. Например, это может быть полезно для успешно пройденных тестов, данные по которым обычно занимают много места и не предоставляют полезной информации, а также для неуспешных результатов тестов, которые были получены давно.
Правила очистки
В ТестОпс существует два типа правил очистки:
- глобальное правило — применяется ко всем проектам, существующим в инстансе ТестОпс;
- проектное правило — применяется дополнительно к указанному проекту и не заменяет глобальные правила.
Примечание
Например, если вы установите глобальное правило, которое будет удалять вложения для пройденных тестов через 24 часа, а на уровне проекта укажете удаление тех же артефактов через 25 часов, то оба правила будут применяться к этому проекту одновременно – файлы будут удалены через 24 часа, а затем через 25 часов.
Важно
Правила очистки работают только для закрытых запусков. В частности, если у вас настроена политика автоматического закрытия запусков, артефакты будут удаляться только после закрытия этих запусков. Например, если вы настроили очистку артефактов через 24 часа, а запуск закрывается автоматически через 72 часа после его открытия, артефакты удалятся спустя 72 часа, когда запуск будет закрыт.
Глобальные правила очистки по умолчанию
Новые инстансы ТестОпс содержат предустановленный набор глобальных правил очистки. Это применимо для всех инстансов облачной версии ТестОпс, а также для инстансов серверной версии ТестОпс, развернутых впервые (без созданных проектов).
По умолчанию удаляются:
- вложения в успешных результатах тестов — через 1 неделю (168 часов);
- вложения в неуспешных результатах тестов и результатах с другими статусами — через 1 месяц (720 часов);
- фикстуры и сценарии результатов тестов — через 1 месяц (720 часов) вне зависимости от результата теста.
Создание глобального правила очистки
Примечание
Чтобы создать глобальное правило очистки, у вас должны быть права администратора инстанса ТестОпс.
- Перейдите в раздел Администрирование → Очистка данных.
- Нажмите + Создать.
- Выберите Артефакт для удаления и Статус результата теста из выпадающих списков.
- Укажите параметр Удалять артефакт через (в часах). Он определяет количество часов между запуском теста и очисткой данных.
- Нажмите Отправить.
Создание правила очистки для конкретного проекта
Глобальные правила очистки, настроенные администратором, могут быть недостаточны для вашего проекта. В этом случае вы можете настроить дополнительное правило для текущего проекта.
Примечание
Чтобы создать правило очистки для проекта, вы должны быть владельцем этого проекта.
- Откройте ваш проект.
- Перейдите в раздел Настройки → Политика очистки данных. Здесь вы можете увидеть глобальные правила очистки для вашего инстанса.
- Нажмите + Создать.
- Выберите Артефакт для удаления и Статус результата теста из выпадающих списков.
- Укажите параметр Удалять артефакт через (в часах). Он определяет количество часов между запуском теста и очисткой данных.
- Нажмите Отправить.
Как работает очистка
Очистка происходит в два этапа:
- Сбор файлов, подлежащих удалению.
- Медленное удаление файлов, отмеченных для очистки.
Сбор файлов, подлежащих удалению
Составление списка файлов, подлежащих удалению, — тяжелый запрос для базы данных, поэтому эта операция выполняется ночью.
ТестОпс запускает задачи очистки в разное время для разных типов правил:
- Глобальные правила начинают обрабатываться в 02:00.
- Проектные правила начинают обрабатываться в 02:30.
Запрос к базе данных ищет файлы, время создания которых соответствует правилу очистки, и перемещает записи в специальную таблицу для последующей очистки.
Примечание
В некоторых случаях файлы из одного результата теста могут попадать под разные правила очистки и удаляться в разное время. Подробнее об этом можно узнать в разделе Дополнительные этапы теста.
Медленное удаление файлов, отмеченных для очистки
После того как файлы были добавлены в список очистки, ТестОпс начинает удаление файлов группами из этого списка:
- Каждые 5 минут ТестОпс делает запрос к хранилищу на удаление группы из 1 000 файлов из списка очистки.
- Если хранилище удаляет файл или сообщает об ошибке, запись удаляется из таблицы очистки, и файл считается удаленным.
Совет
Размер группы файлов, удаляемых каждые 5 минут, зависит от типа развертывания вашего инстанса ТестОпс. 1 000 файлов — значение по умолчанию для большинства конфигураций.
Устранение неполадок и тонкая настройка
Изменение размера группы файлов
Если ваши тесты генерируют большое количество файлов, удаление 1 000 файлов за раз может быть недостаточным, поэтому ваша очередь очистки в базе данных будет постоянно расти, и хранилище не будет освобождаться. Чтобы это исправить, вы можете увеличить размер группы файлов для удаления.
Как проверить
Чтобы проверить размер очереди очистки, выполните следующий SQL-запрос к базе данных сервиса testops утром (09:00), в середине дня (около 14:00) и в конце дня (например, в 19:00):
sql
SELECT COUNT(*) FROM blob_remove_task;
Если к концу рабочего дня размер очереди очистки больше нуля, вам нужно увеличить размер группы файлов, удаляемых каждые 5 минут. Для этого измените значение параметра ALLURE_SCHEDULER_CLEANER_BLOB_BATCHSIZE
в настройках сервиса testops, например:
sh
ALLURE_SCHEDULER_CLEANER_BLOB_BATCHSIZE: 2000
Если размер очереди составляет несколько сотен тысяч или миллионов записей, вам нужно временно указать очень большое значение для этого параметра. Сделать это нужно во время минимальной нагрузки (в выходные или ночью), иначе это негативно повлияет на общую производительность ТестОпс — во время обработки результатов тестов ТестОпс активно использует хранилище, и операции обработки результатов тестов и очистки будут конкурировать за ресурсы хранилища.
Важно
Размер группы файлов для удаления должен быть разумным. Не увеличивайте параметр резко, так как это значительно ухудшит производительность вашего хранилища и общую производительность ТестОпс.
Когда следует менять значение ALLURE_SCHEDULER_CLEANER_BLOB_BATCHSIZE
Значение параметра ALLURE_SCHEDULER_CLEANER_BLOB_BATCHSIZE
нужно изменять только в случае, если вы создали все нужные правила очистки, но размер хранилища все равно увеличивается или не меняется со временем. Иными словами, если вы создаете больше файлов, чем удаляете.
Дополнительные этапы теста
Автоматизированные тесты, запускаемые с использованием одного из адаптеров Allure, могут иметь этапы подготовки и очистки (SetUp
и TearDown
). Так как эти этапы могут иметь результат, отличающийся от результата самого теста, ТестОпс может применять к ним разные правила очистки.
В качестве примера предположим, что мы создали два правила очистки для вложений:
- Удалять вложения в успешных результатах тестов через 1 час.
- Удалять вложения в неуспешных результатах тестов через 24 часа.
В таком случае, если мы загрузим результат теста, в котором основная часть была пройдена успешно, а этап очистки завершился с ошибкой, такой результат попадет под оба этих правила. Если в основной части теста есть вложения, они будут удалены через час. Если вложения есть в этапе очистки, они будут удалены через 24 часа.
Советы и рекомендации
Ручной запуск очистки
В интерфейсе ТестОпс нет элементов для запуска очистки вне расписания, но вы можете использовать для этого методы API:
Откройте страницу с описанием API ТестОпс, добавив
/swagger-ui.html
к URL-адресу вашего инстанса ТестОпс.Перейдите в раздел cleanup-controller и запустите один из методов API:
/cleanup/scheduler/cleaner_schema_global
— для запуска глобальных правил очистки;/cleanup/scheduler/cleaner_schema_project
— для запуска проектных правил очистки.
Быстрое создание правил очистки для проекта
Чтобы быстро создать полный набор правил очистки на уровне проекта, вы можете использовать этот shell-скрипт:
shell
ALLURE_TOKEN=<ваш токен ТестОпс>
ALLURE_ENDPOINT=<URL-адрес вашего инстанса ТестОпс>
ALLURE_PROJECT_ID=<ID вашего проекта>
TARGET_ARTEFACT="attachment scenario fixture"
TEST_STATUS="passed failed broken unknown skipped"
DELETE_DELAY=48
for ARTEFACT in $TARGET_ARTEFACT
do
for STATUS in $TEST_STATUS
do
echo "Marking ${ARTEFACT} for ${STATUS} tests for deletion after ${DELETE_DELAY} after creation \n"
curl -X POST "${ALLURE_ENDPOINT}/api/rs/cleanerschema" --header "accept: */*" --header "Content-Type: application/json" --header "Authorization: Api-Token ${ALLURE_TOKEN}" -d "{\"projectId\": ${ALLURE_PROJECT_ID},\"status\": \"${STATUS}\",\"target\": \"${ARTEFACT}\",\"delay\": ${DELETE_DELAY}}"
echo "\n"
done
done
Вы также можете использовать этот скрипт для создания глобальных правил очистки. Для этого в запросе cURL удалите параметр \"projectId\": ${ALLURE_PROJECT_ID},
.