Створюйте справжні тестові файли точного розміру
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 підписані та запускаються без попереджень.