Создавайте настоящие тестовые файлы точного размера
PDF, PNG, DOCX, ZIP - всего 26 форматов, и каждый из них настоящий файл, который открывается в своей программе, точно того размера, который вы запросили. Каждый запуск ещё и записывает, что ваше приложение должно делать с каждым файлом. Командная строка и десктопное окно, бесплатно и с открытым кодом, всё работает на вашей машине.
Бесплатно, открытый код, GPL-3.0. Без регистрации. Сборки для Windows и macOS подписаны и запускаются без предупреждений.
-
26
настоящих форматов, каждый открывается в своей программе
-
1 байт
точность каждого запрошенного размера, никогда не округляется молча
-
0
соединений куда бы то ни было - без учётной записи, без телеметрии, без проверки обновлений
Проблема
Сделать один тестовый файл легко. Сделать нужную тысячу - вот утомительная часть
Вы тестируете программу, принимающую файлы от людей. Рано или поздно вам понадобятся:
- PDF ровно на 10 МБ, чтобы выяснить, реален ли лимит загрузки
- три файла по обе стороны этого лимита, чтобы поймать ошибки на единицу
- 10 000 файлов журнала, чтобы увидеть, что делает ночное задание, когда папка велика
- ZIP, который действительно содержит 200 документов, а не пустышку с правильным расширением
- файл на 4 ГБ без хранения файла на 4 ГБ в вашем репозитории
- одинаковые фикстуры на ноутбуке и на сервере сборки, байт в байт
Именно это он заменяет. Он создан для QA-инженеров, автоматизации тестирования и всех, за чьим кодом стоит форма загрузки, процедура импорта, парсер или квота хранилища.
Чем он отличается
Другие генераторы останавливаются на байтах. Этот отвечает на то, о чём на самом деле спрашивает ваш тест
Папка с файлами всё равно оставляет вам решать, что должен доказывать каждый из них. Каждый запуск
здесь записывает рядом с файлами manifest.json - простой список всего созданного и
для каждой записи заявленное ожидание.
Допустим, ваша точка загрузки допускает 1 МБ. Запросите три файла, лежащие на этой границе:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
| Файл | Байт | Ваша система должна | Потому что |
|---|---|---|---|
1mb_under_1b.pdf | 1048575 | принять | он в пределах лимита |
1mb_at_limit.pdf | 1048576 | принять | сам лимит допустим |
1mb_over_1b.pdf | 1048577 | отклонить | size_limit |
Три файла, три разных ответа, в машиночитаемом виде. Ваш тест читает манифест, вместо того чтобы вы писали проверки вручную:
import json, os
directory = "edges"
manifest = json.load(open(os.path.join(directory, "manifest.json")))
for entry in manifest["files"]:
response = upload(os.path.join(directory, entry["path"]))
outcome = entry["expected"]["outcome"]
if outcome == "accept":
assert response.ok, entry["path"]
elif outcome == "reject":
assert not response.ok, entry["path"]
Там, где ответ зависит от вашей собственной политики, манифест так и говорит
Он записывает unspecified, а не придумывает ожидание. Генератор, который гадает, даёт
ложные сбои, а набор тестов, который кричит «волки», в итоге отключают.
Пресеты
Выберите вопрос, получите весь набор
Пресет - это набор тестовых файлов, продуманный вокруг одного тестового вопроса, чтобы вам не пришлось выяснять, какие файлы что доказывают. У каждого есть страница о том, что он обычно находит, что входит в набор и какие настройки принимает.
-
Пройдёт ли корректный файл, настолько маленький, насколько позволяет формат?
empty-and-minimal -
Сохранит, покажет и вернёт ли моя система имя файла, которого не ожидала?
filename-handling -
Применяется ли лимит размера ровно там, где он объявлен?
size-boundaries -
Переживёт ли мой импорт таблиц то, что экспортируют настоящие инструменты?
tabular-import -
Знает ли мой читатель, в какой кодировке файл, или угадывает?
text-encoding -
Принимает ли моя форма загрузки то, что должна, и отклоняет ли остальное?
upload-validation
Быстрый старт
Три команды, чтобы увидеть работу
-
Создайте файл
Один PNG, ровно два мегабайта:
tfg generate --format png --size 2mb --out ./fixtures -
Создайте много файлов
Десять тысяч файлов журнала, каждый от одного до восьми килобайт, с размерами из seed, чтобы завтра получился тот же набор. Давайте каждому запуску свой каталог - манифест остаётся единственной записью о том, что записал запуск, поэтому инструмент отказывается записывать второй поверх него:
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./logs -
Проверьте их, затем удалите
verifyсообщает, что ничего не сдвинулось.cleanupудаляет ровно то, что было записано, и ничего больше:tfg verify ./logs/manifest.json tfg cleanup ./logs/manifest.json --yes
Размеры считаются по 1024, как в вашем файловом менеджере, поэтому 2mb означает 2097152
байта. Подойдёт и простое число байт. Документация охватывает рецепты,
манифест и коды завершения.
Что вы получаете
Создан для набора тестов, работающего без присмотра
-
Точный размер, до байта
Запросите 10485761 байт и получите ровно столько. Размер, которого формат не может достичь, - это ошибка с причиной, а не файл неверного размера.
-
26 настоящих форматов
Не нули-заполнители с расширением. Созданный PNG открывается в просмотрщике изображений, DOCX - в Word, ZIP распаковывается. Каждый формат проверяется независимыми читателями до выпуска.
-
Манифест, который служит тестовым оракулом
Путь, размер, SHA-256, формат, seed, версия инструмента - и то, что ваша система должна сделать с файлом.
-
Воспроизводимость
Тот же рецепт и тот же seed, те же байты на любой машине. Коммитьте небольшой рецепт YAML вместо больших бинарных фикстур.
-
Два интерфейса, один движок
Командная строка, созданная для CI, и десктопное окно для исследовательского тестирования. Ни один не урезанная версия другого, и тест сравнивает их возможность за возможностью.
-
Полностью офлайн
Нет учётной записи, облака, телеметрии и проверки обновлений. В бинарный файл командной строки вообще не скомпилирован сетевой стек.
Скачать
Выберите сборку для вашей системы
Распакуйте архив и запустите. tfg - это командная строка, а tfg-gui -
десктопное окно. Нет установщика и ничего, что нужно добавлять на вашу машину.
| Система | Командная строка | Десктопное окно |
|---|---|---|
| Windows | amd64, arm64 |
amd64 |
| Linux | amd64, arm64 |
amd64 |
| macOS | arm64 |
arm64 |
Что подписано, а что нет
Сборки для Windows и macOS подписаны, поэтому запускаются без предупреждения о неизвестном
разработчике. Сборки для Linux не подписаны, потому что у десктопного Linux нет эквивалента,
которым их можно подписать. Каждый архив указан в verify-SHA256SUMS.txt на
странице релиза, так что вы можете проверить, что скачали.
Бесплатно, открытый код, GPL-3.0. Без регистрации. Сборки для Windows и macOS подписаны и запускаются без предупреждений.