PowerShell komut dosyalarınız kuruluş için gittikçe önem kazandığından, sonuçları birkaç kez gözlüyor ve komut dosyasının bir hata döndürmediğini onaylamak yeterince iyi bir test değildir. Özellikle, PowerShell kodu yazdıklarınız üretim sistemlerini sürdürüyorlarsa, o komut dosyasını kaya gibi sağlamlaştırmak için birçok farklı senaryo ile çalıştırmak için fazladan bazı adımlar atmanız önemlidir. Bunu yapmanın yolu Pester testleri yaratmaktır.
Pester bir açık kaynak kodlu birim test çerçevesidir. Pester, yaptığınızın beklediğiniz gibi olduğunu onaylamak için PowerShell kodu için testler yazmak için kullanılır. Özetle, Pester, kodunuzun gerektiği gibi çalışmasını sağlamak için kalite güvencesi olarak kodunuzun “üstüne” yazan koddur. Neyse ki, Pester kendisi PowerShell‘de yazılmıştır, bu nedenle onu nasıl kullanacağınızı öğrenmek için bir yazılım geliştiricisi olmak zorunda değilsiniz. Vanilla PowerShell ve Pester arasındaki birkaç sözdizimsel farkı öğrendiğiniz sürece, sorun yaşamayacaktır.
Pester sadece bir PowerShell modülü olduğundan, PowerShell Galerisi’nden kolayca indirebilir ve kurabiliriz. Bu size en son sürümü verecektir. Bununla birlikte, herhangi bir nedenle, en son sürümü edinmek istemiyorsanız, Pester varsayılan olarak Windows 10‘a yüklenmiş olarak gelir.
Yükleme Modülü -Name Pester
Pester modülünü kurduktan sonra, artık bazı testler oluşturmanın zamanı geldi. Pester testleri yalnızca belirli bir şekilde yazılan PowerShell komut dosyalarıdır, ancak tüm test komut dosyalarının. Tests.ps1 ile bitmesi önerilir. Bu teknik olarak gerekli değildir, ancak daha sonra bir sürü test komut dosyası çalıştırırken daha sonra kullanışlıdır.
Pester test betiği, üç farklı “düzey” in hiyerarşisine bölünür. Bu seviyeler açıklama, bağlam ve budur. İçerik bloğu hariç hepsi zorunludur.
‘Seviyeyi tanımla’ tarifini {
Bağlam ‘bağlam seviyesi’}
seviyede ‘{
}
}
}
En yüksek “seviye”, açıklama bloğu, birden fazla blok için bir konteynerdir. Açıklama bloğu farklı yollarla oluşturulabilir, ancak ortak bir yöntem işlevi başına bir açıklama bloğu oluşturmaktır. Ardından, açıklanan bloğun içinde, gerçek sınamalarınız veya iddialarınız olacak birden çok bloğu içerecek şekilde. İşleri basit tutmak için, tek bir işlev için birkaç test oluşturalım. Bu işlev ComputerName adlı tek bir parametreyi kabul eder ve bilgisayar çevrimiçi olduğunda $ true, bilgisayar çevrimdışıysa $ false değerini döndürür.
Işlevi Ping-
Bilgisayar { param ($ BilgisayarAdı)
Sınama Bağlantısı-BilgisayarAdı $ BilgisayarAdı
}
Kabul ederseniz, bu en yaratıcı örnek işlevi değildir çünkü yalnızca Test-Connection’ı kendiniz arayacak, ancak bu basit durumu göstereceksiniz.
Bu işlevi “yapmak” nedir? Bu açık görünebilir, ancak soruyu kendinize sormanız ve yürütülebilecek senaryoları yavaşça gezmeniz önemlidir.
- $ ComputerName FOO ve FOO olduğunda bilgisayarınıza gerçek bir bilgisayar bile olmadığında ne olur?
- $ BilgisayarAdı BAR ve BAR gerçek bir bilgisayar olduğu, ancak DNS üzerinden çözümlenemediğinde ne olur?
- $ BilgisayarAdı gerçek bir bilgisayar olduğunda ancak ping’e yanıt vermediğinde ne olur?
- $ BilgisayarAdı gerçek bilgisayar ama ne olur muping yanıt?
Bunlar gerçek testler oluşturmaya başlamanız için kendinize sormanız gereken soruların türüdür. Şimdilik, yalnızca ComputerName’nın gerçek bir bilgisayar olduğunu ve DNS yoluyla çözülebileceğini varsayacağız. Bu varsayımı yaptığımızdan beri, yalnızca iki test oluşturmamız gerekiyor; $ True değerini garantilemek için bir test döndürülür ve Test-Connection’ın $ true veya $ false değerini döndüren senaryosu göz önüne alındığında, $ false değerini sağlamak için bir test döndürülür. Ama, nasıl yaptığımız yapmak Test-Bağlantı dönüş $ true veya $ false. DNS hile ya da çevresel bir şey yapmayacağız. Bunun yerine, istediğimiz her şeyi geri getirmek için Test-Connection’ı alay edebiliriz.
Basit bir tanım bloğu oluşturalım ve ikisi senaryomuzu temsil eden blokları oluşturalım.
‘Ping-Computer’u tarif edin {‘ bilgisayar çevrimiçi
olduğu zaman $ true döndürmelidir ‘{
}}
bilgisayar çevrimdışı olduğunda $ false döndürmelidir’ {
}
}
Şimdi “bilgisayar çevrimiçi” ve “bilgisayar çevrimdışı” benzetimi yapmamız gerektiğini anlamalıyız. Bunu yapmak için, Test-Connection için bir alay oluşturacağız.
Alay al ‘Test-Bağlantı’ -MockWith {$ true}
Pester’deki Mocks, komutları duruma göre onlara ihtiyacımız olan şeyi geri getirmeye zorlamak için yollar. Bu durumda, $ true veya $ false değerini geri gönderebilmek için Test-Connection’a ihtiyacımız var. Yukarıda, Test-Connection’ı $ true değerine döndürmeye zorladığımı görebilirsiniz. Ben devam edip, bunu testime ekleyeceğim, aksine tam tersi yanlış duruma sokacağım.
‘Ping-Bilgisayar’ {tanımlamak
{o bilgisayar çevrimiçi olduğunda doğru $ dönmelidir ‘
sahte ‘Test-Bağlantı’ -MockWith {$ true}
Ping-Bilgisayar -ComputerName ‘DOESNOTMATTER’
}
o ‘$ return false gerekirken bilgisayar
Çevrimdışı ‘{ mock’ Test-Connection ‘-MockWith {$ false}
Ping-Bilgisayar-BilgisayarAdı’ DOESNOTMATTER ‘
}
}
Ayrıca, işlevi her blokta çalıştırdığımıza dikkat edin. Pester, bir anlamda, yürütmeyi “kaydetmek” ve nasıl çalıştığını yakalamaktır. İşlevin nasıl çalıştırıldığına karar verdikten sonra, artık işlevin gerçek çıktısını beklediğimizle karşılaştırmak için should anahtarını kullanabiliriz.
‘Ping-
Computer’u tarif edin {bilgisayar çevrimiçi olduğunda’ $ true’ı döndürmelidir ‘
{
mock’ Test-Connection ‘-MockWith {$ true}
Ping-Bilgisayar -ComputerName’ DOESNOTMATTER ‘| Gerçek, $ edilmelidir
}
{o bilgisayar çevrimdışı olduğunda $ return false gerekir ‘
sahte ‘Test-Bağlantı’ -MockWith {$ false}
Ping-Bilgisayar -ComputerName ‘DOESNOTMATTER’ | $ False olmalıdır
}
}
Bu test şimdi Pester modülünün içindeki Invoke-Pester komutunu kullanarak gerçekleşebilir. İki başarıyı döndürdüğünü görebilirsiniz.
PS> Invoke-Pester -Path C: \ Ping-Computer.Tests.ps1 Bilgisayar
açıkken Ping-Bilgisayar’ı tanımlamak
[+] true döndürmelidir 285ms
[+] bilgisayar çevrimdışıyken $ false döndürmelidir 144ms
Bu yardımcı oldu mu?
0 / 0