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.
- Yapılandırma bir test ortamına uygulanır.
- Sonuçları doğrulamak için kod çalıştır.
- 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.
Terraform'yi yapılandırma: Henüz bunu yapmamışsanız, aşağıdaki seçeneklerden birini kullanarak Terraform'ı yapılandırabilirsiniz:
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-1kullanarak ping işlemi yapmak mümkündürvm-linux-2

Ö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.
Bash/terminal penceresi açın.
Azure hesabınızda oturum açın.
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"Örnek dizinde dizinine
src/testgidin.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