Для чего это используют
Пять задач, которые возникают почти в каждом проекте, принимающем файлы от людей, и команда, решающая каждую. Каждый пример ниже запускается как написано.
Лимиты загрузки
Проверка того, что лимит размера файла применяется там, где заявлено
Лимит - это три тестовых случая, а не один: чуть ниже, ровно по лимиту и чуть выше. Получить их вручную значит считать числа байт и надеяться, что вы не ошиблись на единицу. Запросите вместо этого набор:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
Вы получите три настоящих PDF по 1048575, 1048576 и 1048577 байт и манифест, который говорит, что
первые два нужно принять, а третий отклонить по size_limit. Ваш тест читает
ожидание, вместо того чтобы вы писали три проверки вручную, а когда лимит меняется, вы меняете
одно число и запускаете заново.
То же работает и без пресета, когда нужен один набор границ прямо в команде:
tfg generate --format png --boundary 5mb --out ./png-edges
Непрерывная интеграция
Держать фикстуры вне репозитория, не теряя их
Большие бинарные фикстуры замедляют клонирование репозитория и мешают ревью, а при замене никто не может сказать, что изменилось. Рецепт - это несколько сотен символов YAML, которые пересоздают те же файлы - байт в байт, на любой машине - потому что каждый файл выводится из seed запуска.
- name: build the fixtures
run: tfg generate fixtures.yaml --out ./fixtures
- name: run the tests
run: pytest tests/
- name: nothing moved
run: tfg verify ./fixtures/manifest.json
У каждого исхода свой код завершения, поэтому конвейер отличает плохой рецепт от полного диска и от расхождения при проверке. Неудачный запуск ничего не печатает в стандартный вывод, и разборщик журналов не принимает ошибку за данные.
Масштаб
Выяснить, что происходит, когда папка велика
Процедуры импорта, ночные задания и списки каталогов ведут себя иначе при десяти тысячах файлов, чем при десяти. Размеры, выбранные из диапазона, делают набор похожим на настоящий трафик, а не на десять тысяч одинаковых файлов, и выбор идёт от seed, так что завтра набор будет тем же.
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./fixtures
Проверьте, чего стоил бы запуск, до того как он что-либо запишет, это важно, когда итог измеряется гигабайтами:
tfg generate --format log --size-range 1kb-8kb --count 10000 --dry-run
Запуск больше свободного места на диске отклоняется до записи первого байта, а не заполняет диск и не падает на полпути.
Архивы
Проверка распаковщика на архиве, который действительно содержит файлы
Пустой архив с правильным расширением ничего не доказывает о коде, который его открывает и обходит содержимое. Объявите содержимое, и архив действительно его содержит:
targets:
- id: bundle
format: zip
contains:
- format: txt
count: 200
size: 4kb
Глубина вложенности, число записей и размер содержимого - это то, о чём у процедуры импорта есть своё мнение, и так вы узнаёте, каково оно.
Парсеры и просмотрщики
Проверка того, что ваш собственный код читает формат так же, как настоящее ПО
Каждый формат здесь проверяется независимым читателем до выпуска: PNG открывается и сравниваются его пиксели, DOCX перечитывается отдельными библиотеками, архив распаковывается. Это значит, что файл, который отклоняет ваш парсер, - находка о вашем парсере, а не о генераторе.
tfg generate --format docx --size 300kb --set paragraphs=120 --out ./documents
tfg generate --format xlsx --size 2mb --set rows=400 --set columns=6 --out ./sheets
Страница форматов перечисляет настройки каждого формата и наименьший файл, каким он может быть.
Руководства
Два из них подробнее
- Повреждённые тестовые файлы - файл, намеренно испорченный, точного размера, с записанным в манифесте тем, что с ним должно произойти.
- Тестовые файлы в CI - workflow для GitHub Actions, задание GitLab и коды завершения, которые роняют сборку.
Для кого это
QA-инженеры, автоматизация тестирования и все, за чьим кодом стоит форма загрузки, процедура импорта, парсер или квота хранилища. Работает на машине вообще без сети, что важно в закрытой корпоративной среде, где генератор в браузере - не вариант.
Бесплатно, открытый код, GPL-3.0. Без регистрации. Сборки для Windows и macOS подписаны и запускаются без предупреждений.