0Pricing
DevOps Bootcamp · บทเรียน

การทดสอบหน่วยด้วย Terratest

เรียนรู้การเขียนการทดสอบหน่วยสำหรับโมดูล Terraform ด้วย Terratest ซึ่งเป็นไลบรารี Go สำหรับทดสอบโค้ดโครงสร้างพื้นฐาน

การทดสอบหน่วยด้วย Terratest เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงต้องทดสอบ IaC

โครงสร้างพื้นฐานในรูปแบบโค้ด (IaC) ช่วยให้คุณจัดการโครงสร้างพื้นฐานได้เหมือนซอฟต์แวร์ เช่นเดียวกับซอฟต์แวร์ การกำหนดค่า IaC ก็อาจมีข้อบกพร่องได้

  • ความน่าเชื่อถือ: ตรวจจับข้อผิดพลาดก่อนนำไปใช้งาน
  • ความสอดคล้อง: มั่นใจว่าทรัพยากรถูกจัดเตรียมตามที่คาดไว้
  • ความมั่นใจ: เปลี่ยนแปลงระบบได้โดยกังวลน้อยลงว่าจะทำให้โครงสร้างพื้นฐานเดิมเสียหาย

การทดสอบโค้ด Terraform มีความสำคัญอย่างยิ่งต่อการสร้างสภาพแวดล้อมระบบคลาวด์ที่แข็งแกร่งและดูแลรักษาได้

การทดสอบหน่วยเทียบกับการทดสอบการผสานรวม

เมื่อทดสอบ IaC เรามักพูดถึงสองประเภทหลัก:

  • การทดสอบหน่วย: มุ่งเน้นส่วนเล็ก ๆ ที่แยกอิสระของโค้ด เช่น โมดูล Terraform เดียว การทดสอบนี้ช่วยให้มั่นใจว่าส่วนประกอบแต่ละส่วนทำงานได้อย่างถูกต้องเมื่อแยกออกจากส่วนอื่น
  • การทดสอบการผสานรวม: ตรวจสอบว่าส่วนประกอบหรือโมดูลหลายส่วนทำงานร่วมกันเป็นระบบได้หรือไม่ โดยมักนำทรัพยากรจริงไปใช้งานในสภาพแวดล้อมระบบคลาวด์

ในบทเรียนนี้ เราจะมุ่งเน้นการ ทดสอบหน่วย ของโมดูล Terraform

แนะนำ Terratest

Terratest เป็นไลบรารี Go ที่พัฒนาโดย HashiCorp (ผู้สร้าง Terraform) โดยออกแบบมาเฉพาะสำหรับการทดสอบโค้ดโครงสร้างพื้นฐาน

  • ช่วยให้คุณเขียนการทดสอบอัตโนมัติสำหรับ Terraform, Packer, Kubernetes และโค้ด IaC อื่น ๆ
  • Terratest สามารถนำโครงสร้างพื้นฐานจริงไปใช้งานกับผู้ให้บริการระบบคลาวด์ของคุณ เรียกใช้การตรวจสอบยืนยันกับโครงสร้างพื้นฐานนั้น แล้วล้างทรัพยากรออกได้
  • มีประสิทธิภาพสำหรับทั้งการทดสอบหน่วยและการทดสอบการผสานรวม

ข้อกำหนดเบื้องต้นของ Terratest

ในการเริ่มต้นใช้งาน Terratest คุณจะต้องมีสิ่งต่อไปนี้:

  • Go: Terratest เป็นไลบรารีของ Go ดังนั้นคุณต้องติดตั้ง Go ไว้แล้ว (แนะนำเวอร์ชัน 1.13 ขึ้นไป)
  • Terraform CLI: ต้องติดตั้งอินเทอร์เฟซบรรทัดคำสั่งของ Terraform และสามารถเรียกใช้งานได้
  • ข้อมูลรับรองผู้ให้บริการคลาวด์: หากคุณกำลังปรับใช้ทรัพยากรจริง (แม้แต่การทดสอบหน่วยที่เรียกใช้ API ของคลาวด์) คุณจะต้องเข้าถึงผู้ให้บริการคลาวด์ด้วยการยืนยันตัวตนแล้ว (เช่น กำหนดค่า AWS CLI ไว้แล้ว)

นอกจากนี้ คุณควรมีความคุ้นเคยพื้นฐานกับแนวคิดการเขียนโปรแกรมด้วย Go

โครงสร้างไฟล์การทดสอบของ Go

การทดสอบของ Terratest เขียนด้วย Go และปฏิบัติตามรูปแบบการทดสอบมาตรฐานของ Go:

  • ไฟล์การทดสอบลงท้ายด้วย _test.go (เช่น main_test.go)
  • ฟังก์ชันการทดสอบขึ้นต้นด้วย Test (เช่น TestMyModule(t *testing.T))
  • ใช้แพ็กเกจ testing ในตัวของ Go

โดยทั่วไปไฟล์เหล่านี้จะอยู่ถัดจากมอดูล Terraform หรืออยู่ในไดเรกทอรี test โดยเฉพาะ

ทำความเข้าใจ `terraform.Options`

หัวใจสำคัญของการทดสอบ Terraform ด้วย Terratest คือโครงสร้าง terraform.Options ออบเจ็กต์นี้จะบอก Terratest ว่าต้องเรียกใช้ Terraform อย่างไร

ฟิลด์สำคัญมีดังนี้:

  • TerraformDir: เส้นทางไปยังมอดูล Terraform ของคุณ
  • Vars: ตัวแปรนำเข้าสำหรับมอดูล Terraform ของคุณ
  • EnvVars: ตัวแปรสภาพแวดล้อมที่จะกำหนดให้กระบวนการ Terraform
  • BackendConfig: การกำหนดค่าสำหรับแบ็กเอนด์ Terraform ของคุณ

สิ่งนี้เปรียบเสมือนแบบแปลนสำหรับการเรียกใช้คำสั่ง Terraform ภายในการทดสอบ

กระบวนการทดสอบพื้นฐาน

การทดสอบหน่วย Terraform ด้วย Terratest โดยทั่วไปมีขั้นตอนดังนี้:

  1. กำหนดตัวเลือก: สร้างโครงสร้าง terraform.Options ที่ชี้ไปยังมอดูลของคุณและกำหนดตัวแปร
  2. ปรับใช้: ใช้ terraform.InitAndApply(t, options) เพื่อเริ่มต้นและนำการกำหนดค่าไปใช้
  3. เลื่อนการทำลายทรัพยากร: เพิ่ม defer terraform.Destroy(t, options) ทันที เพื่อให้แน่ใจว่ามีการล้างทรัพยากรหลังการทดสอบทำงานเสร็จ
  4. ตรวจสอบเงื่อนไข: ใช้ testify/assert ของ Go หรือ terraform.Output ของ Terratest เพื่อตรวจสอบคุณสมบัติหรือผลลัพธ์ของทรัพยากร

วิธีนี้ช่วยให้ได้สภาพแวดล้อมการทดสอบที่สะอาดและแยกเป็นอิสระ

การเขียนโค้ด `terraform.Options`

ต่อไปนี้คือตัวอย่างโปรแกรม Go อย่างง่ายที่สาธิตการตั้งค่า terraform.Options ซึ่งเป็นขั้นตอนพื้นฐานสำหรับการโต้ตอบกับ 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.")
}

การตรวจสอบผลลัพธ์

หลังจากนำการกำหนดค่า Terraform ไปใช้แล้ว คุณจะต้องตรวจสอบผลลัพธ์ Terratest มีฟังก์ชันสำหรับดึงค่าเหล่านี้ได้อย่างสะดวก

  • terraform.Output(t, options, "output_name"): ดึงผลลัพธ์ชนิดสตริงหนึ่งค่า
  • terraform.OutputMap(t, options, "output_name"): ดึงผลลัพธ์ชนิดแผนผัง
  • terraform.OutputList(t, options, "output_name"): ดึงผลลัพธ์ชนิดรายการ

จากนั้นใช้การตรวจสอบของแพ็กเกจ testing ใน Go (เช่น จาก github.com/stretchr/testify/assert) เพื่อตรวจสอบว่าผลลัพธ์ตรงตามที่คาดไว้หรือไม่

ตรวจสอบความเข้าใจของคุณ

Terratest ช่วยให้คุณทดสอบโค้ด Terraform โดยโต้ตอบกับทรัพยากรคลาวด์จริง ข้อใดต่อไปนี้ไม่ใช่ขั้นตอนทั่วไปในกระบวนการทดสอบหน่วยด้วย Terratest

สรุปและขั้นตอนถัดไป

คุณได้เรียนรู้พื้นฐานของการทดสอบหน่วย Terraform ด้วย Terratest แล้ว!

  • Terratest เป็นไลบรารีของ Go สำหรับการทดสอบ IaC
  • ช่วยให้คุณปรับใช้ ตรวจสอบ และล้างโครงสร้างพื้นฐานคลาวด์จริงได้
  • องค์ประกอบสำคัญ ได้แก่ ไฟล์ _test.go, func TestXxx(t *testing.T) และโครงสร้าง terraform.Options
  • กระบวนการประกอบด้วยการกำหนดตัวเลือก การนำ Terraform ไปใช้ การตรวจสอบ และการรับรองว่ามีการล้างทรัพยากรด้วย defer

ถัดไป ลองศึกษาวิธีเขียนการตรวจสอบที่ซับซ้อนยิ่งขึ้น และผสาน Terratest เข้ากับกระบวนการ CI/CD เพื่อการทดสอบอัตโนมัติ

คำถามที่พบบ่อย

บทเรียน “การทดสอบหน่วยด้วย Terratest” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การทดสอบหน่วยด้วย Terratest” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การทดสอบหน่วยด้วย Terratest”

เรียนรู้การเขียนการทดสอบหน่วยสำหรับโมดูล Terraform ด้วย Terratest ซึ่งเป็นไลบรารี Go สำหรับทดสอบโค้ดโครงสร้างพื้นฐาน คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การทดสอบหน่วยด้วย Terratest” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม

ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. `validate` และ `fmt` ของ Terraform
  2. การทดสอบหน่วยด้วย Terratest
  3. การทดสอบการผสานรวมทรัพยากรคลาวด์
  4. นโยบายในรูปโค้ดและการตรวจสอบการปฏิบัติตามข้อกำหนด
← กลับไปที่ DevOps Bootcamp