Documentación de k0lmena Automation Framework

Todo lo necesario para instalar, configurar y usar el framework: front, API, mobile, performance, reportes y auto-healing.

Repositorio: github.com/underc0delabs/k0lmena · Licencia ISC · Powered by QARMY - Underc0de

Qué es y qué incluye

k0lmena es un framework de automatización de QA que reúne, en un mismo repositorio y con una misma sintaxis (Gherkin/BDD + TypeScript), cuatro tipos de pruebas:

TipoMotorDescripción
Front / E2EPlaywright + CucumberPruebas de interfaz sobre Chromium, Firefox y WebKit.
APIAxios + CucumberPruebas de endpoints HTTP con validación de respuestas.
MobileWebdriverIO + AppiumPruebas sobre apps móviles (local/Appium o BrowserStack).
PerformanceArtillery + k6Pruebas de carga, estrés, soak y spike (HTTP y browser).

Además incorpora auto-healing de locators, reportes HTML por cada tipo de prueba, herramientas de apoyo (generador de locators, tester de enlaces rotos, grabador y modo debug) y captura automática de screenshots, traces y logs ante fallos.

Tecnologías

  • TypeScript
  • Playwright (E2E, tracing y codegen)
  • Cucumber (@cucumber/cucumber, BDD/Gherkin)
  • Axios (API)
  • WebdriverIO + Appium (mobile)
  • Artillery y k6 (performance)
  • Cheerio (parsing de HTML en herramientas)

Estructura del proyecto

src/
├── front-test/        # E2E (UI): Playwright + Cucumber
│   ├── features/      # Gherkin scenarios (.feature)
│   ├── steps/         # Step definitions
│   ├── locators/      # Element selectors
│   ├── config/        # Config (BASEURL from .env)
│   ├── hooks/         # Browser setup, screenshots, traces
│   ├── utils/         # interactions, validations, keys, types
│   └── auto-healing/  # Locator history
├── api-test/          # features/ + tests/ (axios)
├── mobile-test/       # apps/ features/ steps/ locators/ support/
├── performance-test/  # artillery/ + k6/
├── reports/           # front/ api/ mobile/ performance/
└── tools/             # crawler/ link-tester/ generator/ debug/

Archivos raíz relevantes: package.json, cucumber.js (perfiles), playwright.config.ts, tsconfig.json, .example.env.

Requisitos previos

  • Node.js (LTS recomendado): nodejs.org
  • Visual Studio Code (opcional)
  • Para mobile: Appium y un emulador o dispositivo (o una cuenta de BrowserStack).
  • Para performance con k6: el binario se instala con el script de bootstrap.

Instalación

git clone https://github.com/underc0delabs/k0lmena.git
cd k0lmena
npm install                # dependencias
npx playwright install     # navegadores de Playwright
cp .example.env .env       # archivo de entorno

Después editá el .env con tus valores.

Configuración (variables de entorno)

General / Front

VariableDefaultDescripción
BASEURL—URL del sitio bajo prueba (front, crawler, link-tester, codegen).
BROWSERvacíochromium, firefox o webkit. Vacío ejecuta los tres.
PARALLELvacíoEjecución en paralelo de Cucumber (front y API).
HEADLESStrueEjecutar sin ventana.
SLOWMO0Milisegundos de retardo entre acciones.
VIEWPORT_WIDTH1366Ancho del viewport.
VIEWPORT_HEIGHT768Alto del viewport.
LOCALEes-ARLocale del navegador.
TIMEZONEAmerica/Argentina/MendozaZona horaria del navegador.
TRACEoffTraces de Playwright: off, on u on-failure.
REPORT_DIRsrc/reports/frontCarpeta de screenshots y traces.

API

VariableDefaultDescripción
API_BASEURLhttps://petstore.swagger.ioURL base de la API bajo prueba. Se carga desde .env.api.

Auto-healing

VariableDefaultDescripción
K0LMENA_AUTO_HEALINGoffModo: off, learn, heal u on.
K0LMENA_AUTO_HEALING_FLUSHdebouncedEstrategia de escritura: debounced, immediate u onEnd.
K0LMENA_AUTO_HEALING_WRITE_PRETTY01 = JSON legible.
K0LMENA_AUTO_HEALING_LOG01 = logs verbosos.
K0LMENA_AUTO_HEALING_CONSOLE1Imprime una línea cuando un locator se cura.
K0LMENA_AUTO_HEALING_HISTORY_PATH.k0lmena/auto-healing/front-history.jsonRuta del historial.
K0LMENA_AUTO_HEALING_MAX_CANDIDATES12Máximo de candidatos por locator.
K0LMENA_AUTO_HEALING_SNAPSHOT_TIMEOUT_MS250Timeout del snapshot del DOM al aprender.
K0LMENA_AUTO_HEALING_CANDIDATE_TIMEOUT_MS1500Timeout al validar cada candidato.

Front / E2E (UI)

npm run test       # escenarios @Smoke, con 1 reintento
npm run allTests   # todos los tests

Los perfiles de Cucumber están en cucumber.js. Podés controlar navegador y modo por variables:

BROWSER=chromium HEADLESS=false SLOWMO=300 npm run test
TRACE=on-failure npm run test

Ejecución en paralelo

PARALLELComportamiento
vacío / 0 / 1 / false / off / noSecuencial (por defecto).
on / true / yesAuto: un worker por CPU.
N (> 1)N workers en paralelo.
PARALLEL=4 npm run test
PARALLEL=on npm run apiTest
  • Cada worker es un proceso independiente; el auto-healing escribe un historial por worker para evitar colisiones.
  • El perfil debug corre siempre en secuencial.
  • El paralelismo es por escenario: para máxima velocidad conviene fijar un único navegador por corrida.

API

npm run apiTest   # escenarios etiquetados @API

Definí API_BASEURL en .env.api. Los steps viven en src/api-test/tests/.

Mobile

npm run mobile    # WebdriverIO + Appium

La configuración está en src/mobile-test/support/wdio.conf.ts. Por defecto corre contra Appium local (localhost:4723); incluye un bloque comentado para BrowserStack con BROWSERSTACK_USER y BROWSERSTACK_KEY.

Performance

Artillery

npm run load   # test de carga, genera report.json

k6

npm run bootstrap:k6     # instala el binario la primera vez
npm run k6:build         # compila los escenarios TypeScript
npm run k6::smoke
npm run k6:stress
npm run k6:soak
npm run k6:spike
npm run k6:run:browser

Los escenarios de k6 están en src/performance-test/k6/http/ y se compilan con esbuild a dist/.

Importante: una prueba de carga genera tráfico real. Corrédla solo contra ambientes de prueba o con autorización de los dueños del sistema.

Reportes

ÁreaComandoDescripción
Frontnpm run reportReporte HTML completo.
Frontnpm run report-defaultReporte por defecto de Cucumber.
APInpm run api-reportReporte de la suite de API.
Mobilenpm run mobile-reportReporte de la suite mobile.
Performancenpm run load-reportReporte HTML de Artillery.
Performance (cloud)npm run load-report-cloudSube el reporte a Artillery Cloud.
Nota: para los reportes en la nube necesitás una KEY de artillery.io. Pasala como secret o variable; no la dejes escrita en package.json.

Ante un fallo en front, el framework adjunta screenshot, logs de consola del navegador y, si TRACE está activo, el trace de Playwright.

Auto-healing de locators

k0lmena puede recuperar locators que dejan de funcionar cuando la aplicación cambia. Funciona en dos fases:

  1. Learn: cada vez que una acción tiene éxito, guarda locators alternativos del elemento (data-testid, id, name, aria-label, rol, texto, clases) en un historial.
  2. Heal: si el locator original falla, prueba los candidatos guardados (rankeados por éxito histórico y página) hasta encontrar uno que funcione, y lo reporta.
ModoComportamiento
offDesactivado (por defecto).
learnSolo aprende candidatos.
healSolo cura con el historial existente.
onAprende y cura (recomendado).
K0LMENA_AUTO_HEALING=on npm run test

Cuando un locator se cura vas a ver en consola HEALED: <original> -> <candidato> y el evento queda adjunto en el reporte.

Herramientas

Todas usan BASEURL del .env, salvo que se indique otra cosa.

Crawler (generador de locators)

npm run crawler
npx ts-node src/tools/crawler/locators-generator.ts https://mi-sitio.com

Salida: src/tools/crawler/output/locators-output.ts

Link tester

npm run link-tester        # página base
npm run link-tester:full   # todo el sitio

Record (Playwright codegen)

npm run record
npm run record:generator

Debug

npm run debug

Integración continua (CI)

El workflow .github/workflows/Tests.yaml corre en GitHub Actions (disparo manual) dentro del contenedor oficial de Playwright y ejecuta, en orden: instalación de dependencias y navegadores, front tests + reporte, API tests + reporte, performance (Artillery) + reporte, y publicación de los reportes como artifacts.

Cómo agregar un test nuevo

  1. Feature: creá o editá un .feature en src/front-test/features/.
  2. Locators: agregá los selectores en src/front-test/locators/.
  3. Steps: implementalos en src/front-test/steps/ usando las funciones de utils/interactions.ts (getByPlaceholderAndFillIt, getElementByRoleAndClickIt, selectByLabel, click, fill).
  4. Ejecutá con npm run test (o etiquetá el escenario con @Smoke).

Las utilidades de interacción ya integran el auto-healing, así que tus steps se benefician sin código extra.

Referencia de scripts npm

ScriptQué hace
testFront: escenarios @Smoke (perfil front, 1 reintento).
allTestsEjecuta todos los tests.
report / report-defaultReporte front completo / por defecto de Cucumber.
apiTest / api-reportEjecuta / reporta la suite de API.
mobile / mobile-reportEjecuta / reporta la suite mobile.
load / load-report / load-report-cloudPerformance con Artillery.
bootstrap:k6 / k6:buildInstala k6 / compila los escenarios.
k6::smoke · k6:stress · k6:soak · k6:spike · k6:run:browserEscenarios de k6.
crawlerGenerador de locators (POM).
link-tester / link-tester:fullTester de enlaces e imágenes rotas.
record / record:generatorGrabador de tests.
debugFront en modo debug.

Video

Ver el video tutorial en YouTube · Canal de QARMY

Licencia y créditos

k0lmena Automation Framework es open source con licencia ISC. Es un proyecto de la comunidad QARMY y Underc0de.

¿Lo querés en tu empresa?

Lo instalamos, automatizamos tus flujos críticos y capacitamos a tu equipo.

Consultar por WhatsApp