LogoBeersech
Toca fuera para cerrar
LogoBeersech
Toca fuera para cerrar
Volver al blog
Desarrollo

Testing Automatizado: Dormir Tranquilo Mientras El Bot Testea

Testing manual = agotador. Testing automatizado = duermes. Conocé cómo implementar tests sin perder la cabeza.

Agustin Policano

Agustin Policano

Consultor en desarrollo web y SEO tecnico

10 min
Testing Automatizado: Dormir Tranquilo Mientras El Bot Testea

El Impacto Real: Lo Que Cuesta No Testear

Según IBM Systems Sciences Institute, corregir un bug en producción cuesta 10 veces más que detectarlo durante el desarrollo. Para un equipo que factura $500K ARS/mes en proyectos, eso se traduce en diferencias de $30.000-$80.000 ARS por incidente.

El DORA State of DevOps Report 2023 encontró que los equipos con mayor madurez en testing tienen 208x más frecuencia de deployments y 2.604x menor tiempo de recovery ante incidentes. No es suerte: es consecuencia directa de tener cobertura de tests.

El Pesadilla Del QA Manual

Un equipo en San Isidro lanzaba features cada viernes.

Cada viernes, 1 QA manual hacía click en 47 escenarios diferentes:

  • Crear usuario
  • Login correcto/incorrecto
  • Actualizar perfil
  • (y 44 más)

Tiempo: 4 horas. Resultado: 3 bugs se escapaban a producción de todos modos.

Al mes: $12K en developer time arreglando bugs que QA manual no encontró.

Después de implementar testing automatizado:

  • Mismos 47 escenarios en 2 minutos (sin humano)
  • 90% de bugs encontrados ANTES de producción
  • QA manual solo para escenarios complejos (10% del tiempo)

Resultado: $12K en costos de bugs → $2K.

Eso es testing automatizado.

Testing automatizado: herramientas y pipelines CI/CD

Tres Tipos De Tests (De Menos a Más Complejo)

1. Unit Tests (Lo Más Fácil)

Testea una función en aislamiento.

// función a testear
function sumTax(price) {
  return price * 1.21; // 21% IVA Argentina
}

// test
test('sumTax agrega 21%', () => {
  expect(sumTax(100)).toBe(121);
});

Ventajas:

  • Rápido de escribir
  • Rápido de ejecutar
  • Fácil de mantener

Desventajas:

  • No testea interacción real

Tool recomendada: Jest (gratis, simple)

2. Integration Tests (Intermedio)

Testea que componentes funcionen juntos.

// ¿Login + Crear Producto funcionan juntos?
test('Usuario logueado puede crear producto', async () => {
  const user = await login('[email protected]', 'password');
  const product = await createProduct('Iphone', 999);
  expect(product.seller).toBe(user.id);
});

Ventajas:

  • Más realista que unit tests
  • Atrapan bugs de integración

Desventajas:

  • Más lento (accede a DB, APIs)
  • Más complejo de mantener

Tool recomendada: Jest + Supertest

3. E2E Tests (Más Realista)

Testea toda la app como usuario real.

// Usuario entra a sitio, compra producto, recibe email
test('Flujo de compra completo', async () => {
  await page.goto('https://mitienda.com');
  await page.fill('input[type="email"]', '[email protected]');
  await page.fill('input[type="password"]', 'password');
  await page.click('button:has-text("Login")');
  await page.click('button:has-text("Comprar")');
  await expect(page).toContainText('Compra completada');
  // Email fue enviado (verificar en inbox)
});

Ventajas:

  • Totalmente realista (navegador real)
  • Atrapa bugs de UX
  • Usuario real interactuando

Desventajas:

  • Lento (5-10s por test)
  • Frágil (si cambias HTML, se rompe)
  • Caro de mantener

Tool recomendada: Playwright o Cypress

Herramientas: Cuál Elegir Para Tu Stack

El ecosistema de testing en 2025 tiene opciones claras según el tipo de test y el stack tecnológico. Esta tabla resume la elección correcta:

| Herramienta | Tipo | Curva de aprendizaje | Velocidad | Mejor para | |------------|------|---------------------|-----------|-----------| | Playwright | E2E | Media | Muy rápida | Next.js, multi-browser, CI/CD | | Cypress | E2E | Baja | Media | Equipos sin experiencia previa | | Vitest | Unit / Integration | Baja | Ultra rápida | Proyectos Vite, React, Next.js | | Jest | Unit / Integration | Baja | Media | Proyectos legacy con Babel | | Supertest | API | Baja | Rápida | Endpoints REST, Node.js APIs | | Lighthouse CI | Performance | Media | Media | Core Web Vitals en pipeline |

Recomendación para proyectos Next.js en 2025: Playwright para E2E + Vitest para unit/integration. Cubre los tres niveles con una sola curva de aprendizaje por equipo.

Nota sobre Cypress vs Playwright: Cypress fue el estándar entre 2018 y 2022. Playwright lo superó en velocidad, soporte multi-browser nativo (Chromium, Firefox, WebKit) y API más expresiva. Para proyectos nuevos, Playwright es la elección por defecto.

La Pirámide De Testing

        /\
       /  \    E2E (Pocos, lentos)
      /____\
     /      \
    /  I.T.  \  Integration (Moderados, medios)
   /________  \
  /          \
 / Unit Tests \  Muchos, rápidos
/____________\

Regla de oro:

  • 70% unit tests
  • 20% integration tests
  • 10% E2E tests

¿Por qué? Porque unit tests son baratos. E2E tests son caros.

CI/CD: Tests Automáticos en Cada Deploy

Tener tests locales es el primer paso. El salto de calidad real es correrlos automáticamente en cada Pull Request, antes de que el código llegue a main.

GitHub Actions lo hace con 2.000 minutos/mes gratis — suficiente para proyectos medianos. Este es el workflow mínimo para correr Playwright en cada PR:

# .github/workflows/tests.yml
name: Tests

on:
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm ci
      - run: npx playwright install --with-deps
      - run: npm run test:e2e
      - uses: actions/upload-artifact@v4
        if: failure()
        with:
          name: playwright-report
          path: playwright-report/

Con este setup, si un PR rompe el flujo de login o checkout, el merge queda bloqueado automáticamente. El equipo de San Isidro del caso anterior implementó exactamente esto: pasaron de 3 bugs escapándose por semana a 0 en producción durante 4 meses consecutivos.

Impacto medido del CI/CD con testing (DORA 2023):

  • Equipos elite: 208x más deployments por año vs equipos de bajo rendimiento
  • Mean time to recovery: 2.604x más rápido
  • Change failure rate: 7x menor (1.5% vs 46%)

Implementación Rápida (Jest)

Paso 1: Instalar

npm install jest --save-dev
npx jest --init

Paso 2: Escribir Test

// math.test.js
const sum = require('./math');

test('suma 1 + 2 = 3', () => {
  expect(sum(1, 2)).toBe(3);
});

Paso 3: Correr

npm test

Paso 4: Celebrar

✓ test passed.

Caso Real: E-commerce Argentino

Antes:

  • QA manual: 8 horas semana
  • Bugs en producción: 5-7 por sprint
  • Hotfixes: 3-4 por sprint

Después de implementar testing:

Semana 1-2: "Escribir tests es tiempo wasted."

Semana 3: Primeros tests catching bugs.

Mes 1: Bugs en producción = 1-2 (bajó 80%).

Mes 2: QA manual solo hace casos complejos (2 horas semana). Ahorro: 6 horas.

Mes 3+: Confianza al deployar. Sin miedo a romper algo viejo.

ROI: 10 horas de setup → 6 horas ahorradas/semana → recupera en 2 semanas.

Errores Comunes

Error 1: Testear UI Internals (Frágil)

// MAL: Testear elemento específico
expect(document.querySelector('.button-123')).toExist();

// BIEN: Testear comportamiento
expect(screen.getByRole('button', {name: /click me/i})).toBeVisible();

Primero es frágil. Si cambias clase, se rompe.

Error 2: No Testear Happy Path

// MAL
test('login falla con password incorrecto', () => { ... });
test('login falla sin email', () => { ... });

// BIEN
test('login exitoso con credenciales correctas', () => { ... });
test('login falla con password incorrecto', () => { ... });

Necesitas validar que funciona primero.

Error 3: Tests Acoplados

// MAL: Test 1 crea usuario, Test 2 asume que usuario existe
test('crear usuario', () => { ... });
test('actualizar usuario', () => { ... }); // asume test 1 pasó

// BIEN: Cada test es independiente
test('crear usuario', () => { ... });
test('actualizar usuario', () => {
  // setup su propio usuario
});[email protected]

Tests independientes = confiables.

FAQ

¿Cuánto código necesito testear?

Mínimo 70% coverage. Pero más importa qué % de bugs atrapa (usualmente 50%+ si haces bien).

¿Qué testing framework usar?

  • Unit: Jest
  • Integration: Jest + Supertest
  • E2E: Playwright o Cypress

¿Es más caro escribir tests?

Upfront sí (20-30% más tiempo inicial).

Pero a largo plazo no: menos bugs, menos hotfixes.

¿Testing reemplaza QA manual?

No. Manual está para casos complejos, UX, casos edge.

Tests automatizan casos comunes + repetitivos.

Checklist: Testing Mínimo Viable

Antes de considerar el testing "implementado", verificá que tenés estos ítems cubiertos:

Setup básico:

  • [ ] Framework de unit tests configurado (Vitest o Jest)
  • [ ] Framework E2E configurado (Playwright)
  • [ ] Scripts test y test:e2e en package.json
  • [ ] .gitignore actualizado (excluir playwright-report/, test-results/)

Cobertura mínima:

  • [ ] Test del flujo de login y registro
  • [ ] Test del flujo principal del negocio (checkout, creación de registro, acción core)
  • [ ] Test de los casos de error más comunes (campo vacío, credencial incorrecta)
  • [ ] Tests unitarios de las funciones de cálculo o transformación críticas

CI/CD:

  • [ ] Tests corriendo en GitHub Actions en cada PR
  • [ ] Merge bloqueado si los tests fallan
  • [ ] Notificación al equipo cuando falla un test en main
  • [ ] Reporte de resultados guardado como artefacto

Mantenimiento:

  • [ ] Convención definida para nombres de test (*.test.ts, *.spec.ts)
  • [ ] Datos de test aislados (fixtures, no compartir estado entre tests)
  • [ ] Suite completa corre en menos de 3 minutos

Con estos 15 ítems cubiertos, tenés una base de testing que realmente previene regresiones. El Stack Overflow Developer Survey 2024 encontró que el 85% de developers usa algún tipo de testing automatizado — el 15% restante paga el costo en bugs de producción.

Siguiente Paso: Comienza Con Unit Tests

Empieza testing una función crítica.

Veras que es simple. Luego expande.

Nosotros entrenamos equipos en testing automatizado. Desde unit tests hasta E2E.

¿Necesitás implementar testing?

📧 Email: [email protected]

O exploá desarrollo web profesional y software a medida.


Última actualización: Diciembre 2024 Tiempo de lectura: 10 minutos Dificultad: Avanzada

Preguntas frecuentes

¿Qué es el testing automatizado de software?

El testing automatizado es el uso de código para verificar que otro código funciona correctamente. Un bot ejecuta los mismos pasos que haría un QA humano (navegar, hacer click, completar formularios, verificar resultados) pero en segundos y sin error humano. Existen tres niveles: unit tests (verifican funciones individuales), integration tests (verifican módulos trabajando juntos) y E2E tests (verifican flujos completos de usuario como un checkout o un login).

¿Vale la pena implementar testing automatizado para una PyME?

Sí, especialmente si el software tiene flujos críticos de negocio como checkout, login o facturación. El tiempo de escribir tests se recupera en el primer mes: un bug de producción cuesta en promedio 10x más en tiempo de debugging, fixes urgentes y potencial pérdida de clientes que prevenirlo con un test. Para proyectos pequeños, con 20-30 tests E2E bien elegidos se cubre el 80% del riesgo de regresión.

¿Qué herramientas de testing automatizado usar en 2025?

Para aplicaciones web, Playwright es el estándar actual para tests E2E: soporte multi-browser, API potente y mantenimiento activo. Para unit tests en JavaScript y TypeScript, Vitest (más rápido) o Jest. Para APIs REST, Supertest o Postman collections. Para performance automatizado, Lighthouse CI integrado en el pipeline. En proyectos Next.js, la combinación Playwright más Vitest cubre los tres niveles con una curva de aprendizaje razonable.

¿Cuánto tiempo lleva implementar testing automatizado?

Configurar el setup inicial con 10-15 tests E2E críticos (login, flujo principal, casos de error) toma 1-2 semanas. Una suite completa para un e-commerce mediano (100-200 tests cubriendo todos los flujos) toma 4-6 semanas. El mantenimiento ongoing representa aproximadamente el 20-30% del tiempo de desarrollo de nuevas features. El costo se amortiza a partir del segundo mes por la reducción de bugs en producción y el tiempo ahorrado en QA manual.

testingQAautomatizacióndesarrollobugsArgentina
Agustin Policano

Escrito por

Agustin Policano

Consultor en desarrollo web y SEO tecnico

Apasionado por crear experiencias digitales excepcionales y compartir conocimiento con la comunidad.

Testing Automatizado: Dormir Tranquilo Mientras El Bot Testea | Beersech