Para que as pessoas usam
Cinco tarefas que aparecem em quase todo projeto que aceita arquivos de pessoas, e o comando que faz cada uma. Todo exemplo abaixo roda como está escrito.
Limites de upload
Testar se um limite de tamanho de arquivo é aplicado onde diz que é
Um limite são três casos de teste, não um: logo abaixo, exatamente nele e logo acima. Conseguir esses à mão significa calcular contagens de bytes e torcer para não ter errado por um. Peça o conjunto no lugar:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
Você recebe três PDFs reais com 1048575, 1048576 e 1048577 bytes, e um manifesto dizendo que os dois
primeiros devem ser aceitos e o terceiro rejeitado por size_limit. Seu teste lê a
expectativa em vez de você escrever três asserções à mão - e quando o limite muda, você muda um
número e roda de novo.
O mesmo funciona sem preset quando você quer um único conjunto de limites embutido:
tfg generate --format png --boundary 5mb --out ./png-edges
Integração contínua
Manter fixtures fora do repositório sem perdê-las
Fixtures binárias grandes deixam um repositório lento de clonar e chato de revisar, e ninguém sabe dizer o que mudou quando uma é substituída. Uma receita são algumas centenas de caracteres de YAML que reconstroem os arquivos idênticos - byte a byte, em qualquer máquina - porque cada arquivo é derivado do seed da execução.
- 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 término tem seu próprio código de saída, então um pipeline consegue distinguir uma receita ruim de um disco cheio e de uma divergência de verificação. Uma execução com falha não imprime nada na saída padrão, o que impede um parser de logs de ler um erro como dado.
Escala
Descobrir o que acontece quando a pasta é grande
Rotinas de importação, jobs noturnos e listagens de diretório se comportam diferente com dez mil arquivos do que com dez. Tamanhos sorteados de um intervalo fazem o conjunto parecer tráfego real em vez de dez mil arquivos idênticos, e o sorteio vem do seed, então o conjunto é o mesmo amanhã.
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./fixtures
Confira quanto uma execução custaria antes de ela escrever qualquer coisa, o que importa quando o total é medido em gigabytes:
tfg generate --format log --size-range 1kb-8kb --count 10000 --dry-run
Uma execução maior que o espaço livre no disco é recusada antes de o primeiro byte ser escrito, em vez de encher o disco e falhar no meio.
Arquivos compactados
Testar um descompactador com um arquivo compactado que realmente contém arquivos
Um arquivo compactado vazio com a extensão certa não prova nada sobre o código que o abre e percorre o que há dentro. Declare o conteúdo e o arquivo compactado realmente o contém:
targets:
- id: bundle
format: zip
contains:
- format: txt
count: 200
size: 4kb
Profundidade de aninhamento, contagem de entradas e tamanho do que há dentro são coisas sobre as quais uma rotina de importação tem opinião, e é assim que você descobre quais são.
Parsers e visualizadores
Conferir se o seu próprio código lê um formato como o software real
Todo formato aqui é verificado com um leitor independente antes de ser liberado - um PNG é aberto e seus pixels comparados, um DOCX é relido por bibliotecas separadas, um arquivo compactado é extraído. Isso significa que um arquivo que o seu parser recusa é uma descoberta sobre o seu parser, não sobre o gerador.
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
A página de formatos lista as configurações que cada um aceita e o menor arquivo que cada um pode ser.
Guias
Dois deles em detalhe
- Arquivos de teste corrompidos - um arquivo quebrado de propósito, com o tamanho exato e com o que deve acontecer com ele escrito no manifesto.
- Arquivos de teste no CI - um workflow do GitHub Actions, um job do GitLab e os códigos de saída que fazem um build falhar.
Para quem é
Engenheiros de QA, automação de testes e qualquer pessoa cujo código tenha atrás um formulário de upload, uma rotina de importação, um parser ou uma cota de armazenamento. Roda em uma máquina sem rede nenhuma, o que importa em um ambiente corporativo fechado onde um gerador baseado em navegador não é opção.
Gratuito e de código aberto, GPL-3.0. Sem cadastro. Os downloads de Windows e macOS são assinados e iniciam sem aviso.