Ir al contenido

Locals

Los Valores Locales en Testform permiten asignar nombres a expresiones computadas y transformaciones de datos repetitivas, evitando duplicación y facilitando el mantenimiento de las suites de prueba.

Al igual que el bloque locals en Terraform, en Testform se declaran en locals.yml (o en main.yml) y se referencian mediante ${local.<nombre>}.


Testform cuenta con un motor de expresiones AST sandboxed propio que soporta funciones estándar de transformación:

locals.yml
locals:
# Transformación de texto
env_clean: "${lower(trim(var.environment))}"
# Formato con argumentos
base_url: "${format('https://%s.%s', local.env_clean, var.domain)}"
login_endpoint: "${local.base_url}/auth/v1/login"
# Colecciones y fallbacks
default_tags: "${split(',', 'e2e,smoke,regression')}"
api_key: "${coalesce(env('CI_API_KEY'), 'local-dev-key')}"

Categoría Funciones Descripción / Ejemplo
Texto lower, upper Conversión a minúsculas o mayúsculas: ${lower(var.env)}
trim, trimprefix, trimsuffix Limpieza de espacios o prefijos: ${trimprefix(var.url, 'https://')}
format, replace, substr Formato y reemplazo: ${format('%s/v1', var.host)}, ${replace(var.str, 'a', 'b')}
split, join División y unión: ${split(',', 'a,b')}, ${join('-', ['x', 'y'])}
Colecciones contains Comprobación de existencia: ${contains(['dev', 'staging'], var.env)}
length Longitud de array, mapa o texto: ${length(var.tags)}
element, slice Acceso a elementos por índice y recortes: ${element(var.list, 0)}
coalesce Retorna el primer valor no nulo ni vacío: ${coalesce(env('TOKEN'), 'default')}
lookup, merge Búsqueda en mapas y fusión de objetos
Sistema y Entorno env Lectura de variables de entorno del sistema: ${env('GITHUB_TOKEN')}
uuid, timestamp Generación de UUIDs y marcas de tiempo ISO
jsonencode, jsondecode Serialización y deserialización de JSON
file Lectura de contenido de archivos locales: ${file('fixtures/user.json')}

Testform resuelve dependencias transitivas mediante un evaluador de múltiples pasadas:

  1. ${var.domain} se resuelve a "empresa.com".
  2. ${local.base_url} toma dicho valor y evalúa la función ${format(...)}.
  3. ${local.login_endpoint} se resuelve finalmente a "https://staging.empresa.com/auth/v1/login".

Scenario: Login centralizado en entorno dinámico
Given el usuario abre la URL "${local.login_endpoint}"
When envía credenciales válidas
Then es redirigido al dashboard principal