Testing Files Generator
Русский

Создавайте настоящие тестовые файлы точного размера

PDF, PNG, DOCX, ZIP - всего 26 форматов, и каждый из них настоящий файл, который открывается в своей программе, точно того размера, который вы запросили. Каждый запуск ещё и записывает, что ваше приложение должно делать с каждым файлом. Командная строка и десктопное окно, бесплатно и с открытым кодом, всё работает на вашей машине.

Бесплатно, открытый код, GPL-3.0. Без регистрации. Сборки для Windows и macOS подписаны и запускаются без предупреждений.

Десктопное окно Testing Files Generator, подготовленное к записи партии тестовых файлов
Десктопное окно, подготовленное к записи партии файлов. За командной строкой работает тот же движок.

Проблема

Сделать один тестовый файл легко. Сделать нужную тысячу - вот утомительная часть

Вы тестируете программу, принимающую файлы от людей. Рано или поздно вам понадобятся:

Именно это он заменяет. Он создан для QA-инженеров, автоматизации тестирования и всех, за чьим кодом стоит форма загрузки, процедура импорта, парсер или квота хранилища.

Чем он отличается

Другие генераторы останавливаются на байтах. Этот отвечает на то, о чём на самом деле спрашивает ваш тест

Папка с файлами всё равно оставляет вам решать, что должен доказывать каждый из них. Каждый запуск здесь записывает рядом с файлами manifest.json - простой список всего созданного и для каждой записи заявленное ожидание.

Допустим, ваша точка загрузки допускает 1 МБ. Запросите три файла, лежащие на этой границе:

tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
ФайлБайтВаша система должнаПотому что
1mb_under_1b.pdf1048575принятьон в пределах лимита
1mb_at_limit.pdf1048576принятьсам лимит допустим
1mb_over_1b.pdf1048577отклонить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, а не придумывает ожидание. Генератор, который гадает, даёт ложные сбои, а набор тестов, который кричит «волки», в итоге отключают.

Пресеты

Выберите вопрос, получите весь набор

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

Все пресеты и как они связаны с рецептами

Быстрый старт

Три команды, чтобы увидеть работу

  1. Создайте файл

    Один PNG, ровно два мегабайта:

    tfg generate --format png --size 2mb --out ./fixtures
  2. Создайте много файлов

    Десять тысяч файлов журнала, каждый от одного до восьми килобайт, с размерами из seed, чтобы завтра получился тот же набор. Давайте каждому запуску свой каталог - манифест остаётся единственной записью о том, что записал запуск, поэтому инструмент отказывается записывать второй поверх него:

    tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./logs
  3. Проверьте их, затем удалите

    verify сообщает, что ничего не сдвинулось. cleanup удаляет ровно то, что было записано, и ничего больше:

    tfg verify ./logs/manifest.json
    tfg cleanup ./logs/manifest.json --yes

Размеры считаются по 1024, как в вашем файловом менеджере, поэтому 2mb означает 2097152 байта. Подойдёт и простое число байт. Документация охватывает рецепты, манифест и коды завершения.

Что вы получаете

Создан для набора тестов, работающего без присмотра

Скачать

Выберите сборку для вашей системы

Распакуйте архив и запустите. 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 подписаны и запускаются без предупреждений.