运行脚本时,您如何确保它确实按照您的意图执行?也许它删除了一个文件或停止了一个服务。但它是否在它接触到的每个环境、用户会话或机器上都无误地执行了这些操作?如果您的脚本影响了数十个环境——使用 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/