As duas metades do trabalho do testador de API

Mecânico

  • Enumerar endpoints, escrever o caminho feliz, conferir formatos.

  • Manter sessões, fixtures e limpeza.

  • Reexecutar a suíte e triar os mesmos testes instáveis.

Julgamento

  • Decidir o que significa "correto" quando a especificação não diz nada.

  • Perceber a lógica de negócio da qual alguém poderia abusar.

  • Saber quais falhas importam e quais são ruído.

A geração dá conta bem da primeira coluna e não consegue tocar na segunda, porque a segunda é sobre o produto, não sobre o protocolo.

O que fica mais valioso

  • Definir o que é correto em casos ambíguos. O que deve acontecer quando um desconto e uma promoção se aplicam ao mesmo tempo. Nenhuma especificação diz, e nenhum gerador tem como adivinhar.

  • Pensamento adversarial. Dá para pedir uma quantidade negativa, repetir esta requisição, acessar outra conta mudando um identificador. A cobertura gerada inclui verificações de autorização; ela não inventa o abuso em que você ainda não pensou.

  • Revisar a cobertura gerada. Um plano que atravessa cem endpoints precisa de alguém que corte o ruído e acrescente as regras do produto. É um trabalho rápido, de alto impacto, e exige exatamente o conhecimento que um testador de API tem.

O que parar de fazer na mão

Escrever o teste CRUD número duzentos. Manter a renovação de tokens. Montar fixtures para o grafo de dependências. Reexecutar e triar a mesma suíte instável. Nada disso usa o conhecimento que torna um testador de API valioso, e é justamente aí que as horas vão embora.

Quatro coisas decidem se uma suíte de API sobrevive ao primeiro ano: sessões que expiram, valores que só existem em tempo de execução, chamadas que dependem umas das outras e registros que ninguém limpa. O TestSprite cuida disso com Auto-Authentication, Dynamic Variables, Dependency Chains e Auto-Cleanup, descritos na documentação de testes de API.

A habilidade mais difícil de substituir

Se você está decidindo em que ficar bom, a resposta não é uma ferramenta. É a capacidade de olhar para um requisito ambíguo e nomear as três maneiras pelas quais ele pode ser interpretado.

Pense em uma regra como "usuários só podem ver os próprios pedidos". Quem testa há algum tempo pergunta na hora: e um administrador, e um pedido feito em nome de outra pessoa, e um pedido que foi transferido, o que acontece depois que uma conta é desativada, e um pedido excluído fica invisível ou some de vez. Nada disso está no requisito. Tudo isso vai acontecer em produção.

Nenhum gerador produz essa lista, porque ela não vem da especificação, vem de já ter visto produtos quebrarem. Essa é a parte do trabalho que fica mais valiosa à medida que a metade mecânica fica mais barata.

Um passo prático

Aponte a geração para o seu serviço e gaste seu tempo no plano, não no código. Corte as rotas administrativas, acrescente as regras do produto que ninguém escreveu e acrescente os casos negativos que você consegue imaginar porque conhece o domínio. Você vai cobrir mais em um dia do que em uma semana escrevendo na mão, e a cobertura vai conter o seu conhecimento, e não o de uma especificação.

Terminal

npm install -g @testsprite/testsprite-cli
testsprite setup

A mesma configuração está disponível no dashboard do TestSprite, caso você prefira não instalar nada localmente. O restante da CLI está no repositório da CLI.

O gatilho importa mais do que o mecanismo. Apontá-lo para o seu evento de deploy significa que toda mudança é verificada sem ninguém precisar decidir por isso; o GitHub App faz isso a partir do dashboard, e um passo do GitHub Actions faz isso de dentro do seu workflow.

O que o TestSprite deixa para o seu julgamento

Ele assume a coluna mecânica. O API Discovery enumera o que o serviço expõe, os planos são gerados nas categorias funcional, de schema, de autorização, de tratamento de erros e de limites, e o Auto-Authentication mantém as sessões vivas ao longo de toda a execução, as Dynamic Variables levam valores de uma chamada para outra, as Dependency Chains derivam a ordem de execução a partir do que cada caso precisa e produz, e o Auto-Cleanup remove exatamente o que a execução criou.

O que ele deliberadamente não faz é decidir o que significa "correto". O plano gerado é um ponto de partida que você corta, corrige e amplia, e é nessa edição que o seu conhecimento do produto entra na suíte. Uma hora dedicada a um plano cobre mais do que uma semana escrevendo na mão, e a cobertura contém o seu julgamento, e não o de uma especificação.

O resultado prático para a função: você para de escrever o teste CRUD número duzentos e passa a investir esse tempo em regras ambíguas e casos de abuso, que sempre foram o motivo de você estar ali.

A automação vai substituir os testadores de API?

Ela substitui a metade mecânica. Decidir o que significa "correto" e pensar de forma adversarial não vão a lugar nenhum, e os dois estão cada vez mais raros.

O que eu devo aprender?

O domínio do produto, a fundo. As ferramentas mudam; saber o que o seu sistema promete aos usuários é o que torna um testador difícil de substituir.

Testar API manualmente ainda é útil?

Trabalho exploratório em uma API nova ou alterada, sim. Regressão repetitiva na mão, não, e nunca foi.

Como revisar a cobertura gerada de forma eficiente?

Leia o plano, não o código. Corte o que é ruído, acrescente o que está faltando e concentre sua atenção nos endpoints em que errar sai caro.

E se o meu time não tiver nenhum testador?

Então a metade de julgamento está sendo feita pelos desenvolvedores de forma implícita, ou não está sendo feita. Dar nome a ela é o primeiro passo, seja quem for que acabe assumindo.

A versão curta

Fique com o julgamento, automatize a digitação.

O papel do testador de API está se dividindo em trabalho mecânico, que a geração resolve, e trabalho de julgamento, que está ficando mais valioso. Caminhe na direção de definir o que é correto, pensar de forma adversarial e revisar cobertura, e pare de escrever na mão o teste CRUD número duzentos.