Bildiğiniz gibi, herkes altyapılarını otomatik bir hale getirmek için birçok powershell scriptler yazmakta ve daha sonra bunları bir şekilde otomatik çalışacak hale getirip, devamlı çalışarak birçok iş yükünü azaltmaktadır. Fakat yine herkesin bildiği diğer bir konu ise geliştirilen tüm kodların test edilmesi gerektiğinin önemi. Tüm altyapınızı otomatize ettiniz, fakat test süreçlerinizide otomatize etmeniz gerekiyor. İşte bu yazı serisinde Powershell Modülü olan Pester incelemesini gerçekleştireceğiz.
Günümüzde artık Automation özellikle burayı altını çizerek söylemek istiyorum, Altyapı yönetiminin bel kemiği haline gelmiş durumdadır. DevOps kültürüde bizlere bu kültürün bir parçası olan iyi bir automation stratejisi gerektiğiniden bahseder ve anlatır. PowerShell'in gücünü göz önüne aldığınızda, çalışan bir arkadaşınız veya proje yöneticinizin veya benzer otoritede olan bazı kişiler sizlere temel sorularla size geldiğini hayal edin. Çok basit birkaç soru ile bunları toparlayalım.
Gerçekten yazılan kodun gereksinimlerini karşılıyor muyuz? veya Geliştirilen tüm scriptlerin yaptıkları şeyleri bize nasıl kanıtlarsın? Günün sonunda evet sistem tarafında aksiyon aldığını göreceksiniz fakat yine bunların testlerinin yapılması ve başkası tarafından bu testlere ulaşılması gerekmektedir.
Pester Nedir?
Öncelikle modülün detaylarına girmeden önce, herkesin ortak bir noktası olacaktır. Yazılan tüm Powershell kodları test ediyorum veya ediyorsunuz. Ama aslında sizin test etmeniz önemli olduğu kadar, bu test sürecinizi otomatikleştirmeniz gerekmektedir. İşte bu noktada Pester Powershell Modülü yardımımıza koşmaktadır. Benim gördüğüm hali hazırda bir çok büyük firmaların hepsi hala test süreçlerini manuel bir şekilde gerçekleştirmektedirler. Ufak çaplı yazılan Powershell Scriptlerinde sorun yok, oldukça kısa ve sürec kolay bitiyor olabilir. Fakat ya çok uzun ve iç içe Powershel scriptler veya Powershell Modüle kullananlar ne yapacak?
Pester, PowerShell ile yazılan ve PowerShell için bir test framework'ü olarak tasarlanmış bir open-source tabanlı bir projedir. Open-source olduğu için source code gözden geçirebilir, hatta katkıda bulunabilirsiniz. Bütün projeyi GitHub'da bulabilirsiniz. Kısacası Pester'i kullanarak, PowerShell kodunuzu test etmek, PowerShell komutlarının PowerShell içinden yürütülmesi ve doğrulanması için birim testlerini çalıştırmak için bir framework sağlar. Kod yazılmadan önce test senaryolarımızın yazılması ve tüm yapılacak senaryolara ve süreçleri dahil ederek kodun yazılması ve tekrardan düzenlenebilmesi tekniğine kısacası TDD diyoruz. TDD kültürü, yaklaşımını bize Powershell Pester Modülü kazandırmaktadır.
Pester, Powershell Version 2.x'dan 5.x' a kadar Windows 10,8,7, Vista ve Server 2003'a kadar desteklemektedir. Pester ayrıca, Windows 10 ile built-in gelen neredeyse sayılı open-source araçlardan biri diyebilirim. Ayrıca Powershell Core 6.0 ile Windows, Linux ve MacOS desteği vardır bazı limitler ile beraber.
Pester Modülü Nasıl Kurulur?
Bildiğiniz gibi Powershell Package Management Modülünün bize verdiği yetenek sayesinde artık Powershell Modüllerimizi Repository üzerinden indirebilir durumdayız. Yukarıda belirtiğim gibi Windows 10'da direk pre-installed olarak gelmekte fakat modül devamlı geliştiği için bizlere update etmeyi önermektedir. Aşağıdaki Cmdlet bizlere yardımcı olacaktır.
Module başarılı bir şekilde kurulmuş olacaktır. Şimdi ise Module ile gelen komutları listeleyelim, ve hepsine bir göz gezdirelim.
"Get-Command – Module Pester" yazarak module ile gelen tüm komutları listelemiş olduk. Şimdi ise, Cmdlet baktığımızta, bir çoğunun tek bir kelime ile yazıldığını göreceksiniz. Normalde Powershell üzerinde tüm Scriptler, Functionlar Verb-Noun olarak tasarlanmışlardır. Bu kısımda kullanırken biraz değişik gelebiliyor ama zamanla alışacaksınız, sebebi ise çok basit kullanım şekilde olması ve tek amaç için. Örneğin "Describe ve It, Should" bunlar zaten hemen hemen hakim olduğumuz kelimeler.
Bir sonraki yazımıda artık Pester ile Powershell Code'larımızın test süreçlerini nasıl otomatize ettiğimize değineceğim.