0Pricing
Terraform Infrastructure as Code · درس

اختبار الوحدات باستخدام Terratest

تعلّم كتابة اختبارات وحدات لوحدات Terraform باستخدام Terratest، وهي مكتبة Go لاختبار شفرة البنية التحتية.

اختبار الوحدات باستخدام Terratest درس مجاني في Terraform Infrastructure as Code على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Terraform Infrastructure as Code، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Terraform Infrastructure as Code 4 دروس في المجموع.

لماذا تختبرون البنية التحتية كتعليمة برمجية؟

تتيح لكم البنية التحتية كتعليمة برمجية (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 وإتاحتها للاستخدام.
  • بيانات اعتماد موفّر السحابة: إذا كنتم تنشرون موارد فعلية (حتى في اختبارات الوحدة التي تتصل بواجهة برمجة تطبيقات سحابية)، فستحتاجون إلى وصول موثّق إلى موفّر السحابة (مثل إعداد AWS CLI).

ستحتاجون أيضًا إلى إلمام أساسي بمفاهيم البرمجة بلغة Go.

بنية ملف اختبار Go

تُكتب اختبارات Terratest بلغة Go وتتبع اصطلاحات الاختبار القياسية في Go:

  • تنتهي ملفات الاختبار باللاحقة _test.go (مثل main_test.go).
  • تبدأ دوال الاختبار بـ Test (مثل TestMyModule(t *testing.T)).
  • تستخدم الحزمة المضمّنة testing في Go.

توجد هذه الملفات عادةً بجانب وحدة Terraform أو داخل مجلد test مخصص.

شرح `terraform.Options`

يمثّل الهيكل terraform.Options جوهر اختبار Terraform في Terratest. إذ يحدد هذا الكائن لـ Terratest كيفية تشغيل Terraform.

تشمل الحقول الرئيسية ما يلي:

  • TerraformDir: مسار وحدة Terraform.
  • Vars: متغيرات الإدخال لوحدة Terraform.
  • EnvVars: متغيرات البيئة التي يجب تعيينها لعملية Terraform.
  • BackendConfig: إعدادات الواجهة الخلفية لـ Terraform.

وهو المخطط الذي تستندون إليه لتنفيذ أوامر Terraform ضمن الاختبار.

سير عمل الاختبار الأساسي

يتبع اختبار الوحدة المعتاد في Terratest لـ Terraform الخطوات التالية:

  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"): تسترد مخرجًا من نوع قائمة.

بعد ذلك، تستخدمون تأكيدات الاختبار في 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» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Terraform Infrastructure as Code، انتقل إلى CoddyKit PRO. تتضمن دورة Terraform Infrastructure as Code 4 دروس في المجموع.

ماذا ستتعلم في «اختبار الوحدات باستخدام Terratest»؟

تعلّم كتابة اختبارات وحدات لوحدات Terraform باستخدام Terratest، وهي مكتبة Go لاختبار شفرة البنية التحتية. تتمرن على Terraform Infrastructure as Code مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Terraform Infrastructure as Code؟

لا تُشترط خبرة سابقة. Terraform Infrastructure as Code على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «اختبار الوحدات باستخدام Terratest»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Terraform Infrastructure as Code هذا؟

نعم. كل درس في Terraform Infrastructure as Code يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أمرا Terraform `validate` و`fmt`
  2. اختبار الوحدات باستخدام Terratest
  3. اختبار تكامل الموارد السحابية
  4. السياسة كتعليمة برمجية وفحوصات الامتثال
← العودة إلى Terraform Infrastructure as Code