執行腳本時,如何確保它確實執行了您期望的操作呢?也許它刪除了一個文件或停止了一個服務。但它是否在觸及的每個環境、用戶會話或機器上無瑕地執行了呢?如果您的腳本影響到數十個——使用 Pester 進行測試是您最好的選擇。
Pester 是功能強大的 PowerShell 模組,幫助您使用特定於領域的語言(DSL)編寫自動化測試。在本教程中,您將學會消除猜測,並創建一個堅固的流程來驗證您的腳本。
準備好了,讓 Pester 提升您的腳本信心吧!
安裝和配置 Pester
Pester 確保您腳本的操作符合您在任何環境中的期望。使用 Pester 進行測試是管理基礎架構的 PowerShell 的一項基本技能。
但首先,我們需要安裝 Pester 以便環繞一個用於配置服務器的腳本建立一些測試,以了解 Pester 測試的工作原理。
您可以從 PowerShell Gallery 下載 Pester
模組:
Install-Module Pester
如果遇到警告,這可能是因為 Windows 10(以及更高版本)客戶端預設安裝了舊版本的 Pester。例如,版本 3.4.0 經常被預先安裝。
請確保刪除舊版本以避免衝突:
$module = "C:\Program Files\WindowsPowerShell\Modules\Pester\3.4.0" takeown /F $module /A /R icacls $module /reset icacls $module /grant "*S-1-5-32-544:F" /inheritance:d /T Remove-Item -Path $module -Recurse -Force -Confirm:$false
此腳本接管 Pester 3.4.0 文件夾的所有權,更新權限並將其移除。
通過附加 -Force
參數安裝 Pester 的最新版本:
Install-Module Pester -Force
您可能會看到有關新版本簽名的另一個警告。微軟簽署了預安裝版本,而 Pester 的維護者 Jakub 簽署了最新版本。
使用以下命令驗證已安裝的版本:
Get-Module -Name Pester -ListAvailable
創建 Pester 測試文件
現在 Pester 已安裝,讓我們創建一些測試。為了演示的目的,假設有一個腳本負責安裝 IIS Windows 功能。
在您希望的目錄中創建一個名為 ServerProvisioning.Tests.ps1 的 PowerShell 腳本;假設它位於您的 ~\Documents 文件夾中。
接下來,使用 Invoke-Pester
cmdlet 執行 Pester 測試:
cd ~\Documents Invoke-Pester
在沒有可用測試的情況下運行此命令將不會執行任何測試。
讓我們使用 Pester 的層次塊結構添加一些測試,其中:
describe
代表一類測試,例如腳本的主要功能。context
可選地將測試組織成子類別。it
定義單個測試。
describe 'IIS' { context 'Windows features' { it 'installs the Web-Server Windows feature' { } } } describe 'RegistryTweaks' { } describe 'SoftwareInstalls' { }
添加和運行測試
想像一個配置伺服器的腳本,但缺少一個關鍵步驟,比如啟用所需的功能。如果不加以檢查,這一疏忽可能會在生產環境中造成連鎖問題。
假設伺服器配置腳本已運行,任務是確認 Web-Server
功能是否已安裝。如果已安裝,請執行手動檢查。
運行以下命令來手動檢查遠程伺服器上是否安裝了 Web-Server
功能(IIS)。
Invoke-Command -ComputerName SRV1 -ScriptBlock { (Get-WindowsFeature -ComputerName SRV1 -Name Web-Server).Installed }
如果該功能已安裝,此命令將返回 True
;否則返回 False
。
現在,在 it
塊中添加以下內容以自動化進行此測試。使用 should
運算子和 -BeTrue
條件來斷言該功能已安裝。
describe 'IIS' { context 'Windows features' { it 'installs the Web-Server Windows feature' { Invoke-Command -ComputerName SRV1 -ScriptBlock { (Get-WindowsFeature -ComputerName SRV1 -Name Web-Server).Installed } | should -BeTrue } } }
最後,重新運行測試:
cd ~\documents Invoke-Pester
如預期,如果功能未安裝,測試將失敗。
VS Code 也有一些很棒的 Pester 整合。您可以在 VS Code 中直接點擊單個測試上的 Run Tests
選項,而不是運行 Invoke-Pester
命令。這個操作會執行特定的測試。
結論
在本教程中,您學會了如何使用 Pester 自動化測試您的 PowerShell 腳本。您已經涵蓋了驗證腳本的基本步驟。這些步驟包括安裝和配置 Pester、創建測試文件,以及編寫您的第一個自動化測試。
通過探索 Pester 如何處理更高級的場景,例如測試 API、模擬命令,或運行部署前後的驗證,來構建在這個基礎上。
將 Pester 整合到您的工作流程中,您將改進腳本並對其可靠性產生信任,自信地擴展自動化工作!
Source:
https://adamtheautomator.com/powershell-pester-testing-guide/