Saltar al contenido
SDETRole
SDETRole

Glosario · Automatización de UI

Pruebas basadas en datos (data-driven testing)

En inglés: Data-driven testing

También llamado: pruebas dirigidas por datos, pruebas parametrizadas, tests parametrizados, DDT

Definición

Ejecutar la misma lógica de prueba con muchos conjuntos de entradas y resultados esperados, guardados en una tabla, archivo o fuente de datos y no copiados en cada test.

Las pruebas basadas en datos separan lo que hace una prueba de los datos con los que lo hace. Escribes los pasos una sola vez y luego le das filas de datos: las entradas y el resultado que debe producir cada una. Cada fila se ejecuta como un caso de prueba independiente, con su propio resultado de pasa o falla. Es la forma natural de automatizar el resultado de técnicas como el análisis de valores límite y la partición de equivalencia.

Ejemplo (JUnit 5)

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.assertEquals;

class ShippingFeeTest {

    @ParameterizedTest(name = "order of {0} costs {1} to ship")
    @CsvSource({
        "0.00,   4.99",
        "49.99,  4.99",
        "50.00,  0.00",
        "250.00, 0.00"
    })
    void shippingFee(double orderTotal, double expectedFee) {
        assertEquals(expectedFee, Shipping.feeFor(orderTotal), 0.001);
    }
}

Esto necesita el artefacto junit-jupiter-params. Otras fuentes de datos son @ValueSource, @MethodSource y @CsvFileSource, para datos guardados en un archivo CSV.

Ejemplo (Playwright)

Playwright no tiene una anotación especial; generas los tests en un bucle y das a cada uno un título único:

import { test, expect } from '@playwright/test';

const cases = [
  { email: '', error: 'Email is required' },
  { email: 'not-an-email', error: 'Enter a valid email' },
];

for (const { email, error } of cases) {
  test(`login rejects "${email}"`, async ({ page }) => {
    await page.goto('/login');
    await page.getByLabel('Email').fill(email);
    await page.getByRole('button', { name: 'Sign in' }).click();
    await expect(page.getByRole('alert')).toHaveText(error);
  });
}

Errores comunes

  • Filas que necesitan pasos distintos. Si la mitad de las filas necesita un clic extra, tienes dos tests, no uno lleno de condicionales.
  • Nombres ilegibles. Incluye las entradas clave en el nombre de cada caso para que el informe de fallos diga qué fila se rompió.
  • Hojas de cálculo externas enormes. Los datos lejos del test son difíciles de revisar. Mantén las tablas pequeñas en el propio código; pásalas a archivos solo cuando los datos sean realmente grandes o pertenezcan a otra persona.
  • Volumen en vez de valor. Cincuenta filas de la misma clase de equivalencia añaden tiempo de ejecución, no cobertura.

Escribe para buscar en todo SDETRole.

Búsqueda de texto completo con Pagefind · se ejecuta en tu navegador Abrir la página de búsqueda →