Ir al contenido

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.


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: 5000

Se 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.


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 PRIORIDAD

Nota 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.


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íz variable:.
  • locals.yml: Contiene únicamente el bloque raíz locals:.

[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:

Ventana de terminal
testform plan -var-file="staging.yml"
testform apply -var-file="production.yml" -auto-approve

Sobrescribe cualquier valor previo directamente desde la línea de comandos o variables de CI/CD:

Ventana de terminal
testform plan -var="environment=prod" -var="default_timeout=10000"

Las variables y locales se interpolan de manera transparente tanto en etiquetas (tags) como en pasos (steps) Gherkin:

@testcase
Feature: 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.