@alejandrojca/elmulo-reporter 2.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,412 @@
1
+ # Elmulo Reporter
2
+
3
+ Elmulo Reporter captura ejecuciones de Cypress y genera un dashboard con
4
+ historial SQLite, tendencias, evidencias, anotaciones y exportación ejecutiva
5
+ en PDF. El reporter se distribuye como un paquete independiente para evitar que
6
+ su implementación viva dentro de los proyectos de pruebas que lo consumen.
7
+
8
+ ## Requisitos
9
+
10
+ - Node.js 18 o superior.
11
+ - Cypress 12 o superior cuando se utiliza la integración Cypress.
12
+
13
+ ## Instalación
14
+
15
+ Desde GitHub Packages o el registro interno de la organización:
16
+
17
+ ```bash
18
+ npm install --save-dev @alejandrojca/elmulo-reporter
19
+ ```
20
+
21
+ Durante el desarrollo también se puede instalar directamente desde GitHub:
22
+
23
+ ```bash
24
+ npm install --save-dev git+https://github.com/alejandrojca/Elmulo-Reporter.git
25
+ ```
26
+
27
+ ## Guía para QA: usar Elmulo en el repositorio Cypress
28
+
29
+ Esta sección explica el flujo completo para una persona que ya tiene el
30
+ repositorio de Cypress descargado en su computadora. No es necesario descargar
31
+ este repositorio de Elmulo por separado ni copiar archivos manualmente.
32
+
33
+ ### 1. Abrir una terminal en la carpeta correcta
34
+
35
+ Abrir Git Bash o una terminal desde la carpeta principal del repositorio
36
+ Cypress. Es la carpeta que contiene, entre otros, estos elementos:
37
+
38
+ ```text
39
+ package.json
40
+ cypress/
41
+ ```
42
+
43
+ La ubicación exacta puede ser diferente en cada computadora. Todos estos
44
+ ejemplos son válidos:
45
+
46
+ ```text
47
+ C:\Cypress
48
+ D:\Proyectos\acceptance-tests
49
+ C:\Users\usuario\repos\acceptance-tests
50
+ /home/usuario/proyectos/acceptance-tests
51
+ ```
52
+
53
+ Elmulo no depende de una ruta fija. Lo importante es ejecutar los comandos
54
+ desde la carpeta donde se encuentra `package.json`.
55
+
56
+ ### 2. Comprobar las herramientas necesarias
57
+
58
+ Ejecutar:
59
+
60
+ ```bash
61
+ node --version
62
+ npm --version
63
+ git --version
64
+ ```
65
+
66
+ Node.js debe ser versión 18 o superior. Si alguno de los comandos no existe,
67
+ solicitar ayuda para instalar Node.js o Git antes de continuar.
68
+
69
+ En Windows se recomienda usar Git Bash para los comandos de reportes del
70
+ proyecto Cypress, porque esos comandos ejecutan scripts `.sh`.
71
+
72
+ ### 3. Actualizar el repositorio Cypress
73
+
74
+ Cambiar a la rama de trabajo y descargar la versión más reciente:
75
+
76
+ ```bash
77
+ git switch develop
78
+ git pull origin develop
79
+ ```
80
+
81
+ Si Git informa que existen cambios locales o conflictos, no eliminarlos sin
82
+ revisarlos. Pedir ayuda al equipo antes de continuar para no perder trabajo.
83
+
84
+ ### 4. Instalar las dependencias
85
+
86
+ Ejecutar desde la misma carpeta:
87
+
88
+ ```bash
89
+ npm install
90
+ ```
91
+
92
+ Este comando lee el `package.json` del repositorio Cypress e instala Elmulo
93
+ Reporter junto con las demás dependencias. Debe ejecutarse después de clonar el
94
+ proyecto y cada vez que cambien sus dependencias.
95
+
96
+ Comprobar que Elmulo quedó instalado:
97
+
98
+ ```bash
99
+ npm ls @alejandrojca/elmulo-reporter
100
+ ```
101
+
102
+ El resultado debe mostrar `@alejandrojca/elmulo-reporter` y su versión. No es
103
+ necesario modificar manualmente la configuración de Cypress si la integración
104
+ ya está incluida en la rama descargada.
105
+
106
+ ### 5. Ejecutar las pruebas y generar el reporte
107
+
108
+ Para sandbox, por ejemplo:
109
+
110
+ ```bash
111
+ npm run report-sandbox-ecommerce -- "@mtt"
112
+ ```
113
+
114
+ Para QA:
115
+
116
+ ```bash
117
+ npm run report-qa-ecommerce -- "@mtt"
118
+ ```
119
+
120
+ Estos comandos ejecutan Cypress, generan los datos de Cucumber y finalmente
121
+ generan Elmulo. Al terminar debe existir:
122
+
123
+ ```text
124
+ elmulo-results/
125
+ ```
126
+
127
+ Si ya existe una ejecución capturada y solamente se necesita regenerar Elmulo:
128
+
129
+ ```bash
130
+ npm run elmulo:generate
131
+ ```
132
+
133
+ ### 6. Abrir el dashboard
134
+
135
+ Ejecutar:
136
+
137
+ ```bash
138
+ npm run elmulo:serve
139
+ ```
140
+
141
+ Abrir en el navegador:
142
+
143
+ ```text
144
+ http://127.0.0.1:4178
145
+ ```
146
+
147
+ Mantener la terminal abierta mientras se usa el dashboard. Para detener el
148
+ servidor, volver a la terminal y presionar `Ctrl+C`.
149
+
150
+ Si el puerto `4178` ya está ocupado, iniciar Elmulo en otro puerto:
151
+
152
+ ```bash
153
+ npx elmulo serve 4190
154
+ ```
155
+
156
+ En ese caso, abrir `http://127.0.0.1:4190`.
157
+
158
+ ### 7. Entender qué sucede con el historial
159
+
160
+ Cada persona tiene su propio directorio `elmulo-results` y su propia base
161
+ `elmulo.sqlite`. Este directorio no se sube a Git, por lo tanto:
162
+
163
+ - hacer `git pull` no descarga el historial de otra persona;
164
+ - clonar el repositorio comienza con un historial local vacío;
165
+ - eliminar `elmulo-results` elimina el historial y las evidencias locales;
166
+ - para trasladar el historial se debe copiar el directorio completo, no sólo
167
+ `elmulo.sqlite`.
168
+
169
+ ### Problemas frecuentes
170
+
171
+ #### `elmulo` no se reconoce como comando
172
+
173
+ Ejecutar nuevamente:
174
+
175
+ ```bash
176
+ npm install
177
+ ```
178
+
179
+ Usar `npm run elmulo:generate` o `npx elmulo` en lugar de ejecutar `elmulo`
180
+ directamente desde una terminal cualquiera.
181
+
182
+ #### No existe una ejecución capturada
183
+
184
+ Primero ejecutar uno de los comandos de reporte Cypress, por ejemplo:
185
+
186
+ ```bash
187
+ npm run report-sandbox-ecommerce -- "@mtt"
188
+ ```
189
+
190
+ #### No aparece el historial de otro integrante
191
+
192
+ Es el comportamiento esperado. Los resultados son locales y están excluidos
193
+ de Git. Para compartirlos se debe transferir el directorio `elmulo-results` por
194
+ un medio externo o utilizar un almacenamiento persistente compartido.
195
+
196
+ ### Cambiar la ubicación de los resultados (opcional)
197
+
198
+ Normalmente no es necesario. Si se desea almacenar los resultados en otra
199
+ carpeta, configurar `ELMULO_OUTPUT_DIR` antes de ejecutar Cypress o Elmulo.
200
+
201
+ PowerShell:
202
+
203
+ ```powershell
204
+ $env:ELMULO_OUTPUT_DIR = "D:\Reportes\elmulo-results"
205
+ npm run report-sandbox-ecommerce -- "@mtt"
206
+ ```
207
+
208
+ Git Bash, Linux o macOS:
209
+
210
+ ```bash
211
+ export ELMULO_OUTPUT_DIR="/ruta/reportes/elmulo-results"
212
+ npm run report-sandbox-ecommerce -- "@mtt"
213
+ ```
214
+
215
+ ## Integración con Cypress
216
+
217
+ Registrar el plugin dentro de `setupNodeEvents`:
218
+
219
+ ```js
220
+ const {
221
+ registerElmuloReporter,
222
+ } = require("@alejandrojca/elmulo-reporter/cypress");
223
+
224
+ module.exports = defineConfig({
225
+ e2e: {
226
+ setupNodeEvents(on, config) {
227
+ registerElmuloReporter(on, config, {
228
+ environment: "sandbox",
229
+ });
230
+
231
+ return config;
232
+ },
233
+ },
234
+ });
235
+ ```
236
+
237
+ Si el proyecto utiliza un multiplexor de eventos como `cypress-on-fix`, Elmulo
238
+ debe recibir la función `on` ya envuelta para convivir con los demás plugins.
239
+
240
+ Agregar el soporte del navegador al archivo de soporte de Cypress:
241
+
242
+ ```ts
243
+ import "@alejandrojca/elmulo-reporter/support";
244
+ ```
245
+
246
+ Esto habilita la captura acotada de comandos, la captura de `cy.request` y el
247
+ comando opcional `cy.elmuloAttach(...)`. Los logs generales continúan
248
+ sanitizados y no se persisten `consoleProps`.
249
+
250
+ ### Requests y respuestas de pruebas fallidas
251
+
252
+ Elmulo captura automáticamente todos los `cy.request` de todas las features.
253
+ Si la prueba termina fallida, guarda cada request y su respuesta en `run.json`,
254
+ en el HTML generado y en la columna `http_json` de `elmulo.sqlite`. En la
255
+ pestaña **Error**, ambos aparecen cerrados por defecto y pueden desplegarse
256
+ para analizar el problema. Si la prueba termina correctamente, esos datos no
257
+ se conservan.
258
+
259
+ La captura HTTP es deliberadamente literal: **no oculta ni reemplaza ningún
260
+ valor**. Headers, tokens, cookies, credenciales, parámetros y cuerpos quedan en
261
+ texto plano tal como fueron enviados o recibidos. Por eso:
262
+
263
+ - no subir `elmulo-results` a Git;
264
+ - no compartir la base, el HTML ni `runs/` fuera de los canales autorizados;
265
+ - aplicar al directorio de resultados los mismos controles que a las
266
+ credenciales y a los datos del ambiente probado;
267
+ - revisar qué datos se incluirán antes de implementar o utilizar una futura
268
+ integración que cree bugs en Jira.
269
+
270
+ Si un proyecto no puede almacenar estos datos, se puede desactivar la captura
271
+ sin modificar las features.
272
+
273
+ PowerShell:
274
+
275
+ ```powershell
276
+ $env:ELMULO_CAPTURE_HTTP = "false"
277
+ npm run report-sandbox-ecommerce -- "@mtt"
278
+ ```
279
+
280
+ Git Bash, Linux o macOS:
281
+
282
+ ```bash
283
+ ELMULO_CAPTURE_HTTP=false npm run report-sandbox-ecommerce -- "@mtt"
284
+ ```
285
+
286
+ También puede configurarse `captureHttp: false` al llamar a
287
+ `registerElmuloReporter`.
288
+
289
+ ## Comandos
290
+
291
+ Los comandos se ejecutan desde la raíz del proyecto Cypress consumidor:
292
+
293
+ ```bash
294
+ npx elmulo finalize
295
+ npx elmulo serve
296
+ npx elmulo serve 4178
297
+ npx elmulo retention 50
298
+ npx elmulo demo
299
+ ```
300
+
301
+ - `finalize` consolida la última ejecución y actualiza SQLite.
302
+ - `serve` publica el dashboard y las APIs locales.
303
+ - `retention` conserva la cantidad indicada de corridas.
304
+ - `demo` genera datos de demostración.
305
+
306
+ ## PDF ejecutivo configurable
307
+
308
+ Desde la pantalla **Resumen**, el botón **Exportar PDF ejecutivo** abre una
309
+ ventana sobre el reporte. Allí se pueden marcar las secciones que formarán el
310
+ documento. La portada, la identificación de la corrida, la fecha de generación
311
+ y la numeración de páginas se incluyen siempre.
312
+
313
+ La selección recomendada incluye resumen, distribución por estado, contexto,
314
+ Features, problemas, comparación, historial, pruebas inestables, fallos
315
+ recurrentes y recomendación. La sección de pruebas más lentas se encuentra
316
+ desmarcada inicialmente.
317
+
318
+ Las secciones ejecutivas se distribuyen en un flujo continuo: una sección puede
319
+ comenzar en el espacio disponible de la página anterior y las tablas se dividen
320
+ solo cuando es necesario. De esta forma, seleccionar o quitar secciones no crea
321
+ una página independiente por cada bloque ni deja páginas finales con una única
322
+
323
+
324
+ El puerto predeterminado es `4178`. Puede configurarse mediante
325
+ `ELMULO_PORT`. La salida puede cambiarse con `ELMULO_OUTPUT_DIR`; el plugin y
326
+ la CLI deben utilizar el mismo valor.
327
+
328
+ ### Reejecutar una corrida histórica
329
+
330
+ En **Ejecuciones > Tendencia**, seleccionar una corrida muestra la acción
331
+ **Reejecutar reporte**. Elmulo vuelve a lanzar el script npm que originó esa
332
+ corrida y le entrega el mismo ambiente y la misma expresión de tags.
333
+
334
+ Las corridas nuevas registran automáticamente `npm_lifecycle_event`. Si un
335
+ proyecto tiene más de un script de reporte para el mismo ambiente, se puede
336
+ elegir explícitamente el reutilizable:
337
+
338
+ ```powershell
339
+ $env:ELMULO_RERUN_SCRIPT = "report-sandbox-ecommerce"
340
+ npm run elmulo:serve
341
+ ```
342
+
343
+ También puede declararse `rerunScript` en las opciones de
344
+ `registerElmuloReporter`. El servidor acepta una sola reejecución simultánea y
345
+ lanza npm sin interpolar parámetros en un shell.
346
+
347
+ Si el workflow recibe otros argumentos dinámicos además de tags, deben
348
+ registrarse explícitamente como un array. Se conservan como argumentos
349
+ estructurados y se vuelven a pasar a npm sin concatenarlos:
350
+
351
+ ```powershell
352
+ $env:ELMULO_RERUN_ARGS_JSON = '["--browser","chrome","--config","video=false"]'
353
+ npm run report-sandbox-ecommerce
354
+ ```
355
+
356
+ La misma configuración puede indicarse mediante `rerunArgs` al registrar el
357
+ plugin. Cuando una corrida guarda `execution.args`, éstos tienen prioridad; si
358
+ no existen, Elmulo conserva la compatibilidad histórica pasando la expresión
359
+ de tags como único argumento posicional. Los parámetros que nunca fueron
360
+ persistidos por corridas antiguas no pueden reconstruirse.
361
+
362
+ El bloqueo de concurrencia pertenece al proceso de `elmulo serve`: evita dos
363
+ reejecuciones desde esa instancia, pero no coordina otros servidores Elmulo que
364
+ apunten al mismo proyecto.
365
+
366
+ ## Salida
367
+
368
+ Por defecto, Elmulo crea `elmulo-results` en la raíz del proyecto Cypress:
369
+
370
+ ```text
371
+ elmulo-results/
372
+ ├── elmulo.sqlite
373
+ ├── latest-run.txt
374
+ ├── report/
375
+ │ ├── index.html
376
+ │ └── assets/
377
+ └── runs/
378
+ └── <run-id>/
379
+ ├── run.json
380
+ ├── run.raw.json
381
+ └── media/
382
+ ```
383
+
384
+ La base y `runs/` forman una unidad: para migrar o respaldar el historial deben
385
+ conservarse ambos. El directorio de resultados no debe almacenarse en Git; en
386
+ CI debe persistirse como artefacto o montarse sobre un volumen durable.
387
+
388
+ ## Datos complementarios
389
+
390
+ Durante `finalize`, Elmulo busca `jsonlogs/cucumber.json` en la raíz del
391
+ proyecto consumidor para enriquecer escenarios con pasos y tags. Si el archivo
392
+ no existe, el reporte se genera con la información nativa de Cypress.
393
+
394
+ Videos y screenshots referenciados por Cypress se copian a la carpeta `media`
395
+ de la corrida, manteniendo el reporte portable.
396
+
397
+ ## Desarrollo
398
+
399
+ ```bash
400
+ npm install
401
+ npm test
402
+ npm run pack:check
403
+ ```
404
+
405
+ La suite utiliza `node:test` y valida normalización de resultados, reintentos,
406
+ SQLite, tendencias, anotaciones, auditoría, sanitización y PDF ejecutivo.
407
+
408
+ ## Persistencia y despliegue
409
+
410
+ SQLite funciona bien con una instancia de Elmulo que escribe sobre un volumen
411
+ persistente. Para múltiples réplicas escritoras o ejecuciones concurrentes debe
412
+ incorporarse coordinación o migrarse el almacenamiento a una base cliente-servidor.
package/VERSION.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "Elmulo Reporter",
3
+ "version": "2.0.0-beta.5",
4
+ "schemaVersion": 3,
5
+ "source": "elmulo-reporter",
6
+ "results": "elmulo-results",
7
+ "port": 4178,
8
+ "status": "beta"
9
+ }