Pruebas unitarias con Terratest
Aprenda a escribir pruebas unitarias para sus módulos de Terraform mediante Terratest, una biblioteca de Go para probar código de infraestructura.
Pruebas unitarias con Terratest es una lección gratuita de Terraform Infrastructure as Code en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Terraform Infrastructure as Code, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Terraform Infrastructure as Code incluye 4 lecciones en total.
¿Por qué probar su IaC?
La infraestructura como código (IaC) permite gestionar la infraestructura como si fuera software. Al igual que el software, las configuraciones de IaC pueden contener errores.
- Fiabilidad: Detecte los errores antes de la implementación.
- Coherencia: Asegúrese de que los recursos se aprovisionen según lo previsto.
- Confianza: Realice cambios con menos temor a afectar a la infraestructura existente.
Probar su código de Terraform es fundamental para crear entornos en la nube sólidos y fáciles de mantener.
Pruebas unitarias frente a pruebas de integración
Al probar IaC, normalmente hablamos de dos tipos principales:
- Pruebas unitarias: Se centran en partes pequeñas y aisladas del código, como un único módulo de Terraform. Garantizan que los componentes individuales funcionen correctamente de forma aislada.
- Pruebas de integración: Verifican que varios componentes o módulos funcionen conjuntamente como un sistema, normalmente implementando recursos reales en un entorno de nube.
En esta lección, nos centraremos en las pruebas unitarias de sus módulos de Terraform.
Introducción a Terratest
Terratest es una biblioteca de Go desarrollada por HashiCorp (los creadores de Terraform), diseñada específicamente para probar código de infraestructura.
- Le ayuda a escribir pruebas automatizadas para su código de Terraform, Packer, Kubernetes y otras herramientas de IaC.
- Terratest puede implementar infraestructura real en su proveedor de servicios en la nube, ejecutar aserciones sobre ella y, después, eliminarla.
- Es una herramienta potente tanto para las pruebas unitarias como para las de integración.
Requisitos previos de Terratest
Para comenzar a utilizar Terratest, necesitará algunas cosas:
- Go: Terratest es una biblioteca de Go, por lo que deberá tener Go instalado (se recomienda la versión 1.13 o posterior).
- Terraform CLI: La interfaz de línea de comandos de Terraform debe estar instalada y disponible.
- Credenciales del proveedor de nube: Si va a implementar recursos reales (incluso en pruebas unitarias que interactúen con una API de nube), necesitará acceso autenticado al proveedor de nube (por ejemplo, la CLI de AWS configurada).
También necesitará conocimientos básicos de los conceptos de programación en Go.
Estructura de los archivos de prueba de Go
Las pruebas de Terratest se escriben en Go y siguen las convenciones de prueba estándar de Go:
- Los archivos de prueba terminan en
_test.go(por ejemplo,main_test.go). - Las funciones de prueba comienzan por
Test(por ejemplo,TestMyModule(t *testing.T)). - Utilizan el paquete integrado
testingde Go.
Normalmente, estos archivos se encuentran junto al módulo de Terraform o en un directorio test dedicado.
Explicación de `terraform.Options`
El componente central de una prueba de Terraform con Terratest es la estructura terraform.Options. Este objeto indica a Terratest cómo ejecutar Terraform.
Entre sus campos principales se incluyen:
TerraformDir: Ruta al módulo de Terraform.Vars: Variables de entrada del módulo de Terraform.EnvVars: Variables de entorno que se establecerán para el proceso de Terraform.BackendConfig: Configuración del backend de Terraform.
Es el esquema que utilizará para ejecutar comandos de Terraform dentro de la prueba.
Flujo de trabajo de una prueba básica
Una prueba unitaria típica de Terraform con Terratest sigue estos pasos:
- Definir las opciones: Cree una estructura
terraform.Optionsque apunte a su módulo y establezca las variables. - Implementar: Utilice
terraform.InitAndApply(t, options)para inicializar y aplicar su configuración. - Programar la destrucción: Añada inmediatamente
defer terraform.Destroy(t, options)para garantizar la limpieza cuando termine la prueba. - Comprobar: Utilice
testify/assertde Go oterraform.Outputde Terratest para comprobar las propiedades o salidas de los recursos.
Esto garantiza un entorno de prueba limpio y aislado.
Programar `terraform.Options`
A continuación se muestra un programa sencillo en Go que demuestra cómo configurar terraform.Options. Este es un paso fundamental para cualquier interacción con Terratest.
package main
import (
"fmt"
"path/filepath"
"github.com/gruntwork-io/terratest/modules/terraform"
)
func main() {
// Define the path to your Terraform configuration directory.
// In a real test, this would point to your module under test.
terraformConfigDir := filepath.Join(".", "my-example-module")
// Create a terraform.Options object.
// This struct holds all the configuration for running Terraform via Terratest.
options := &terraform.Options{
TerraformDir: terraformConfigDir,
// You would add input variables here, e.g.:
// Vars: map[string]interface{}{"instance_type": "t2.micro"},
// And environment variables, e.g.:
// EnvVars: map[string]string{"AWS_REGION": "us-east-1"},
}
fmt.Println("--- Terratest Options Configuration Demo ---")
fmt.Printf("Configured Terraform Directory: %s\n", options.TerraformDir)
fmt.Println("This shows how to initialize Terratest options.")
fmt.Println("Actual Terratest unit tests are run using 'go test' command.")
}Comprobar las salidas
Después de aplicar su configuración de Terraform, querrá verificar sus salidas. Terratest proporciona funciones para recuperar estos valores fácilmente.
terraform.Output(t, options, "output_name"): Recupera una salida de cadena individual.terraform.OutputMap(t, options, "output_name"): Recupera una salida de tipo mapa.terraform.OutputList(t, options, "output_name"): Recupera una salida de tipo lista.
A continuación, utilizará las aserciones de prueba de Go (por ejemplo, las de github.com/stretchr/testify/assert) para comprobar si las salidas coinciden con lo esperado.
Compruebe sus conocimientos
Terratest le ayuda a probar su código de Terraform mediante la interacción con recursos de nube reales. ¿Cuál de las siguientes opciones NO es un paso habitual del flujo de trabajo de una prueba unitaria con Terratest?
Resumen y siguientes pasos
¡Ha aprendido los fundamentos de las pruebas unitarias de Terraform con Terratest!
- Terratest es una biblioteca de Go para probar IaC.
- Le permite implementar, comprobar y limpiar infraestructura de nube real.
- Entre sus componentes clave se incluyen los archivos
_test.go,func TestXxx(t *testing.T)y la estructuraterraform.Options. - El flujo de trabajo consiste en definir las opciones, aplicar Terraform, realizar comprobaciones y garantizar la limpieza mediante
defer.
A continuación, explore cómo escribir comprobaciones más complejas e integrar Terratest en sus pipelines de CI/CD para realizar pruebas automatizadas.
Preguntas frecuentes
¿La lección «Pruebas unitarias con Terratest» es gratis?
Sí — el texto completo de «Pruebas unitarias con Terratest» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Terraform Infrastructure as Code, actualiza a CoddyKit PRO. El curso de Terraform Infrastructure as Code incluye 4 lecciones en total.
¿Qué aprenderé en «Pruebas unitarias con Terratest»?
Aprenda a escribir pruebas unitarias para sus módulos de Terraform mediante Terratest, una biblioteca de Go para probar código de infraestructura. Practicas Terraform Infrastructure as Code con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Terraform Infrastructure as Code?
No se requiere experiencia previa. Terraform Infrastructure as Code en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Pruebas unitarias con Terratest»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Terraform Infrastructure as Code?
Sí. Cada lección de Terraform Infrastructure as Code incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- `validate` y `fmt` de Terraform
- Pruebas unitarias con Terratest
- Pruebas de integración de recursos en la nube
- Políticas como código y comprobaciones de cumplimiento