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>}.
1. Declaración de Locales y Funciones AST
Sección titulada «1. Declaración de Locales y Funciones AST»Testform cuenta con un motor de expresiones AST sandboxed propio que soporta funciones estándar de transformación:
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')}"2. Catálogo de Funciones Soportadas
Sección titulada «2. Catálogo de Funciones Soportadas»| 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')} |
3. Resolución en Cascada
Sección titulada «3. Resolución en Cascada»Testform resuelve dependencias transitivas mediante un evaluador de múltiples pasadas:
${var.domain}se resuelve a"empresa.com".${local.base_url}toma dicho valor y evalúa la función${format(...)}.${local.login_endpoint}se resuelve finalmente a"https://staging.empresa.com/auth/v1/login".
4. Uso en Escenarios Gherkin
Sección titulada «4. Uso en Escenarios Gherkin»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