Para qué lo usa la gente
Cinco tareas que aparecen en casi todos los proyectos que aceptan archivos de personas, y el comando que hace cada una. Cada ejemplo de abajo se ejecuta tal como está escrito.
Límites de subida
Probar si un límite de tamaño de archivo se aplica donde dice que se aplica
Un límite son tres casos de prueba, no uno: justo por debajo, exactamente en él y justo por encima. Conseguirlos a mano significa calcular números de bytes y esperar no haberte equivocado en uno. Pide el conjunto en su lugar:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
Obtienes tres PDF reales de 1048575, 1048576 y 1048577 bytes, y un manifiesto que dice que los dos
primeros deben aceptarse y el tercero rechazarse por size_limit. Tu prueba lee la
expectativa en lugar de que escribas tres aserciones a mano - y cuando cambia el límite, cambias
un número y vuelves a ejecutar.
Lo mismo funciona sin preset cuando quieres un único conjunto de límites en línea:
tfg generate --format png --boundary 5mb --out ./png-edges
Integración continua
Mantener los fixtures fuera del repositorio sin perderlos
Los fixtures binarios grandes hacen lento clonar un repositorio y incómodo revisarlo, y nadie puede decir qué cambió cuando se sustituye uno. Una receta son unos cientos de caracteres de YAML que reconstruyen los archivos idénticos - byte a byte, en cualquier máquina - porque cada archivo se deriva de la semilla de la ejecución.
- 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
Cada final tiene su propio código de salida, así que una canalización puede distinguir una receta mala de un disco lleno y de una discrepancia de verificación. Una ejecución fallida no imprime nada en la salida estándar, lo que evita que un analizador de registros lea un error como datos.
Escala
Descubrir qué pasa cuando la carpeta es grande
Las rutinas de importación, los trabajos nocturnos y los listados de directorios se comportan distinto con diez mil archivos que con diez. Los tamaños sacados de un intervalo hacen que el conjunto parezca tráfico real en lugar de diez mil archivos idénticos, y el sorteo viene de la semilla, así que el conjunto es el mismo mañana.
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./fixtures
Comprueba cuánto costaría una ejecución antes de que escriba nada, lo que importa cuando el total se mide en gigabytes:
tfg generate --format log --size-range 1kb-8kb --count 10000 --dry-run
Una ejecución mayor que el espacio libre del disco se rechaza antes de escribir el primer byte, en lugar de llenar el disco y fallar a medias.
Archivos comprimidos
Probar un descompresor con un archivo comprimido que de verdad contiene archivos
Un archivo comprimido vacío con la extensión correcta no demuestra nada sobre el código que lo abre y recorre lo que hay dentro. Declara el contenido y el archivo comprimido lo contiene de verdad:
targets:
- id: bundle
format: zip
contains:
- format: txt
count: 200
size: 4kb
La profundidad de anidamiento, el número de entradas y el tamaño de lo que hay dentro son cosas sobre las que una rutina de importación tiene opiniones, y así descubres cuáles son.
Analizadores y visores
Comprobar que tu propio código lee un formato como lo hace el software real
Cada formato de aquí se comprueba con un lector independiente antes de publicarse - un PNG se abre y se comparan sus píxeles, un DOCX lo vuelven a leer bibliotecas distintas, un archivo comprimido se extrae. Eso significa que un archivo que tu analizador rechaza es un hallazgo sobre tu analizador, no sobre el generador.
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
La página de formatos lista los ajustes que admite cada uno y el archivo más pequeño que puede ser cada uno.
Guías
Dos de ellos con más detalle
- Archivos de prueba corruptos - un archivo roto a propósito, con el tamaño exacto y con lo que debe ocurrirle escrito en el manifiesto.
- Archivos de prueba en CI - un workflow de GitHub Actions, un job de GitLab y los códigos de salida que hacen fallar una compilación.
Para quién es
Ingenieros de QA, automatización de pruebas y cualquiera cuyo código tenga detrás un formulario de subida, una rutina de importación, un analizador o una cuota de almacenamiento. Funciona en una máquina sin red alguna, lo que importa en un entorno corporativo cerrado donde un generador basado en navegador no es una opción.
Gratuito y de código abierto, GPL-3.0. Sin registro. Las descargas de Windows y macOS están firmadas y se inician sin advertencias.