Files
IPSExtractor/docs/plan_pruebas/main.tex
T

81 lines
3.9 KiB
TeX

\documentclass[11pt,a4paper,oneside]{report}
\input{preamble}
\begin{document}
\makecover
\chapter*{Control de cambios}
\begin{tabularx}{\textwidth}{@{}l l X@{}}
\toprule
\textbf{Versi\'on} & \textbf{Fecha} & \textbf{Descripci\'on} \\
\midrule
1.0.0 & 13 jul 2026 & Versi\'on inicial del plan de pruebas y estr\'es. \\
1.1.0 & 13 jul 2026 & Entorno real de ejecuci\'on (host Ubuntu compartido 8\,GiB) y perfiles de carga. \\
\bottomrule
\end{tabularx}
\chapter*{Resumen ejecutivo}
Este documento define la estrategia y la matriz de pruebas del monorepo \textbf{IPSExtractor}: API Gateway, extraction/workers ARQ, cleaning, count-api (Go), bot-descarga (API + agent Selenium), PostgreSQL, Redis, MinIO y la aplicaci\'on de escritorio.
Hoy el repositorio cuenta principalmente con pruebas unitarias aisladas; no existe pipeline CI, ni suites de integraci\'on/E2E automatizadas. Este plan cierra ese gap con identificadores trazables (\texttt{UT-*}, \texttt{IT-*}, \texttt{E2E-*}, \texttt{ST-*}, \texttt{CH-*}), SLOs medibles y scripts \textbf{k6} de referencia en \texttt{docs/plan\_pruebas/scripts/}.
\textbf{Importante:} las pruebas de integraci\'on, humo y estr\'es documentadas contra el stack vivo se ejecutan (o se ejecutar\'an) en el host descrito en la secci\'on~\ref{sec:host-pruebas} (laptop Ubuntu 24.04, 8\,GiB RAM, Docker compartido con MLflow, Airflow, n8n, etc.). Los resultados deben interpretarse en ese contexto: un OOM o p95 alto puede deberse a contenci\'on del host, no solo a IPSExtractor.
\tableofcontents
\clearpage
\input{sections/01_introduccion}
\input{sections/02_arquitectura}
\input{sections/03_estrategia}
\input{sections/04_unitarias}
\input{sections/05_integracion}
\input{sections/06_e2e}
\input{sections/07_estres}
\input{sections/08_resiliencia}
\input{sections/09_datos_entornos}
\input{sections/10_herramientas_ci}
\input{sections/11_cronograma_aceptacion}
\appendix
\chapter{Glosario}
\begin{description}[style=nextline,leftmargin=2.2cm,labelwidth=2cm]
\item[ARQ] Cola as\'incrona de workers de extracci\'on sobre Redis.
\item[Claim] Operaci\'on at\'omica que asigna un job \texttt{pending} a un worker.
\item[Gateway] \texttt{api\_gateway}, \'unica puerta HTTP expuesta en el host (:8189).
\item[Imaging] Portal web automatizado por Selenium en el PC del bot.
\item[k6] Herramienta profesional de pruebas de carga (Grafana Labs).
\item[MinIO] Almacenamiento S3-compatible para Excel y PDFs del bot.
\item[SLO] Objetivo de nivel de servicio (latencia, error rate, etc.).
\end{description}
\chapter{Checklist de release}
\begin{enumerate}
\item Unitarios verdes: bots, bot-descarga store, Vitest, \texttt{go test}.
\item Migraciones Alembic en BD limpia (0001--0004).
\item Smoke Compose: \texttt{GET /health/live} y \texttt{GET /health}.
\item E2E-01 a E2E-05 ejecutados en staging (E2E-05 con agent real si hay Imaging).
\item Al menos ST-GW-01, ST-BOT-01, ST-COUNT-01 y ST-EXT-01 con umbrales cumplidos.
\item Informe: p95, error rate, picos RAM, jobs fallidos, costos LLM.
\item \textbf{Entorno citado:} hostname, \texttt{free -h}, \texttt{docker stats}, perfil k6 (\texttt{shared8g}/\texttt{lab}).
\item Sin secretos hardcodeados en compose para entornos de prueba.
\end{enumerate}
\chapter{Mapa de rutas relevantes}
\section*{Gateway (\texttt{:8189})}
\begin{itemize}
\item \texttt{GET /health/live}, \texttt{GET /health}
\item Proxy: \texttt{/tasks/*}, \texttt{/cleaning/*}, \texttt{/count/*}, \texttt{/bot-descarga/*}
\item Timeout JSON 30\,s; uploads (incl.\ \texttt{POST /bot-descarga/jobs}) 600\,s
\end{itemize}
\section*{Bot-descarga API (\texttt{:8200}, v\'ia gateway)}
\begin{itemize}
\item Workers: \texttt{POST /workers/register}, \texttt{POST /workers/heartbeat}
\item Workers: \texttt{GET /workers}, \texttt{GET /workers/me/pending}
\item Jobs: \texttt{POST /jobs}, \texttt{GET/PATCH /jobs/\{id\}}, events, cancel, file, files MinIO
\end{itemize}
\end{document}