Variables y Valores Locales
Testform implementa un motor de resolución de variables (variable:) y valores locales (locals:) fuertemente inspirado en Terraform, pero adaptado a la arquitectura y legibilidad nativa de YAML.
No se requieren archivos .tfvars ni JSON: todo se declara y resuelve en YAML.
1. Declaración: variable: vs locals:
Sección titulada «1. Declaración: variable: vs locals:»Bloque variable: (Variables de Entrada)
Sección titulada «Bloque variable: (Variables de Entrada)»Las variables representan parámetros de entrada configurables. Se declaran como un mapa de definiciones con metadatos:
variable: app_url: type: string description: "URL base del entorno de pruebas" default: "https://www.saucedemo.com" environment: type: string description: "Ambiente destino (dev, staging, prod)" default: "dev" default_timeout: type: number default: 5000Se referencian en los archivos .feature mediante:
${var.nombre_variable}
Bloque locals: (Valores Locales y Computados)
Sección titulada «Bloque locals: (Valores Locales y Computados)»Los valores locales representan constantes derivadas o expresiones computadas para evitar repeticiones:
locals: base_url: "${var.app_url}" login_url: "${local.base_url}" api_health: "${local.base_url}/health" tag_env: "@env-${var.environment}"Se referencian mediante:
${local.nombre_local}
Testform resuelve dependencias transitivas (locales que apuntan a otros locales o a variables) mediante múltiples pasadas de resolución, soportando anidamiento arbitrario.
2. Jerarquía de Precedencia (5 Niveles)
Sección titulada «2. Jerarquía de Precedencia (5 Niveles)»Cuando un mismo parámetro o variable se define en múltiples lugares, Testform aplica un orden de precedencia estricto (de menor a mayor prioridad):
▲ MÁXIMA PRIORIDAD│ [Nivel 5] Flags CLI: -var "clave=valor"│ [Nivel 4] Archivos CLI: -var-file="staging.yml"│ [Nivel 2] Dominio / Carpetas: auth/auth.yml, inventory/inventory.yml, etc.│ [Nivel 1] Estándar Terraform: variables.yml, locals.yml│ [Nivel 0] Manifiesto Base: main.yml (defaults globales)▼ BASE / MENOR PRIORIDADNota de Diseño: El Nivel 3 (carga automática por convención
*.auto.vars.yml) fue retirado intencionalmente para evitar sorpresas y mantener total predictibilidad en los pipelines.
Descripción de cada Nivel
Sección titulada «Descripción de cada Nivel»[Nivel 0] Manifiesto Base: main.yml
Sección titulada «[Nivel 0] Manifiesto Base: main.yml»Es el punto de partida del proyecto. Define los valores por defecto globales para que el proyecto pueda inicializarse y ejecutarse sin configuraciones adicionales.
[Nivel 1] Estándar Terraform: variables.yml y locals.yml
Sección titulada «[Nivel 1] Estándar Terraform: variables.yml y locals.yml»Separación limpia en la raíz del proyecto para equipos que prefieren no sobrecargar main.yml.
variables.yml: Contiene únicamente el bloque raízvariable:.locals.yml: Contiene únicamente el bloque raízlocals:.
[Nivel 2] Funcionalidad / Dominio: Archivos modulares en subdirectorios
Sección titulada «[Nivel 2] Funcionalidad / Dominio: Archivos modulares en subdirectorios»Permite a equipos distribuidos mantener variables específicas junto a sus pruebas.
Testform escanea recursivamente el workspace (omitiendo directorios del sistema como node_modules, .git, .testform, dist) y carga cualquier archivo YAML que declare variable: o locals:.
- Ejemplo:
auth/auth.yml,checkout/checkout.yml,inventory/inventory.yml.
[Nivel 4] Archivos CLI: -var-file="nombre.yml"
Sección titulada «[Nivel 4] Archivos CLI: -var-file="nombre.yml"»Permite cargar configuraciones de entorno específicas al ejecutar el CLI:
testform plan -var-file="staging.yml"testform apply -var-file="production.yml" -auto-approve[Nivel 5] Flags CLI: -var "clave=valor"
Sección titulada «[Nivel 5] Flags CLI: -var "clave=valor"»Sobrescribe cualquier valor previo directamente desde la línea de comandos o variables de CI/CD:
testform plan -var="environment=prod" -var="default_timeout=10000"3. Uso en Archivos Gherkin (.case.feature)
Sección titulada «3. Uso en Archivos Gherkin (.case.feature)»Las variables y locales se interpolan de manera transparente tanto en etiquetas (tags) como en pasos (steps) Gherkin:
@testcaseFeature: Autenticación de Usuarios en SauceDemo Como usuario de SauceDemo Quiero autenticarme con mis credenciales Para acceder al catálogo de productos
@tc-1 @auth @smoke ${local.tag_env} Scenario: Inicio de sesión exitoso con usuario estándar Given que navego a "${local.login_url}" When ingreso el usuario "standard_user" And ingreso la contraseña "secret_sauce" And presiono el botón "Login" Then el sistema me redirige a "${var.app_url}/inventory.html" And el título de la página muestra "Products"Al ejecutarse testform plan o testform apply, Testform compila el AST interpolado, asignando las etiquetas resultantes (por ejemplo, @env-dev o @env-staging) y los cuerpos de los pasos ya resueltos.