Ir al contenido

Meta-Argumento Lifecycle

Al igual que en Terraform, el bloque de meta-argumentos lifecycle en Testform permite modificar el comportamiento estándar del ciclo de vida de los casos de prueba, suites de ejecución y planes maestros.

Testform implementa dos controles esenciales de lifecycle:

  1. prevent_destroy: Bloquea de forma estricta cualquier intento de destruir o cerrar recursos críticos durante un testform destroy o testform plan -destroy.
  2. ignore_changes: Evita que modificaciones externas realizadas en el tablero (GitHub, GitLab, Jira) o campos específicos causen deriva (drift) no deseada o actualizaciones innecesarias.

1. Configuración en YAML (resource.yml o main.yml)

Sección titulada «1. Configuración en YAML (resource.yml o main.yml)»

Siguiendo la paridad con Terraform, el bloque lifecycle es un meta-argumento que pertenece estrictamente dentro de la declaración de resource::

# main.yml o resource.yml
resource:
testcase:
match: "features/*.case.feature"
lifecycle:
prevent_destroy: true # Los casos de prueba quedan protegidos contra destrucción
ignore_changes:
- labels # Ignorar etiquetas añadidas manualmente por QA
- priority # Ignorar cambios de prioridad en tableros Kanban
testrun:
match: "suites/*.run.feature"
lifecycle:
prevent_destroy: false

Para mayor conveniencia, los ingenieros de QA pueden declarar las directivas de lifecycle directamente en los encabezados de los escenarios o características Gherkin:

@auth @smoke
@prevent_destroy
@ignore_changes("labels", "assignees", "priority")
Scenario: Login crítico con credenciales bancarias
Given que el usuario está en el portal de pagos
When ingresa su certificado digital
Then el acceso es concedido
  • @prevent_destroy o @prevent-destroy: Activa la protección contra borrado.
  • @ignore_changes("campo1", "campo2") o @ignore_changes:campo1,campo2: Declara la lista de atributos a excluir de la detección de cambios.

Si un usuario o pipeline de CI/CD intenta ejecutar:

Ventana de terminal
testform destroy -auto-approve

Y uno o más recursos tienen prevent_destroy: true, Testform aborta inmediatamente la operación antes de tocar cualquier recurso en el proveedor:

Error: Instance cannot be destroyed
Resource github_testcase.auth/login.case.feature.@tc-1 has lifecycle.prevent_destroy set, but the plan calls for this resource to be destroyed. To avoid this error and continue with the plan, either disable lifecycle.prevent_destroy or target other resources.

Para proceder con la destrucción de otros recursos sin afectar al recurso protegido, se debe usar la bandera -target:

Ventana de terminal
testform destroy -target=checkout/cart.case.feature.@tc-2

En proyectos reales de QA, miembros del equipo o bots suelen modificar metadatos de las incidencias fuera del código:

  • Asignar el issue a un tester específico (assignees).
  • Agregar etiquetas temporales como needs-review o bug (labels).
  • Mover el ticket a otra columna o cambiar la prioridad (priority).

Sin ignore_changes, cada ejecución de testform refresh o testform plan detectaría estas diferencias como discrepancias (drift) y trataría de sobreescribirlas con el código local.

Al configurar ignore_changes:

  • En testform refresh: Esas diferencias se ignoran y no invalidan el hash local.
  • En testform plan: Testform calcula el hash del recurso omitiendo los atributos ignorados, manteniendo el recurso en estado sincronizado (synced).