Перейти к основному содержимому

Очистка

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

  • тестовые сценарии (хранятся в базе данных начиная с версии 4.9.x, но все еще очищаются по правилам, описанным в этой главе)
  • фикстуры (общие блоки для тестов, такие как SetUp и tearDown)
  • вложения

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

Важно

Правила очистки работают только для закрытых запусков. Это означает, что если вы настроили очистку артефакта через 24 часа, а у вас есть политика автоматического закрытия запусков, которая закрывает завершенные запуски через 72 часа, артефакты в таком запуске будут удалены через 72 часа, когда запуск будет закрыт.

Правила очистки

ТестОпс позволяет настраивать автоматическую очистку старых файлов.

Существует два типа правил очистки:

  • Глобальные правила очистки
  • Правила очистки для каждого проекта

Глобальное правило очистки применяется ко всем проектам, созданным в экземпляре ТестОпс.

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

Пример: если вы установите глобальное правило для удаления вложений для пройденных тестов через 24 часа, а на уровне проекта укажете удаление тех же артефактов через 25 часов, то эти правила будут применяться к этому проекту вместе – файлы будут удалены через 24 часа, а затем через 25 часов.

Создание глобального правила очистки

Важно

Для создания глобального правила очистки вам нужны права администратора.

  1. На главной странице ТестОпс перейдите в Меню пользователя и выберите Администрирование в выпадающем меню.

  2. Перейдите в раздел Политики очистки.

  3. Нажмите кнопку Создать. Выберите Цель и Статус теста целевого теста из выпадающих списков.

  4. Укажите параметр Задержка очистки (в часах). Он определяет количество часов между запуском теста и очисткой данных.

  5. Нажмите Отправить. Вы также можете Редактировать или Удалить созданные правила.

Создание правила очистки для конкретного проекта

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

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

Важно

Для создания правила очистки для проекта вы должны быть Владельцем проекта.

  1. Откройте нужный проект и перейдите в раздел Настройки.

  2. Перейдите в раздел Политики очистки. Здесь вы можете увидеть глобальные правила очистки для вашей системы.

  3. Нажмите кнопку Создать и укажите Цель, Статус теста и Задержка очистки (в часах) так же, как указано выше.

  4. Нажмите Отправить. Вы также можете Редактировать или Удалить созданные правила.

Как работает очистка

Очистка проходит в 2 этапа:

  1. Сбор файлов, подлежащих удалению.
  2. Медленное удаление файлов, отмеченных для очистки.

Сбор файлов, подлежащих удалению

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

ТестОпс выполняет задачи очистки в 02:00 для глобальных правил, а правила для каждого проекта запускаются в 02:30.

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

Медленное удаление файлов, отмеченных для очистки

После того как файлы добавлены в специальный список для очистки, ТестОпс начинает очистку этого списка:

  1. Каждые 5 минут ТестОпс запрашивает хранилище на удаление 1000 файлов из списка очистки.
  2. Если хранилище удаляет файл или сообщает о проблеме, записи удаляются из таблицы, и такие файлы считаются удаленными.
Важно

Если ваши тесты генерируют много файлов, удаление 1000 файлов за раз может быть недостаточным, поэтому ваша очередь очистки в базе данных будет расти, и хранилище не будет освобождаться. Для тонкой настройки очистки обратитесь к разделу Управление размером пакета очистки этой статьи.

Устранение неполадок и тонкая настройка

Управление размером пакета очистки

ТестОпс собирает список файлов на основе политики очистки и создает задачи удаления блобов (запись в базе данных, указывающая на определенный файл), затем каждые 5 минут ТестОпс запускает задачу удаления блобов. Файлы удаляются пакетами. Значение размера пакета по умолчанию 1000. Это означает, что каждые 5 минут ТестОпс будет запрашивать хранилище блобов на удаление 1000 файлов.

Если ваши тесты создают огромное количество файлов, они хранятся быстрее, чем очистка успевает их удалить, поэтому вы будете наблюдать рост используемого пространства. Вы можете управлять (увеличивать) размер пакета для удаления файлов, добавив специальный параметр в конфигурацию сервиса report.

Как проверить

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

Чтобы понять, достаточно ли размера пакета по умолчанию для удаления файлов, выполните следующее:

Запустите следующий SQL-запрос к базе данных сервиса report утром (09:00), в середине дня (около 14:00) и в конце дня (скажем, в 19:00).

select count(*) from blob_remove_task;

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

ALLURE_SCHEDULER_CLEANER_BLOB_BATCHSIZE: 2000

Если размер очереди составляет несколько сотен тысяч или миллионов записей, то вам нужно установить очень агрессивное значение для удаления файлов, но это нужно делать во время минимальной нагрузки (выходные или ночное время), иначе большой пакет может повлиять на общую производительность ТестОпс, так как во время обработки результатов тестов ТестОпс активно использует хранилище, и операции обработки результатов тестов и удаления будут конкурировать за ресурсы хранилища.

Когда следует применять ALLURE_SCHEDULER_CLEANER_BLOB_BATCHSIZE

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

Важно

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

Советы и хитрости

Ручной запуск процедур очистки

В данный момент в ТестОпс нет элементов интерфейса для запуска правил очистки, но вы можете использовать команды API для инициирования процесса очистки вне установленного расписания.

Откройте описание API ТестОпс, добавив /swagger-ui.html к URL вашего экземпляра ТестОпс. Теперь вам нужно перейти в раздел cleanup-controller и выбрать одну из функций API, которую нужно запустить вне расписания.

Чтобы запустить глобальные правила, вам нужно выполнить /cleanup/scheduler/cleaner_schema_global для глобальных правил очистки или /cleanup/scheduler/cleaner_schema_project для правил очистки по проектам.

Быстрое создание правил очистки для проекта

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

ALLURE_TOKEN=<add token here>
ALLURE_ENDPOINT=<add Allure TestOps URL here>
ALLURE_PROJECT_ID=<YOUR PROJECT 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},.