Gestión y Ledger de Estado
El Estado (testform.state) es el registro autoritativo que mapea la intención declarativa de tus archivos de prueba contra los resultados reales y atributos físicos de cada ejecución.
Al igual que en Terraform el archivo de estado registra los IDs de las instancias de nube creadas, en Testform el estado guarda los identificadores remotos de las pruebas, los hashes de contenido para detección de cambios, el estado de ejecución (passed, failed, skipped) y los valores de salida (outputs).
Archivo de Estado (testform.state)
Sección titulada «Archivo de Estado (testform.state)»El estado es un archivo estructurado en JSON que se genera y actualiza tras cada testform apply. Almacena la reconciliación canónica de testcase, testrun y testplan:
{ "version": "1.0.0", "testform_version": "1.1.0", "serial": 12, "lineage": "c8f2b1a9-45e1-...", "resources": [ { "address": "tests/features/cart.case.feature.@tc-01", "type": "github_testcase", "name": "tc-01", "status": "passed", "hash": "a1b2c3d4...", "attributes": { "title": "Agregar producto al carrito", "issueNumber": 401 } }, { "address": "tests/runs/checkout.run.feature.@tr-01", "type": "github_testrun", "name": "tr-01", "status": "failed", "attributes": { "title": "Ejecución Regresión Checkout", "status": "failed", "testcases": { "tests/features/cart.case.feature.@tc-01": "passed", "tests/features/cart.case.feature.@tc-02": "failed" }, "metadata": {} } }, { "address": "tests/plans/sprint42.plan.feature.@tp-01", "type": "github_testplan", "name": "tp-01", "status": "failed", "attributes": { "title": "Plan de Certificación Sprint 42", "status": "failed", "testruns": { "tests/runs/checkout.run.feature.@tr-01": "failed" }, "metadata": {} } } ], "outputs": { "login_title": { "value": "Inicio de sesión exitoso", "type": "string" } }}Atributos Clave de Recursos en el Estado
Sección titulada «Atributos Clave de Recursos en el Estado»| Campo | Recurso(s) | Descripción |
|---|---|---|
status |
testcase, testrun, testplan |
Resultado de ejecución o veredicto consolidado (Rollup Verdict). |
testcases |
testrun |
Mapa clave-valor { [identidad_caso]: estado } de todos los casos ejecutados. |
testruns |
testplan |
Mapa clave-valor { [identidad_run]: estado } de las suites agrupadas en el plan. |
metadata |
testrun, testplan |
Objeto extensible para atributos arbitrarios del proveedor (builds, CI/CD, tags remotos). |
Bloqueo de Estado Concurrente (testform.state.lock)
Sección titulada «Bloqueo de Estado Concurrente (testform.state.lock)»Para prevenir condiciones de carrera y corrupción cuando múltiples miembros del equipo o pipelines de CI/CD ejecutan pruebas simultáneamente, Testform implementa bloqueo atómico de estado:
- Antes de iniciar cualquier plan o aplicación, Testform adquiere un lock (
testform.state.lock). - El archivo de bloqueo registra el ID del proceso (PID), usuario, hostname y timestamp.
- Si otro proceso intenta acceder al estado mientras está bloqueado:
[ERROR] Error acquiring the state lock: Lock Info: ID: a9b8c7-lock Path: testform.state Operation: OperationTypeApply Who: runner-1@ci-node-4 Created: 2026-10-24 17:15:00 UTCDetección de Deriva (Drift Detection)
Sección titulada «Detección de Deriva (Drift Detection)»Durante la fase de reconciliación (testform refresh o testform plan):
- Testform calcula el checksum criptográfico del código actual de cada escenario.
- Si el código local o los resultados remotos han variado respecto a lo grabado en el estado, se genera un plan de actualización (
~ update). - Las modificaciones no intencionadas o pruebas que fallan de manera silenciosa son detectadas de inmediato.