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/