PowerShell Pester 101:初學者實用指南

執行腳本時,如何確保它確實執行了您期望的操作呢?也許它刪除了一個文件或停止了一個服務。但它是否在觸及的每個環境、用戶會話或機器上無瑕地執行了呢?如果您的腳本影響到數十個——使用 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/