Testing Files Generator
Українська

Для чого це використовують

П'ять завдань, що виникають майже в кожному проєкті, який приймає файли від людей, і команда, що розв'язує кожне. Кожен приклад нижче запускається як написано.

Ліміти завантаження

Перевірка того, що ліміт розміру файлу застосовується там, де заявлено

Ліміт - це три тестові випадки, а не один: трохи нижче, рівно за лімітом і трохи вище. Отримати їх вручну означає рахувати числа байтів і сподіватися, що ви не помилилися на одиницю. Запросіть натомість набір:

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

Сторінка форматів перелічує налаштування кожного формату та найменший файл, яким він може бути.

Посібники

Два з них докладніше

Для кого це

QA-інженери, автоматизація тестування та всі, за чиїм кодом стоїть форма завантаження, процедура імпорту, парсер чи квота сховища. Працює на машині взагалі без мережі, що важливо в закритому корпоративному середовищі, де генератор у браузері - не варіант.

Безкоштовно, відкритий код, GPL-3.0. Без реєстрації. Збірки для Windows і macOS підписані та запускаються без попереджень.