Terraform projelerinde 4.00.000 Terratest testi uygulama

Bir programın üretime dağıtmadan önce çalıştığını doğrulamak için 2.00.000 (E2E) testi kullanılır. Örnek senaryo, bir sanal ağa iki sanal makine dağıtan bir Terraform modülü olabilir. İki makineye ping atması engellenebilir. Bu örnekte, dağıtımdan önce amaçlanan sonucu doğrulamak için bir test tanımlayabilirsiniz.

E2E testi genellikle üç adımlı bir işlemdir.

  1. Yapılandırma bir test ortamına uygulanır.
  2. Sonuçları doğrulamak için kod çalıştır.
  3. Test ortamı yeniden başlatılarak veya devre dışı bırakılarak (bir sanal makinenin taşınması gibi).

Bu makalede şunları öğreneceksiniz:

  • Terratest ile 1.00.000 testin temellerini anlama
  • Golang kullanarak 4.00.000 test yazmayı öğrenin
  • Kod, Azure DevOps olduğunda otomatik olarak uç testleri tetiklemek için Azure DevOps kullanmayı öğrenin

1. Ortamınızı yapılandırma

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Go programlama dili:Go'ya yükleyin.

  • Örnek kod ve kaynaklar: DownGit aracını kullanarak, 1 GitHub test projesini indirin ve örnek kodu içeren yeni bir dizinde sıkıştırmayı açın. Bu dizin, örnek dizini olarak adlandırılır.

2. 9.00.000 testi anlama

End- End testleri, bir sistemin toplu bir bütün olarak çalıştığını doğrular. Bu tür bir test, belirli modülleri test etmek yerine kullanılır. Terraform projeleri için uz-20 test, dağıtılanların doğrulanmasına olanak sağlar. Bu test türü, dağıtım öncesi senaryoları test etmek için 2000'den farklı olan birçok farklı türde testten farklıdır. End-to-end testleri, birden çok modül içeren ve birden çok kaynak üzerinde eyleme geçilen karmaşık sistemleri test etmek için kritik öneme sahiptir. Bu tür senaryolarda, çeşitli modüllerin doğru etkileşimde olup olmadığını belirlemenin tek yolu 1.000 testtir.

Bu makalede esnim testi uygulamak için Terratest'in kullanımına odaklanlanmıştır. Terratest, aşağıdaki görevi yerine getirmesi için gereken tüm sıhhiyyeleri sağlar:

  • Terraform yapılandırmasını dağıtma
  • Dağıtılanları doğrulamak için Go dilini kullanarak test yazmanızı sağlar
  • Testleri aşamalar olarak düzenleme
  • Dağıtılan altyapıyı yok

3. Test örneğini anlama

Bu makale için Azure/terraformörnek depolamasında bulunan bir örneği kullanıyoruz.

Bu örnek, aynı sanal ağa iki Linux sanal makinesi dağıtan bir Terraform yapılandırmasını tanımlar. adlı bir vm-linux-1 VM'nin genel IP adresi vardır. SSH bağlantılarına izin vermek için yalnızca bağlantı noktası 22 açılır. İkinci VM- vm-linux-2 tanımlı bir genel IP adresine sahip değil.

Test aşağıdaki senaryoları doğrular:

  • Altyapı doğru dağıtıldı
  • Bağlantı noktası 22'de bir SSH oturumu açmak mümkündür vm-linux-1
  • üzerinde SSH oturumunu vm-linux-1 kullanarak ping işlemi yapmak mümkündür vm-linux-2

Örnek uz-4-2 test senaryosu

Örneği indirdiyebilirsiniz.Bu senaryo için Terraform yapılandırması dosyasında bulunabilir. Dosyası, main.tf önceki şekilde temsil edilen Azure altyapısını dağıtmak için gereken her şeyi içerir.

Sanal makine oluşturma hakkında bilginiz yoksa bkz. Terraform kullanarak Azure'da altyapı ile Linux VM oluşturma.

Dikkat

Bu makalede sunulan örnek senaryo yalnızca çizim amaçlıdır. Sıca sıyrı bir testin adımlarına odaklanmak için her şeyi basit tuttuk. SSH bağlantı noktalarını genel IP adresi üzerinden ortaya çıkaran üretim sanal makinelerinin olması önerilmez.

4. Test örneğini inceleme

End-to-end testi Go dilinde yazılmıştır ve Terratest çerçevesini kullanır. Örnek indirildiktensonra test dosyasında tanımlanır.

Aşağıdaki kaynak kodu Terratest kullanan bir Golang testinin standart yapısını gösterir:

package test

import (
    "testing"

    "github.com/gruntwork-io/terratest/modules/terraform"
    test_structure "github.com/gruntwork-io/terratest/modules/test-structure"
)

func TestEndToEndDeploymentScenario(t *testing.T) {
    t.Parallel()

    fixtureFolder := "../"

    // Use Terratest to deploy the infrastructure
    test_structure.RunTestStage(t, "setup", func() {
        terraformOptions := &terraform.Options{
            // Indicate the directory that contains the Terraform configuration to deploy
            TerraformDir: fixtureFolder,
        }

        // Save options for later test stages
        test_structure.SaveTerraformOptions(t, fixtureFolder, terraformOptions)

        // Triggers the terraform init and terraform apply command
        terraform.InitAndApply(t, terraformOptions)
    })

    test_structure.RunTestStage(t, "validate", func() {
        // run validation checks here
        terraformOptions := test_structure.LoadTerraformOptions(t, fixtureFolder)
		    publicIpAddress := terraform.Output(t, terraformOptions, "public_ip_address")
    })

    // When the test is completed, teardown the infrastructure by calling terraform destroy
    test_structure.RunTestStage(t, "teardown", func() {
        terraformOptions := test_structure.LoadTerraformOptions(t, fixtureFolder)
        terraform.Destroy(t, terraformOptions)
    })
}

Önceki kod parçacığında gördüğünüz gibi test üç aşamadan oluşur:

  • kurulum:Terraform'u çalıştırarak yapılandırmayı dağıtır
  • validate': Doğrulama denetimleri ve onayları yapar
  • teardown:Test çalıştırılmadan sonra altyapıyı temizler

Aşağıdaki listede Terratest çerçevesi tarafından sağlanan temel işlevlerden bazıları verilmektedir:

  • terraform. InitAndApply:Go kodundan ve terraform apply çalıştırmayı sağlar
  • terraform. Çıkış:Dağıtım çıkış değişkeninin değerini verir.
  • terraform. Yoket: Go kodundan komutunu çalıştırır.
  • test_structure. LoadTerraformOptions:Terraform seçeneklerini (yapılandırma ve değişkenler gibi) durumdan yükler
  • test_structure. SaveTerraformOptions:Terraform seçeneklerini (yapılandırma ve değişkenler gibi) durumuna kaydeder

5. Test örneğini çalıştırma

Aşağıdaki adımlar, örnek yapılandırma ve dağıtıma karşı testi çalıştırın.

  1. Bash/terminal penceresi açın.

  2. Azure hesabınızda oturum açın.

  3. Bu örnek testi çalıştırmak için giriş dizinde ve SSH özel/ortak anahtar id_rsaid_rsa.pub çifti adı gerekir. yerine <your_user_name> giriş dizininizin adını yazın.

    export TEST_SSH_KEY_PATH="~/.ssh/id_rsa"
    
  4. Örnek dizinde dizinine src/test gidin.

  5. Testi çalıştırın.

    go test -v ./ -timeout 10m
    

6. Sonuçları doğrulama

başarıyla go test çalıştırıldıktan sonra aşağıdaki çıkışa benzer sonuçlar elde edilir:

--- PASS: TestEndToEndDeploymentScenario (390.99s)
PASS
ok      test    391.052s

Azure'da Terraform sorunlarını giderme

Azure'da Terraform kullanırken karşılaşılan yaygın sorunları giderme

Sonraki adımlar