Skip to content

Como testar corretamente o limite de upload de arquivo

Categoria:Técnicas de teste
Este artigo está disponível atualmente apenas em japonês. As versões traduzidas serão publicadas sequencialmente.

Ao desenvolver a funcionalidade de upload de arquivos em uma aplicação web, você se sente seguro ao pensar 「defini o limite em 10MB」? Na verdade, testar o limite de upload tem muitas armadilhas, e sem validação adequada, erros inesperados podem ocorrer no ambiente de produção. Este artigo explica como testar com precisão o limite de upload usando a abordagem de teste de valores limite.

3 casos de teste de valor limite Teste de valor limite com limite de 10MB 10 MB Limite 10MB - 1 byte Sucesso esperado 10MB exact Dependente da implementação 10MB + 1 byte Rejeição esperada 413 0 Validação do lado do servidor incluindo overhead de multipart
Figura 1: Configuração de 3 casos de teste de valor limite

O que é teste de valor limite

Teste de Valor Limite (Boundary Value Testing) é uma das técnicas fundamentais em testes de software. Baseia-se em uma regra prática de que bugs tendem a ocorrer perto dos limites dos valores de entrada, ou seja, em pontos como 「exatamente no limite」, 「um byte antes do limite」 e 「um byte além do limite」.

Em testes de limite de upload de arquivo, você deve preparar no mínimo os seguintes 3 casos de teste.

  • <strong>Arquivo no limite exato</strong> — verificar se o upload tem sucesso
  • <strong>Arquivo 1 byte menor que o limite</strong> — Verificar se é bem-sucedido com certeza
  • <strong>Arquivo 1 byte maior que o limite</strong> — verificar se é rejeitado corretamente

Cuidado com a confusão entre MB e MiB

O erro mais comum ao testar limites de upload é confundir MB (megabytes) com MiB (mebibytes).

  • <strong>1 MB</strong> = 1.000.000 bytes (base decimal, unidades SI)
  • <strong>1 MiB</strong> = 1.048.576 bytes (base binária, unidades IEC)

Essa diferença é de aproximadamente 4,86%, sendo 48.576 bytes de diferença entre 10 MB e 10 MiB. É importante compreender com precisão qual unidade é usada pelo framework do servidor ou serviço em nuvem. Por exemplo, quando você especifica 「10M」 no <code>upload_max_filesize</code> do PHP, é interpretado como 10 MiB (10.485.760 bytes). Por outro lado, alguns CDNs e gateways de API podem tratá-lo como 10 MB (10.000.000 bytes).

Overhead de multipart/form-data

O formato <code>multipart/form-data</code> usado no upload de arquivo inclui overhead além do corpo do arquivo, como strings de boundary, cabeçalho Content-Disposition e códigos de quebra de linha.

Se a verificação de limite no servidor for realizada no corpo da solicitação inteira, mesmo que o corpo do arquivo esteja dentro do limite, pode exceder quando o overhead é incluído. O <code>client_max_body_size</code> do Nginx limita o tamanho do corpo de solicitação inteira, portanto é necessário prestar atenção a este ponto.

# Nginx の設定例
client_max_body_size 10m;  # リクエストボディ全体の上限(MiB単位)

Validação dupla entre front-end e back-end

Durante o teste, verifique se a verificação de tamanho está sendo realizada tanto no frontend (JavaScript) quanto no backend (servidor). Se a verificação for feita apenas no frontend, ela pode ser facilmente contornada usando ferramentas de desenvolvedor ou o comando <code>curl</code>.

// フロントエンドでのサイズチェック例
const MAX_SIZE = 10 * 1024 * 1024; // 10 MiB
fileInput.addEventListener('change', (e) => {
    const file = e.target.files[0];
    if (file.size > MAX_SIZE) {
        alert('ファイルサイズが上限を超えています');
        e.target.value = '';
    }
});

Verificação de mensagens de erro e UX

No teste de valor limite, verifique não apenas se a requisição é bem-sucedida ou falha, mas também os seguintes pontos.

  • Uma mensagem de erro clara é exibida quando o limite é excedido
  • O código de status HTTP está apropriado? (413 Payload Too Large, etc)
  • A barra de progresso funciona corretamente durante o upload de arquivos grandes
  • Se o tratamento de timeout é executado adequadamente

Como obter arquivos de teste

O teste de valor limite preciso requer arquivos de teste com tamanho exato em bytes. O DevLab fornece arquivos de teste de valor limite alinhados aos limites de upload principais.

  • <a href="/ja/files/threshold/">Lista de arquivos para teste de valor limite</a> — Arquivos ajustados aos limites de serviços principais como Gmail (25MB), Discord (25MB), WordPress (10MB)
  • <a href="/ja/files/threshold/10mb/">Conjunto de teste de limite de 10MB</a> — 3 arquivos: exatamente no limite, antes e depois
  • <a href="/ja/files/threshold/25mb/">Conjunto de teste de limite de 25MB</a> — Para anexos de e-mail e ferramentas de chat

Todos os arquivos contêm valores de hash MD5, SHA-1 e SHA-256, portanto, use-os também para verificar a integridade após o download.

Resumo

O teste do limite de upload de arquivo não é suficiente apenas com 「enviar um arquivo grande」. Compreenda a diferença entre MB e MiB, considere o overhead de multipart e valide os valores limites usando arquivos de teste precisos em nível de byte. Utilizando os arquivos de teste de valor limite do DevLab, você pode executar esses testes com eficiência.

Arquivo de teste disponível para usar neste artigo

  • → <a href="/ja/files/threshold/" class="text-primary-600 dark:text-primary-400 hover:underline">Lista de arquivos de teste de limite (9.9MB / 10MB / 10.1MB)</a>
  • → <a href="/ja/files/images/png/" class="text-primary-600 dark:text-primary-400 hover:underline">Lista de arquivos de teste de imagem PNG</a>

Artigos relacionados

  • → <a href="/ja/blog/mb-vs-mib-file-size/" class="text-primary-600 dark:text-primary-400 hover:underline">MB e MiB são diferentes! As armadilhas das unidades de tamanho de arquivo</a>
  • → <a href="/ja/blog/multipart-form-data-overhead/" class="text-primary-600 dark:text-primary-400 hover:underline">Calcular com precisão o overhead de multipart/form-data</a>
  • → <a href="/ja/blog/file-validation-checklist/" class="text-primary-600 dark:text-primary-400 hover:underline">Lista de verificação de implementação de validação de arquivo para formulários web</a>