O que é Schemathesis? Teste de API baseado em propriedades com sua especificação OpenAPI

O que é Schemathesis? Uma ferramenta de teste de API baseada em propriedades que transforma sua especificação OpenAPI ou GraphQL em milhares de testes de caso de borda através de `st run`.

Ashley Innocent

Ashley Innocent

24 junho 2026

O que é Schemathesis? Teste de API baseado em propriedades com sua especificação OpenAPI

Apidog para empresas

Implantação local

SSO & RBAC

Conforme SOC 2

Explorar Apidog Enterprise

Se você tem um esquema OpenAPI ou GraphQL, o Schemathesis pode transformá-lo em milhares de casos de teste sem que você precise escrever uma única asserção. Ele lê a especificação, gera entradas "selvagens" e válidas, as dispara em sua API e relata onde as respostas violam o contrato. Este guia explica o que é o Schemathesis, como instalá-lo e executá-lo, o que realmente significa o teste baseado em propriedades e como ele se encaixa ao lado de um fluxo de trabalho de testes funcionais e de contrato no Apidog.

button

O que é Schemathesis?

Schemathesis é uma ferramenta Python de código aberto que gera testes de API automaticamente a partir de um esquema. Você a aponta para uma definição OpenAPI ou GraphQL, e ela constrói casos de teste a partir dos tipos, formatos e restrições que você já declarou. É construída sobre Hypothesis, a biblioteca de testes baseados em propriedades para Python, e é distribuída sob a licença MIT.

A ideia central é simples. Sua especificação já descreve como deve ser uma requisição e uma resposta válidas. O Schemathesis trata essa descrição como uma fonte da verdade e verifica se sua API em execução realmente a honra. Quando a API retorna um 500, envia uma resposta que viola o esquema declarado ou aceita uma entrada que deveria ter rejeitado, o Schemathesis sinaliza o problema.

Você o executa na linha de comando com schemathesis run (ou o apelido mais curto st run). Há também uma integração Python se você quiser controlá-lo a partir do pytest em vez da CLI. A maioria das equipes começa com a CLI porque ela exige quase nenhuma configuração.

O que significa teste baseado em propriedades

A maioria dos testes de API é baseada em exemplos. Você escreve uma requisição, você faz uma asserção sobre uma resposta específica, e o teste passa ou falha naquele único caso. Isso é útil, mas você só pega os bugs para os quais pensou em escrever um teste.

O teste baseado em propriedades inverte a abordagem. Em vez de um exemplo fixo, você descreve uma propriedade que deve sempre ser verdadeira, então deixa a ferramenta gerar centenas de entradas para tentar quebrá-la. Para o Schemathesis, a propriedade é, grosso modo: "nenhuma requisição válida deve derrubar o servidor ou produzir uma resposta que viole o esquema."

O Schemathesis gera entradas a partir das restrições em sua especificação. Se um campo é um inteiro com um mínimo de 1, ele tentará 1, números grandes, valores de limite e os tipos de entradas que enganam a validação ingênua. Quando um teste falha, o Hypothesis reduz a entrada ao menor caso que ainda reproduz o bug, para que você obtenha uma reprodução mínima e legível em vez de um payload aleatório de 4KB.

Isso é diferente do teste de macaco (monkey testing), que lança entradas aleatórias em uma interface para ver o que falha. O teste baseado em propriedades é estruturado. Ele usa o esquema para gerar entradas que são plausíveis e direcionadas, e sabe como deve ser um resultado correto porque a especificação lhe disse.

Instalando e executando o Schemathesis

Schemathesis é um pacote Python, então você precisa de Python 3 e pip. Instale-o da forma usual:

pip install schemathesis

Você também pode executá-lo sem uma instalação permanente usando uvx schemathesis se tiver o uv configurado. Uma vez instalado, o comando básico aponta para um esquema e uma URL base:

st run http://127.0.0.1:8000/openapi.json

Se o seu esquema estiver em disco em vez de atrás de uma URL, passe o caminho do arquivo e diga ao Schemathesis onde está a API ativa:

st run ./openapi.yaml --url http://127.0.0.1:8000

Para uma API autenticada, adicione um cabeçalho:

st run http://127.0.0.1:8000/openapi.json \
  --header 'Authorization: Bearer seu-token'

O Schemathesis descobre cada operação na especificação, gera casos para cada uma e imprime um resumo de quais verificações passaram e quais falharam. As falhas vêm com a requisição exata que ele enviou, para que você possa reproduzi-las com curl ou em qualquer cliente de API. Nomes de flags e valores padrão mudam entre as versões principais, então verifique st run --help em relação à sua versão instalada em vez de confiar em um trecho de blog, incluindo este.

O que o Schemathesis detecta

As verificações padrão visam a lacuna entre o que sua especificação promete e o que seu servidor faz. Aqui está o que tende a surgir.

Problema Como ele se parece
Erros de servidor Uma requisição aciona um 500 em vez de um 4xx tratado ou uma resposta válida
Violações de esquema O corpo da resposta não corresponde ao esquema que você declarou para aquele código de status
Incompatibilidades de código de status A API retorna um código de status que a especificação nunca documentou
Desvio de Content-type O tipo de conteúdo da resposta não corresponde ao que a especificação anuncia
Bugs com estado Uma operação funciona sozinha, mas falha dentro de um fluxo de trabalho multi-etapas realista

Esse último vale uma olhada mais atenta. O Schemathesis pode executar testes com estado, onde ele encadeia operações com base em links em sua especificação, por exemplo, criar um recurso, depois buscá-lo e depois excluí-lo. Bugs que só aparecem em sequência, como um recurso que relata o estado errado após uma atualização, são difíceis de encontrar com testes de uma única requisição. A fase com estado impulsiona essas sequências como uma máquina de estados.

Você pode estender o comportamento padrão com hooks. Hooks são funções Python que permitem personalizar a geração de dados, adicionar suas próprias verificações ou filtrar quais operações são testadas. É assim que as equipes adaptam o Schemathesis a APIs com fluxos de autenticação ou restrições não óbvias que a especificação não pode expressar.

Quando usar o Schemathesis

O Schemathesis ganha seu lugar quando você tem uma especificação OpenAPI ou GraphQL razoavelmente precisa e deseja uma cobertura ampla e barata de casos de borda. Ele é forte em encontrar as falhas para as quais você nunca escreveria um teste manual: entradas não tratadas, formatos de erro não documentados e desvio de contrato entre a especificação e a implementação.

É uma boa opção quando:

É uma opção mais fraca quando sua especificação é incompleta ou desatualizada, pois o Schemathesis só pode testar o que o esquema descreve. Lixo entra, lixo sai. Ele também não substituirá seus testes funcionais baseados em exemplos. Saber que um endpoint nunca falha não é o mesmo que saber que ele retorna o valor correto para uma entrada conhecida. Você precisa de ambos.

Schemathesis e Apidog: onde cada um se encaixa

Apidog e Schemathesis resolvem problemas diferentes e funcionam bem lado a lado. Apidog é uma plataforma completa para projetar, depurar, testar, simular e documentar APIs. Schemathesis é um fuzzer focado em propriedades. Ser honesto sobre o limite é importante aqui.

Apidog não faz fuzzing baseado em propriedades. Seu recurso adjacente mais próximo é o teste de macaco (monkey testing), que envia entrada aleatória para expor falhas. Isso é útil, mas não é o mesmo que teste baseado em propriedades orientado por esquema. O Schemathesis gera entradas a partir das restrições de sua especificação e verifica as respostas em relação ao esquema. Portanto, se você precisa de fuzzing baseado em propriedades, use o Schemathesis, não o Apidog.

Onde o Apidog se encaixa é no resto do ciclo de vida em torno dessa passagem de fuzzing.

Estágio do fluxo de trabalho Schemathesis Apidog
Fuzzing baseado em propriedades a partir de uma especificação Sim, recurso principal Não
Design visual de API e edição de especificação Não Sim
Testes funcionais baseados em exemplos Limitado Sim, construtor de testes visual
Teste de contrato contra uma especificação Parcial, via verificações de esquema Sim, fluxo de trabalho dedicado
Servidores mock a partir de um esquema Não Sim, mock inteligente
Executor de testes CI Sim, st run Sim, apidog run
Documentos gerados automaticamente Não Sim

Um emparelhamento prático seria assim: você projeta e mantém a especificação no Apidog, gera casos de teste funcionais e um servidor mock a partir dela, e os executa no CI com apidog run. Em seguida, você adiciona uma passagem de Schemathesis que faz fuzzing da mesma especificação para falhas de casos de borda e violações de contrato. As duas camadas detectam diferentes classes de bugs. O Apidog confirma que a API faz a coisa certa para casos conhecidos; o Schemathesis caça os casos desconhecidos que a quebram.

Se seu objetivo é transformar uma especificação em um conjunto funcional executável em vez de uma execução de fuzzing, o Apidog pode gerar coleções de testes de API a partir de suas especificações OpenAPI diretamente, e você pode baixar o Apidog para experimentar esse fluxo.

Perguntas frequentes

O Schemathesis é gratuito?

Sim. O Schemathesis é de código aberto sob a licença MIT, e a CLI é gratuita para instalar e executar via pip install schemathesis. Há também uma oferta comercial hospedada para equipes que desejam uma experiência gerenciada, mas a ferramenta principal que você executa localmente e no CI não custa nada.

Qual é a diferença entre schemathesis run e st run?

São o mesmo comando. st é um apelido curto para schemathesis, então st run e schemathesis run fazem exatamente a mesma coisa. Use o que preferir. Ambos aceitam um caminho ou URL de esquema, além de opções como --url e --header.

O Schemathesis pode substituir meus testes de API funcionais?

Não, e não é para isso que ele serve. O Schemathesis verifica se sua API não falha e se as respostas correspondem ao esquema. Ele não verifica a lógica de negócios, como se o cálculo de um desconto está correto. Você ainda precisa de testes funcionais baseados em exemplos e de contrato para isso, que você pode construir e executar no Apidog. Trate o Schemathesis como uma camada adicional de fuzzing, não como um substituto.

O Schemathesis funciona com GraphQL?

Sim. O Schemathesis suporta esquemas OpenAPI e GraphQL. Para GraphQL, ele gera consultas a partir das definições de tipo do esquema e verifica as respostas da mesma forma que faz para APIs REST definidas em OpenAPI.

Conclusão

O Schemathesis é uma ferramenta afiada para um trabalho: pegar sua especificação OpenAPI ou GraphQL e testar sua API ativa contra ela com geração baseada em propriedades. Ele encontra as falhas e violações de contrato que os testes baseados em exemplos perdem, e custa quase nada para adicionar ao CI. O que ele não faz é projetar, simular, documentar ou verificar a lógica de negócios.

É aí que o Apidog o complementa. Projete a especificação, gere testes funcionais e mocks, execute-os no CI com apidog run e documente o resultado, tudo em um só lugar, depois adicione o Schemathesis para fuzzing. Baixe o Apidog para construir o lado de design e funcional desse fluxo de trabalho, e deixe o Schemathesis cuidar da caça a casos de borda.

button

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs