Entrevistas de API testing avaliam duas coisas: conhecimento conceitual de métodos HTTP, status codes e fluxos de auth, e julgamento prático sobre o que realmente verificar em cada resposta. As perguntas que derrubam candidatos são baseadas em cenários. Incluem: como testar um endpoint DELETE, como autenticar ao longo de toda a suite, e por que retornar 500 para entrada inválida é um bug.
Perguntas fundamentais
1. "O que é API testing e por que é importante?"
Resposta forte: "API testing significa testar a interface entre frontend e backend diretamente, sem passar pela UI. Você verifica que os endpoints aceitam requisições válidas, retornam respostas corretas, lidam com entradas inválidas de forma elegante, e aplicam autorização corretamente. É importante porque testes de API são mais rápidos que testes de UI, mais estáveis (sem seletores frágeis), e podem capturar bugs mais cedo. Também consigo testar comportamentos que não estão expostos pela UI: APIs internas, limites de permissão, ou casos extremos no tratamento de entradas."2. "Qual é a diferença entre API testing e UI testing?"
| | API Testing | UI Testing |
|-|-------------|------------|
| O que é testado | Requisição/resposta, lógica de negócio | Interface do usuário, elementos visuais, fluxos do usuário |
| Velocidade | Muito rápido (milissegundos) | Mais lento (segundos, inicialização do navegador) |
| Estabilidade | Alta — sem mudanças de DOM | Menor — seletores de UI quebram |
| Cobertura | Lógica de negócio, segurança, integridade de dados | Experiência do usuário, correção visual |
| Ferramentas | Playwright request API, Postman, REST Assured | Playwright, Cypress, Selenium |
Nenhum substitui o outro: eles capturam bugs diferentes.
3. "O que você verifica em um teste de API?"
Um bom teste de API verifica:
- Status code — é 200 quando deveria ser 201? Um token de auth faltando está retornando 401?
- Corpo da resposta — os campos corretos estão presentes? Os valores estão corretos?
- Tipos de dados —
ageé um número ou uma string?is_activeé um boolean? - Campos obrigatórios — campos faltando ou nulos que deveriam estar presentes
- Nenhum dado sensível vazado — hashes de senha, IDs internos, PII que não deveriam estar na resposta
- Respostas de erro — requisições inválidas retornam mensagens de erro úteis com o status code certo?
- Performance — a resposta volta dentro de um tempo aceitável?
4. "Explique os métodos HTTP que você usa em API testing."
| Método | Propósito | Exemplo |
|--------|-----------|---------|
| GET | Recuperar dados | Obter o perfil de um usuário |
| POST | Criar novo recurso | Registrar um novo usuário |
| PUT | Substituir um recurso completamente | Atualizar todos os campos do usuário |
| PATCH | Atualizar parte de um recurso | Atualizar apenas o e-mail do usuário |
| DELETE | Remover um recurso | Deletar uma conta de usuário |
Distinção chave: GET deve ser idempotente (chamá-lo 10 vezes produz o mesmo resultado). DELETE também deve ser idempotente (deletar um recurso já deletado deve retornar 404, não quebrar). POST NÃO é idempotente: chamá-lo duas vezes geralmente cria dois registros.5. "Quais status codes você verifica mais em API testing?"
Em vez de listar todos os status codes, dê uma resposta orientada a testes:
"Sempre verifico que respostas de sucesso usam o código certo: 201 para criação, 204 para deleções, 200 para leituras. Para casos de erro: 400 ou 422 para falhas de validação, 401 para autenticação faltando ou inválida, 403 para permissões insuficientes, 404 para recursos faltando. Presto atenção se o servidor está retornando 500 para entradas inválidas: isso geralmente é um bug; entradas inválidas devem retornar 4xx, não 5xx."Perguntas sobre ferramentas e implementação
6. "Como você testa APIs no Playwright?"
test('POST /users retorna 201 com corpo correto', async ({ request }) => {
const response = await request.post('https://api.becomeqa.com/users', {
data: {
email: 'novo_usuario@test.com',
password: 'ValidPass1',
role: 'member',
},
});
expect(response.status()).toBe(201);
const body = await response.json();
expect(body.id).toBeTruthy();
expect(body.email).toBe('novo_usuario@test.com');
expect(body).not.toHaveProperty('password'); // sem senha na resposta
});request que faz chamadas HTTP sem um navegador. Uso para testes de nível de API e também para configurar dados de teste em testes E2E. Por exemplo, criar um usuário via API antes de testar a UI de login é muito mais rápido do que se registrar pelo formulário."
7. "Como você lida com autenticação em testes de API?"
Estrutura de resposta forte: "Depende do mecanismo de auth. Para autenticação com Bearer token, me autentico uma vez em um hookbeforeAll, armazeno o token, e o incluo nas requisições subsequentes via header Authorization. Para auth baseada em cookie, o Playwright lida com cookies automaticamente. Também testo que requisições não autenticadas retornam 401 e que tokens com permissões insuficientes retornam 403."
let authToken: string;
test.beforeAll(async ({ request }) => {
const response = await request.post('/api/auth/login', {
data: { email: 'admin@test.com', password: 'AdminPass1' },
});
const body = await response.json();
authToken = body.token;
});
test('requisição autenticada funciona', async ({ request }) => {
const response = await request.get('/api/users', {
headers: { Authorization: `Bearer ${authToken}` },
});
expect(response.status()).toBe(200);
});8. "Qual é a diferença entre Postman e Playwright para API testing?"
| | Postman | Playwright |
|-|---------|-----------|
| Tipo | Ferramenta GUI para testes manuais + scriptados | Framework de automação baseado em código |
| Bom para | Exploração de API, verificações rápidas, mocking | Suites de testes automatizados, CI/CD, E2E + API combinado |
| Curva de aprendizado | Baixa | Moderada (requer programação) |
| Integração com CI/CD | Possível (Newman CLI) | Nativo, primeira classe |
| Qualidade do código de teste | Limitada | Suporte completo a TypeScript |
| Debug | Visualizador de requisição/resposta | Logs, trace viewer |
"Uso o Postman para exploração inicial de API: enviar algumas requisições para entender a estrutura da API antes de escrever testes automatizados. Depois passo para o Playwright para a suite de testes real que roda no CI."Perguntas baseadas em cenários
9. "Você está testando um endpoint DELETE. O que você verifica?"
Um teste completo de endpoint DELETE deve verificar:
1. Caminho principal: Deletar um recurso com auth válida → 204 No Content
2. Recurso realmente deletado: GET subsequente → 404
3. Idempotência: Segundo DELETE → 404 (não 500, não 204 novamente)
4. Autorização: Deletar sem auth → 401
5. Usuário errado: Deletar recurso de outro usuário → 403
6. Recurso inexistente: Deletar recurso que nunca foi criado → 404 (não 500)
test('DELETE /orders/:id cobertura completa', async ({ request }) => {
// Criar pedido para deletar
const createResp = await request.post('/api/orders', {
data: { product_id: 1, quantity: 2 },
headers: { Authorization: `Bearer ${userToken}` },
});
const { id } = await createResp.json();
// Deletar
const deleteResp = await request.delete(`/api/orders/${id}`, {
headers: { Authorization: `Bearer ${userToken}` },
});
expect(deleteResp.status()).toBe(204);
// Verificar que foi deletado
const getResp = await request.get(`/api/orders/${id}`, {
headers: { Authorization: `Bearer ${userToken}` },
});
expect(getResp.status()).toBe(404);
// Segundo DELETE → 404, não quebra
const redoResp = await request.delete(`/api/orders/${id}`, {
headers: { Authorization: `Bearer ${userToken}` },
});
expect(redoResp.status()).toBe(404);
});10. "Como você testa o tratamento de erros de uma API?"
"Testo que a API lida com entradas inválidas de forma elegante: nunca retornando 500 para coisas como campos obrigatórios faltando, formatos inválidos, ou valores fora do intervalo. Também verifico que as mensagens de erro são úteis (informam ao cliente o que deu errado) sem ser excessivamente reveladoras (não expõem stack traces ou detalhes internos)."Checklist de testes:
- Campo obrigatório faltando → 400/422 com mensagem de erro clara
- Tipo de dado errado (string onde número é esperado) → 400/422
- Valor fora do intervalo → 400/422
- JSON válido mas falha na lógica de negócio (e-mail duplicado) → 409
- Corpo JSON malformado → 400
- Header Content-Type faltando → 400 ou 415
11. "O que é contract testing e quando você usaria?"
Contract testing verifica que uma API adere a um contrato acordado: a especificação de como requisições e respostas devem parecer. Ferramentas como Pact definem esses contratos entre consumidor (frontend) e provedor (backend).
"Contract testing é útil quando múltiplos times consomem a mesma API. Em vez de rodar testes E2E completos para cada mudança, você verifica que a API ainda corresponde ao contrato do qual cada consumidor depende. Recomendaria em uma arquitetura de microsserviços com múltiplos times, onde a sobrecarga de testes de integração de cada combinação é alta demais."12. "Como você testa paginação em uma API?"
test('paginação retorna tamanhos de página corretos', async ({ request }) => {
// Primeira página
const page1 = await request.get('/api/products?page=1&limit=10');
const body1 = await page1.json();
expect(body1.data).toHaveLength(10);
expect(body1.pagination.current_page).toBe(1);
expect(body1.pagination.total_pages).toBeTruthy();
// Segunda página
const page2 = await request.get('/api/products?page=2&limit=10');
const body2 = await page2.json();
// Itens diferentes da página 1
expect(body2.data[0].id).not.toBe(body1.data[0].id);
// Última página
const lastPage = await request.get(`/api/products?page=${body1.pagination.total_pages}&limit=10`);
const bodyLast = await lastPage.json();
expect(bodyLast.data.length).toBeGreaterThan(0);
expect(bodyLast.data.length).toBeLessThanOrEqual(10);
// Além da última página
const overPage = await request.get(`/api/products?page=${body1.pagination.total_pages + 1}&limit=10`);
expect(overPage.status()).toBe(200); // ou 404, depende do design da API
const bodyOver = await overPage.json();
expect(bodyOver.data).toHaveLength(0); // ou array vazio
});O que os entrevistadores querem ver
Além de acertar as respostas, os entrevistadores notam:
Você pensa em segurança? Mencionar bypass de auth, 401/403 e dados sensíveis vazados sinaliza consciência de segurança. Você testa tanto casos positivos quanto negativos? Os melhores candidatos mencionam naturalmente "e também testaria que entradas inválidas retornam 422, não 500." Você tem experiência prática com ferramentas? Mencionar ferramentas específicas (fixture request do Playwright, Postman, k6) e exemplos de código real sinaliza experiência genuína. Você conecta o API testing ao quadro maior? Mostrar que você usa chamadas de API para configurar dados de testes E2E (e por que isso é melhor do que configuração baseada em UI) demonstra pensamento arquitetural. → Veja também: Testes de API 101: Tudo que Todo Engenheiro QA Precisa Saber em 2026 | Testes de API com Playwright: Além da Interface | Códigos de Status HTTP que Todo Engenheiro QA Precisa Conhecer | Como Se Preparar para uma Entrevista Técnica QA: Guia Passo a Passo