¡Hola a todos!
Siempre miré con escepticismo los marcos de automatización de pruebas con un doble propósito: cobertura de pruebas de UI y API. Por lo general, ejecutará diferentes capas de pruebas en diferentes ejecuciones de prueba (o proyectos de eventos), ya que cada una de ellas probablemente tenga su propia
Recientemente, eché un vistazo a lo que Playwright tiene para ofrecer en términos de pruebas de API y lo comparé con mi experiencia con Cypress , así que esto es lo que tengo para compartir con todos ustedes...
Cypress hizo posible las pruebas de API hace un tiempo. Puede encontrar un artículo en el portal de aprendizaje sobre lo excelente que es esta herramienta en términos de pruebas de API con ejemplos.
Para ejecutar pruebas, necesita instalar las dependencias de su proyecto, ¿correcto? Bueno, Cypress viene con un navegador electrónico , y su instalación puede ser bastante redundante (y llevar mucho tiempo) si desea ejecutar pruebas de API exclusivamente (digamos, tiene trabajos separados en CI para ejecuciones de pruebas de UI y API, que suele ser el caso).
No se ve bien, ¿eh? ☝️
Además, cuando ejecuta pruebas de API , de todos modos inicia un navegador.
Una prueba de API sencilla con Cypress se vería así:
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) }) })
Se ve hermosa
Al igual que Cypress , Playwright es un marco de automatización de pruebas: puede utilizar solo una herramienta de automatización del navegador exclusivamente o todo el marco (ejecutor de pruebas, biblioteca de aserciones, herramienta de automatización del navegador, cliente HTTP, reportero, etc.).
La diferencia aquí es que Playwright no viene con ningún navegador listo para usar; debe instalarlos con un comando separado (si lo desea).
Aquí hace una gran diferencia, ya que en términos de ejecutar pruebas API exclusivamente, no ejecutará ningún navegador ni ninguna otra aplicación de escritorio y ahorrará tiempo de ejecución y recursos en su máquina.
Una prueba API sencilla con Playwright se vería así:
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), }) })
Me gustaría resaltar una sintaxis similar a Jest para afirmar objetos:
expect(await response.json()).toEqual({ token: expect.any(String), })
Esta sintaxis le permite verificar toda la estructura del objeto con una sola llamada expect
☝️
Se supone que las pruebas API son pequeñas y livianas, ya que no requieren demasiado para ejecutarse.
Resumamos el material anterior...
✅ Dramaturgo gana con una instalación limpia 13 veces más rápida desde el primer momento.
ℹ️ Puede reducir el tiempo de instalación de Cypress en CI si usa una imagen con dependencias preinstaladas o las almacena en caché en su almacenamiento de CI .
✅ Playwright gana porque no requiere un navegador para ejecutar pruebas de API, por lo que va directo al grano.
ℹ️ No hay forma de "no ejecutar" el navegador en las pruebas de API, ya que es parte de la lógica del marco.
No puedo elegir un ganador aquí, ya que no hay ventaja objetiva ni para Cypress ni para Playwright .
Ambos obtuvieron una sintaxis bastante sencilla con ligeras diferencias. Yo diría que es decisión del evaluador elegir lo que le gusta aquí.
Definitivamente puedo decir que es lo suficientemente seguro usar Playwright para la automatización de pruebas API debido a su rendimiento. Sería una solución justa si ya tienes pruebas de UI con este marco.
Mi consejo para aquellos que usan Cypress para pruebas de UI y quieren cubrir la capa API : mejor usen algo más ( Jest + Axios , pueden ver un ejemplo allí ).