Olá pessoal!
Sempre olhei com ceticismo para estruturas de automação de teste com dupla finalidade - cobertura de teste de UI e API. Normalmente, você executará diferentes camadas de testes em diferentes execuções de testes (ou projetos de eventos), pois cada um deles provavelmente tem seu próprio
Recentemente, dei uma olhada no que o Playwright tem a oferecer em termos de testes de API e comparei com minha experiência no Cypress , então aqui está o que tenho para compartilhar com vocês…
Cypress tornou possível o teste de API há algum tempo. Você pode encontrar um artigo no portal de aprendizagem sobre como essa ferramenta é excelente em termos de testes de API com exemplos.
Para executar testes, você precisa instalar as dependências do seu projeto, correto? Bem, o Cypress vem com um navegador de elétrons e pode ser bastante redundante (e demorado) para instalar se você deseja executar testes de API exclusivamente (digamos, você tem trabalhos separados em CI para execuções de testes de UI e API, o que geralmente é o caso).
Não parece bom, hein? ☝️
Além disso, quando você executa testes de API , ele inicia um navegador de qualquer maneira.
Um teste de API simples com Cypress ficaria assim:
it('Sign in with valid credentials', () => { cy.request('POST', '/auth', { login: Cypress.env('username'), password: Cypress.env('password'), }).should(response => { expect(response.body.token).to.be.a('string') expect(response.status).to.eq(200) }) })
Parece bonito
Assim como Cypress , Playwright é uma estrutura de automação de testes - você pode usar apenas uma ferramenta de automação de navegador exclusivamente ou toda a estrutura (executor de testes, biblioteca de asserções, ferramenta de automação de navegador, cliente HTTP, repórter, etc).
A diferença aqui é que o Playwright não vem com nenhum navegador pronto para uso - você precisa instalá-los com um comando separado (se desejar).
Faz uma grande diferença aqui, pois em termos de execução exclusiva de testes de API , ele não executa nenhum navegador ou qualquer outro aplicativo de desktop e economiza tempo de execução e recursos em sua máquina.
Um teste de API simples com Playwright ficaria assim:
import {test, expect} from '@playwright/test' test('Sign in with valid credentials', async ({request}) => { const response = await request.post('/auth', { data: { login: process.env.USERNAME, password: process.env.PASSWORD, }, }) expect(response.status()).toEqual(200) expect(await response.json()).toEqual({ token: expect.any(String), }) })
Gostaria de destacar uma sintaxe semelhante a Jest de afirmação de objetos:
expect(await response.json()).toEqual({ token: expect.any(String), })
Esta sintaxe permite verificar toda a estrutura do objeto com apenas uma única chamada expect
☝️
Os testes de API devem ser pequenos e leves, pois não exigem muito para serem executados.
Vamos resumir o material acima…
✅ Playwright vence com instalação limpa 13x mais rápida e pronta para uso.
ℹ️ Você pode reduzir o tempo de instalação do Cypress no CI se usar uma imagem com dependências pré-instaladas ou armazená-las em cache no armazenamento do CI .
✅ O Playwright ganha porque não requer um navegador para executar testes de API, então vai direto ao ponto.
ℹ️ Não há como “não rodar” o navegador nos testes da API, pois faz parte da lógica do framework.
Não é possível escolher um vencedor aqui, pois não há vantagem objetiva nem para Cypress nem para Playwright .
Ambos têm uma sintaxe bastante direta, com pequenas diferenças. Eu diria que é decisão do testador escolher o que gosta aqui.
Posso dizer com certeza que é seguro usar o Playwright para automação de testes de API devido ao seu desempenho. Seria uma solução justa se você já tivesse testes de UI com esta estrutura.
Meu conselho para quem usa Cypress para testes de UI e deseja cobrir a camada API - é melhor usar outra coisa ( Jest + Axios , você pode ver um exemplo lá ).